在处理具有因子 R 的数据时,可使用 lm() 函数计算每个组的均值。这也给出了估计均值的标准误差。但是这个标准误差与我手工计算得到的不同。
这是一个示例(取自此处预测 R 中两组之间的差异)
首先用 lm() 计算平均值:
mtcars$cyl <- factor(mtcars$cyl)
mylm <- lm(mpg ~ cyl, data = mtcars)
summary(mylm)$coef
Estimate Std. Error t value Pr(>|t|)
(Intercept) 26.663636 0.9718008 27.437347 2.688358e-22
cyl6 -6.920779 1.5583482 -4.441099 1.194696e-04
cyl8 -11.563636 1.2986235 -8.904534 8.568209e-10
截距是第一组 4 缸汽车的平均值。为了通过直接计算获得手段,我使用这个:
with(mtcars, tapply(mpg, cyl, mean))
4 6 8
26.66364 19.74286 15.10000
为了获得平均值的标准误差,我计算样本标准变异并除以每组中的观察数:
with(mtcars, tapply(mpg, cyl, sd)/sqrt(summary(mtcars$cyl)) )
4 6 8
1.3597642 0.5493967 0.6842016
直接计算给出了相同的平均值,但两种方法的标准误差不同,我预计会得到相同的标准误差。这里发生了什么?它与 lm() 拟合每个组的平均值和错误项有关吗?
编辑: 在斯文斯回答(下)之后,我可以更简洁明了地提出我的问题。
对于分类数据,我们可以通过使用不带截距的 lm() 来计算不同组的变量均值。
mtcars$cyl <- factor(mtcars$cyl)
mylm <- lm(mpg ~ cyl, data = mtcars)
summary(mylm)$coef
Estimate Std. Error
cyl4 26.66364 0.9718008
cyl6 19.74286 1.2182168
cyl8 15.10000 0.8614094
我们可以将其与直接计算均值及其标准误差进行比较:
with(mtcars, tapply(mpg, cyl, mean))
4 6 8
26.66364 19.74286 15.10000
with(mtcars, tapply(mpg, cyl, sd)/sqrt(summary(mtcars$cyl)) )
4 6 8
1.3597642 0.5493967 0.6842016
这两种方法的方法完全相同,但标准误差不同(Sven 也注意到)。我的问题是为什么它们不同而不相同?
(编辑我的问题时,我应该删除原始文本还是像我一样添加我的版本)