因子を含むデータを扱う場合、Rを使用してlm()関数で各グループの平均を計算できます。これにより、推定平均の標準誤差も得られます。しかし、この標準誤差は、手作業による計算から得られるものとは異なります。
ここに例があります(Rの2つのグループ間の違いを予測するここから取得)
最初に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
直接計算は同じ平均を与えますが、標準誤差は2つのアプローチで異なり、同じ標準誤差が得られると期待していました。ここで何が起こっているのですか?これは、各グループの平均と誤差項に適合する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
平均はまったく同じですが、これらの2つの方法では標準誤差が異なります(Svenも気付きます)。私の質問は、なぜそれらが異なり、同じではないのですか?
(質問を編集するときに、元のテキストを削除するか、エディションを追加する必要がありますか?)