是否有任何命令可以求出R中平均值的标准误差?
smdnsysy1#
标准误差就是标准差除以样本量的平方根,所以你可以很容易地建立自己的函数:
> std <- function(x) sd(x)/sqrt(length(x)) > std(c(1,2,3,4)) [1] 0.6454972
uxh89sit2#
标准误差(SE)就是抽样分布的标准差。抽样分布的方差是数据方差除以N,SE是方差的平方根。从这一点可以看出,在SE计算中使用方差更有效。R中的sd函数已经计算了一个平方根(sd的代码在R中,只需键入“sd”即可显示)。因此,下面的代码效率最高。
sd
se <- function(x) sqrt(var(x)/length(x))
zmeyuzjn3#
上面约翰的回答去掉了讨厌的NA:
stderr <- function(x, na.rm=FALSE) { if (na.rm) x <- na.omit(x) sqrt(var(x)/length(x)) }
jjjwad0x4#
plotrix包中有一个内置函数可用于此目的:std.error
5cnsuln75#
sciplot软件包具有内置函数se(x)
se(x)
uurv41yg6#
由于我时不时地会回到这个问题,而且因为这个问题很老了,我贴了一个投票最多的答案的基准。注意,对于@Ian和@John的答案,我创建了另一个版本,我没有使用length(x),而是使用sum(!is.na(x))(为了避免NA),我使用了一个10^6的向量,重复了1,000次。
length(x)
sum(!is.na(x))
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)
aoyhnmkz7#
请记住,平均值也可以通过使用线性模型获得,根据单个截距对变量进行回归,您也可以使用lm(x~1)函数进行此操作!优点是:
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
由reprex package(v0.3.0)于2020年10月6日创建
dojqjjoe8#
您可以使用pastec包中的stat.desc函数。
library(pastec) stat.desc(x, BASIC =TRUE, NORMAL =TRUE)
你可以在这里找到更多信息:https://www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.desc
8条答案
按热度按时间smdnsysy1#
标准误差就是标准差除以样本量的平方根,所以你可以很容易地建立自己的函数:
uxh89sit2#
标准误差(SE)就是抽样分布的标准差。抽样分布的方差是数据方差除以N,SE是方差的平方根。从这一点可以看出,在SE计算中使用方差更有效。R中的
sd
函数已经计算了一个平方根(sd
的代码在R中,只需键入“sd”即可显示)。因此,下面的代码效率最高。zmeyuzjn3#
上面约翰的回答去掉了讨厌的NA:
jjjwad0x4#
plotrix包中有一个内置函数可用于此目的:std.error
5cnsuln75#
sciplot软件包具有内置函数
se(x)
uurv41yg6#
由于我时不时地会回到这个问题,而且因为这个问题很老了,我贴了一个投票最多的答案的基准。
注意,对于@Ian和@John的答案,我创建了另一个版本,我没有使用
length(x)
,而是使用sum(!is.na(x))
(为了避免NA),我使用了一个10^6的向量,重复了1,000次。结果:
aoyhnmkz7#
请记住,平均值也可以通过使用线性模型获得,根据单个截距对变量进行回归,您也可以使用
lm(x~1)
函数进行此操作!优点是:
confint()
可立即获得置信区间car::linear.hypothesis()
sandwich
由reprex package(v0.3.0)于2020年10月6日创建
dojqjjoe8#
您可以使用pastec包中的stat.desc函数。
你可以在这里找到更多信息:https://www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.desc