มีคำสั่งใดในการค้นหาข้อผิดพลาดมาตรฐานของค่าเฉลี่ยใน R หรือไม่?
มีคำสั่งใดในการค้นหาข้อผิดพลาดมาตรฐานของค่าเฉลี่ยใน R หรือไม่?
คำตอบ:
ข้อผิดพลาดมาตรฐานเป็นเพียงค่าเบี่ยงเบนมาตรฐานหารด้วยรากที่สองของขนาดตัวอย่าง คุณจึงสามารถสร้างฟังก์ชันของคุณเองได้อย่างง่ายดาย:
> std <- function(x) sd(x)/sqrt(length(x))
> std(c(1,2,3,4))
[1] 0.6454972
ข้อผิดพลาดมาตรฐาน (SE) เป็นเพียงค่าเบี่ยงเบนมาตรฐานของการแจกแจงการสุ่มตัวอย่าง ความแปรปรวนของการแจกแจงการสุ่มตัวอย่างคือความแปรปรวนของข้อมูลหารด้วย N และ SE คือรากที่สองของสิ่งนั้น จากความเข้าใจนั้นเราจะเห็นได้ว่าการใช้ความแปรปรวนในการคำนวณ SE มีประสิทธิภาพมากกว่า sd
ฟังก์ชั่นใน R แล้วไม่หนึ่งราก (สำหรับsd
เป็นในการวิจัยและเปิดเผยโดยเพียงแค่พิมพ์ "SD") ดังนั้นสิ่งต่อไปนี้จะมีประสิทธิภาพสูงสุด
se <- function(x) sqrt(var(x)/length(x))
เพื่อให้ฟังก์ชันซับซ้อนขึ้นเล็กน้อยและจัดการกับตัวเลือกทั้งหมดที่คุณสามารถส่งผ่านไปvar
ได้คุณสามารถทำการปรับเปลี่ยนนี้ได้
se <- function(x, ...) sqrt(var(x, ...)/length(x))
การใช้ไวยากรณ์นี้เราสามารถใช้ประโยชน์จากสิ่งต่างๆเช่นวิธีvar
จัดการกับค่าที่ขาดหายไป สิ่งที่สามารถส่งผ่านไปvar
เป็นอาร์กิวเมนต์ที่ตั้งชื่อสามารถใช้ในการse
เรียกนี้
stderr
เป็นชื่อฟังก์ชันในbase
.
stderr
ไม่คำนวณข้อผิดพลาดมาตรฐานที่แสดงdisplay aspects. of connection
stderr
คำนวณข้อผิดพลาดมาตรฐานเขาเตือนว่าชื่อนี้ถูกใช้ในฐานและจอห์นตั้งชื่อฟังก์ชั่นของเขาstderr
(ตรวจสอบประวัติการแก้ไข ... )
คำตอบของ John ข้างต้นที่ลบ NA ที่น่ารำคาญ:
stderr <- function(x, na.rm=FALSE) {
if (na.rm) x <- na.omit(x)
sqrt(var(x)/length(x))
}
stderr
ในbase
แพ็กเกจที่ทำอย่างอื่นดังนั้นจึงควรเลือกชื่ออื่นสำหรับชื่อนี้เช่นse
sciplot แพ็คเกจมีฟังก์ชันในตัว se (x)
เมื่อฉันย้อนกลับไปที่คำถามนี้ทุกครั้งและเนื่องจากคำถามนี้เก่าแล้วฉันจึงโพสต์เกณฑ์มาตรฐานสำหรับคำตอบที่ได้รับการโหวตมากที่สุด
โปรดทราบว่าสำหรับคำตอบของ @ Ian และ @ John ฉันได้สร้างเวอร์ชันอื่น แทนที่จะใช้length(x)
ฉันใช้sum(!is.na(x))
(เพื่อหลีกเลี่ยง NAs) ฉันใช้เวกเตอร์ 10 ^ 6 โดยมีการทำซ้ำ 1,000 ครั้ง
library(microbenchmark)
set.seed(123)
myVec <- rnorm(10^6)
IanStd <- function(x) sd(x)/sqrt(length(x))
JohnSe <- function(x) sqrt(var(x)/length(x))
IanStdisNA <- function(x) sd(x)/sqrt(sum(!is.na(x)))
JohnSeisNA <- function(x) sqrt(var(x)/sum(!is.na(x)))
AranStderr <- function(x, na.rm=FALSE) {
if (na.rm) x <- na.omit(x)
sqrt(var(x)/length(x))
}
mbm <- microbenchmark(
"plotrix" = {plotrix::std.error(myVec)},
"IanStd" = {IanStd(myVec)},
"JohnSe" = {JohnSe(myVec)},
"IanStdisNA" = {IanStdisNA(myVec)},
"JohnSeisNA" = {JohnSeisNA(myVec)},
"AranStderr" = {AranStderr(myVec)},
times = 1000)
mbm
ผล:
Unit: milliseconds
expr min lq mean median uq max neval cld
plotrix 10.3033 10.89360 13.869947 11.36050 15.89165 125.8733 1000 c
IanStd 4.3132 4.41730 4.618690 4.47425 4.63185 8.4388 1000 a
JohnSe 4.3324 4.41875 4.640725 4.48330 4.64935 9.4435 1000 a
IanStdisNA 8.4976 8.99980 11.278352 9.34315 12.62075 120.8937 1000 b
JohnSeisNA 8.5138 8.96600 11.127796 9.35725 12.63630 118.4796 1000 b
AranStderr 4.3324 4.41995 4.634949 4.47440 4.62620 14.3511 1000 a
library(ggplot2)
autoplot(mbm)
โดยทั่วไปสำหรับข้อผิดพลาดมาตรฐานในพารามิเตอร์อื่น ๆ คุณสามารถใช้แพคเกจการบูตสำหรับการจำลอง bootstrap (หรือเขียนด้วยตัวคุณเอง)
คุณสามารถใช้ฟังก์ชัน stat.desc จากแพ็คเกจ Pastec
library(pastec)
stat.desc(x, BASIC =TRUE, NORMAL =TRUE)
คุณสามารถหาข้อมูลเพิ่มเติมได้จากที่นี่: https://www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.desc
โปรดจำไว้ว่าค่าเฉลี่ยสามารถทำได้โดยใช้แบบจำลองเชิงเส้นการถอยหลังตัวแปรเทียบกับการสกัดกั้นเดียวคุณสามารถใช้lm(x~1)
ฟังก์ชันนี้ได้เช่นกัน!
ข้อดีคือ:
confint()
car::linear.hypothesis()
sandwich
## generate data
x <- rnorm(1000)
## estimate reg
reg <- lm(x~1)
coef(summary(reg))[,"Std. Error"]
#> [1] 0.03237811
## conpare with simple formula
all.equal(sd(x)/sqrt(length(x)),
coef(summary(reg))[,"Std. Error"])
#> [1] TRUE
## extract confidence interval
confint(reg)
#> 2.5 % 97.5 %
#> (Intercept) -0.06457031 0.0625035
สร้างเมื่อ 2020-10-06 โดยแพ็คเกจ reprex (v0.3.0)
y <- mean(x, na.rm=TRUE)
sd(y)
สำหรับค่าเบี่ยงเบนมาตรฐานvar(y)
สำหรับความแปรปรวน
อนุพันธ์ทั้งสองใช้n-1
ในตัวส่วนเพื่อให้เป็นไปตามข้อมูลตัวอย่าง