R:lm()を使用した因子の平均と平均の標準誤差の計算と直接計算の編集


8

因子を含むデータを扱う場合、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も気付きます)。私の質問は、なぜそれらが異なり、同じではないのですか?

(質問を編集するときに、元のテキストを削除するか、エディションを追加する必要がありますか?)

回答:


7

標準誤差の違いは、回帰では分散の結合推定値を計算するのに対し、他の計算では分散の個別推定値を計算するためです。


2
これを明確にしていただきありがとうございます。私はちょうど素敵働いた例で、ここでは同様の問題のために非常に良い答えを見つけた: stats.stackexchange.com/questions/29479/...
SRJ

はい、それは関連しているように見えます。よく見つかりました。
Glen_b-モニカを

5

このlm関数は、因子レベルの平均と標準誤差を推定しませんが、因子レベルに関連する対照を推定します。

コントラストが手動で指定されていない場合、Rでは治療のコントラストが使用されます。これは、カテゴリデータのデフォルトです。

因子にmtcars$cylは3つのレベル(4、6、および8)があります。デフォルトでは、最初のレベルである4が参照カテゴリーとして使用されます。線形モデルの切片は、参照カテゴリの従属変数の平均に対応しています。しかし、他の影響は、1つの因子レベルと参照カテゴリーの比較から生じます。したがって、の推定値と標準誤差はcyl6との間の差に関連しているcyl == 6cyl == 4。効果はcyl8差に関連しているcyl == 8cyl == 4

あなたがしたい場合はlm因子レベルの手段を計算する機能を、あなたは(切片項を除外しなければなりません0 + ...):

summary(lm(mpg ~ 0 + as.factor(cyl), mtcars))

Call:
lm(formula = mpg ~ 0 + as.factor(cyl), data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.2636 -1.8357  0.0286  1.3893  7.2364 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
as.factor(cyl)4  26.6636     0.9718   27.44  < 2e-16 ***
as.factor(cyl)6  19.7429     1.2182   16.21 4.49e-16 ***
as.factor(cyl)8  15.1000     0.8614   17.53  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 3.223 on 29 degrees of freedom
Multiple R-squared: 0.9785, Adjusted R-squared: 0.9763 
F-statistic: 440.9 on 3 and 29 DF,  p-value: < 2.2e-16 

ご覧のとおり、これらの推定値は因子水準の平均と同じです。ただし、推定値の標準誤差はデータの標準誤差と同一ではないことに注意してください。

ちなみに、データは次のaggregate関数で簡単に集約できます。

aggregate(mpg ~ cyl, mtcars, function(x) c(M = mean(x), SE = sd(x)/sqrt(length(x))))

  cyl      mpg.M     mpg.SE
1   4 26.6636364  1.3597642
2   6 19.7428571  0.5493967
3   8 15.1000000  0.6842016

ご回答ありがとうございます。係数は平均ではないことはすでに知っています。切片は最初のレベルの平均ですが、他の係数は他のレベルの平均とそのレベルの差です。また、「推定値の標準誤差はデータの標準誤差と同一ではない」というコメントで気づきました。それは、LMは、()手段を推定し、これらの見積りのための標準誤差を計算することを意味しています
SRJ

おっと、わかりやすくするためにそのコメントを編集したかったのですが、5分間しか編集できないことを知りませんでした。コメントを削除できますか?そのヒントのおかげで、切片を省略して直接平均推定値を取得できることを知りませんでした。私があなたを正しく理解している場合、推定平均の標準誤差は、データから直接計算された標準誤差と同じではありません。それはそれぞれの場合で使用される方程式の異なるセットですか?そして、これらの方程式は何ですか?違いをよりよく理解するために、もう少し詳しく知りたい
SRJ

1

Sven Hohensteinの発言に加えて、mtcarsデータのバランスが取れていません。通常aovlm具体的に次のように述べているカテゴリカルデータ(の単なるラッパーです)を持つlmを使用します?aov

aovはバランスの取れた設計のために設計されており、バランスがないと結果を解釈するのが難しい場合があります。応答に欠損値があるとバランスが失われる可能性があることに注意してください。

これは、モデルマトリックスの奇妙な相関関係でも確認できます。

mf <- model.matrix(mpg ~ cyl, data = mtcars)
cor(mf)
            (Intercept)       cyl6       cyl8
(Intercept)           1         NA         NA
cyl6                 NA  1.0000000 -0.4666667
cyl8                 NA -0.4666667  1.0000000
Warning message:
In cor(mf) : the standard deviation is zero

したがって、aov(またはlm)から取得した標準エラーは偽物である可能性があります(標準エラーと比較するとlme、これを確認できますlmer


ここでlmeをどのように適用しますか?
SRJ 2013

モデルマトリックス値の相関関係は奇妙ではありません。定数(切片)は本質的に1に等しいので、その値の間に変化はありません。このため、変数と定数の間の相関係数を計算できません。
Sven Hohenstein 2013

-1
Y = matrix(0,5,6)
Y[1,] = c(1250, 980, 1800, 2040, 1000, 1180)
Y[2,] = c(1700, 3080,1700,2820,5760,3480)
Y[3,] = c(2050,3560,2800,1600,4200,2650)
Y[4,] = c(4690,4370,4800,9070,3770,5250)
Y[5,] = c(7150,3480,5010,4810,8740,7260)

n = ncol(Y)
R = rowMeans(Y)
M = mean(R)

s = mean(apply(Y,1,var))

v = var(R)  -s/n


#z = n/(n+(E(s2)/var(m)))
Q = 6/(6+(s/v))
t = Q*R[1] + (1-Z)*M

これは判読できず、それが何を意味するか、または何をしているのかについての解説はありません。より明確にするために編集できますか?
mdewey

答えを理解することはできません。何をしているのかを説明するための解説が必要です。
Michael R. Chernick
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.