Có lệnh nào để tìm sai số chuẩn của giá trị trung bình trong R không?
Câu trả lời:
Sai số chuẩn chỉ là độ lệch chuẩn chia cho căn bậc hai của kích thước mẫu. Vì vậy, bạn có thể dễ dàng tạo chức năng của riêng mình:
> std <- function(x) sd(x)/sqrt(length(x))
> std(c(1,2,3,4))
[1] 0.6454972
Sai số chuẩn (SE) chỉ là độ lệch chuẩn của phân phối lấy mẫu. Phương sai của phân phối lấy mẫu là phương sai của dữ liệu chia cho N và SE là căn bậc hai của phân bố đó. Từ sự hiểu biết đó, người ta có thể thấy rằng sử dụng phương sai trong tính toán SE sẽ hiệu quả hơn. Các sd
chức năng trong R đã làm một căn bậc hai (mã cho sd
là trong R và tiết lộ bằng cách chỉ cần gõ "sd"). Do đó, cách sau là hiệu quả nhất.
se <- function(x) sqrt(var(x)/length(x))
để làm cho hàm phức tạp hơn một chút và xử lý tất cả các tùy chọn mà bạn có thể chuyển đến var
, bạn có thể thực hiện sửa đổi này.
se <- function(x, ...) sqrt(var(x, ...)/length(x))
Sử dụng cú pháp này, người ta có thể tận dụng những thứ như cách var
xử lý các giá trị bị thiếu. Bất kỳ thứ gì có thể được chuyển tới var
dưới dạng đối số được đặt tên đều có thể được sử dụng trong se
lệnh gọi này .
stderr
là một tên chức năng trong base
.
stderr
KHÔNG tính toán sai số chuẩn nó sẽ hiển thịdisplay aspects. of connection
stderr
tính toán lỗi tiêu chuẩn, anh ấy đã cảnh báo rằng tên này được sử dụng trong cơ sở và John ban đầu đã đặt tên cho hàm của mình stderr
(kiểm tra lịch sử chỉnh sửa ...).
Một phiên bản của câu trả lời của John ở trên loại bỏ NA phiền phức:
stderr <- function(x, na.rm=FALSE) {
if (na.rm) x <- na.omit(x)
sqrt(var(x)/length(x))
}
stderr
trong base
gói thực hiện một cái gì đó khác, vì vậy có thể tốt hơn nếu chọn một tên khác cho chức năng này, ví dụse
Gói sciplot có chức năng tích hợp se (x)
Khi tôi quay lại câu hỏi này thỉnh thoảng và vì câu hỏi này đã cũ, tôi đang đăng một điểm chuẩn cho các câu trả lời được bình chọn nhiều nhất.
Lưu ý rằng đối với câu trả lời của @ Ian và @ John, tôi đã tạo một phiên bản khác. Thay vì sử dụng length(x)
, tôi đã sử dụng sum(!is.na(x))
(để tránh NAs). Tôi đã sử dụng một vector 10 ^ 6, với 1.000 lần lặp lại.
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
Các kết quả:
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)
Bạn có thể sử dụng hàm stat.desc từ gói pastec.
library(pastec)
stat.desc(x, BASIC =TRUE, NORMAL =TRUE)
bạn có thể tìm thêm về nó từ đây: https://www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.desc
Hãy nhớ rằng giá trị trung bình cũng có thể thu được bằng cách sử dụng mô hình tuyến tính, hồi quy biến theo một điểm chặn duy nhất, bạn cũng có thể sử dụng lm(x~1)
hàm cho điều này!
Ưu điểm là:
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
Được tạo vào 2020-10-06 bởi gói reprex (v0.3.0)
y <- mean(x, na.rm=TRUE)
sd(y)
cho độ lệch chuẩn var(y)
đối với phương sai.
Cả hai phép chiết xuất đều sử dụng n-1
ở mẫu số nên chúng đều dựa trên dữ liệu mẫu.