R语言 如何求出平均值的标准误?

ckx4rj1h  于 2023-01-28  发布在  其他
关注(0)|答案(8)|浏览(463)

是否有任何命令可以求出R中平均值的标准误差?

smdnsysy

smdnsysy1#

标准误差就是标准差除以样本量的平方根,所以你可以很容易地建立自己的函数:

> std <- function(x) sd(x)/sqrt(length(x))
> std(c(1,2,3,4))
[1] 0.6454972
uxh89sit

uxh89sit2#

标准误差(SE)就是抽样分布的标准差。抽样分布的方差是数据方差除以N,SE是方差的平方根。从这一点可以看出,在SE计算中使用方差更有效。R中的sd函数已经计算了一个平方根(sd的代码在R中,只需键入“sd”即可显示)。因此,下面的代码效率最高。

se <- function(x) sqrt(var(x)/length(x))
zmeyuzjn

zmeyuzjn3#

上面约翰的回答去掉了讨厌的NA:

stderr <- function(x, na.rm=FALSE) {
  if (na.rm) x <- na.omit(x)
  sqrt(var(x)/length(x))
}
jjjwad0x

jjjwad0x4#

plotrix包中有一个内置函数可用于此目的:std.error

5cnsuln7

5cnsuln75#

sciplot软件包具有内置函数se(x)

uurv41yg

uurv41yg6#

由于我时不时地会回到这个问题,而且因为这个问题很老了,我贴了一个投票最多的答案的基准。
注意,对于@Ian和@John的答案,我创建了另一个版本,我没有使用length(x),而是使用sum(!is.na(x))(为了避免NA),我使用了一个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)

aoyhnmkz

aoyhnmkz7#

请记住,平均值也可以通过使用线性模型获得,根据单个截距对变量进行回归,您也可以使用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日创建

dojqjjoe

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

相关问题