Rのlmとbiglmが同じデータに対して異なるp値を与えるのはなぜですか?


12

ここに小さな例があります:

MyDf<-data.frame(x=c(1,2,3,4), y=c(1.2, .7, -.5, -3))

今とbase::lm

> lm(y~x, data=MyDf) %>% summary

Call:
lm(formula = y ~ x, data = MyDf)

Residuals:
    1     2     3     4 
-0.47  0.41  0.59 -0.53 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   3.0500     0.8738   3.491   0.0732 .
x            -1.3800     0.3191  -4.325   0.0495 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.7134 on 2 degrees of freedom
Multiple R-squared:  0.9034,    Adjusted R-squared:  0.8551 
F-statistic: 18.71 on 1 and 2 DF,  p-value: 0.04952

次に、パッケージbiglmから同じことを試してくださいbiglm

XX<-biglm(y~x, data=MyDf) 
print(summary(XX), digits=5)

Large data regression model: biglm(y ~ x, data = MyDf)
Sample size =  4 
             Coef     (95%      CI)      SE       p
(Intercept)  3.05  1.30243  4.79757 0.87378 0.00048
x           -1.38 -2.01812 -0.74188 0.31906 0.00002

私たちが必要なことに注意してくださいprintdigitsp値を参照してください。係数と標準誤差は同じですが、p値は大きく異なります。これはなぜですか?


5
+1ヒント:たとえば、と比較pt(-3.491, 2)*2pnorm(-3.491)*2ます。
whuber

@whuberありがとう。したがって、本質的にはt分布と正規分布の問題です。biglmの典型である大規模なデータセットに対して、正規分布がより理にかなっているという考えですか?
John Paul

1
考えは、通常の値がtの値が高い場合とそれほど変わらないということだと思います。最初のコメントから例を試してください。ただし、pt(-3.491、2)* 2をpt(-3.491、2e3)* 2に変更してください。ν
Andrey Kolyadin 2017年

回答:


9

どのp値が正しいか(もしあれば)を確認するために、帰無仮説が真であるシミュレーションデータの計算を繰り返しましょう。現在の設定では、計算は(x、y)データへの最小二乗適合であり、帰無仮説は勾配がゼロであるというものです。質問には4つのx値1、2、3、4があり、推定誤差は約0.7なので、シミュレーションに組み込みます。

これは、誰でも理解できるように書かれた設定ですR

beta <- c(intercept=0, slope=0)
sigma <- 0.7
x <- 1:4
y.expected <-  beta["intercept"] + beta["slope"] * x

シミュレーションは独立したエラーを生成し、それらをに追加しy.expected、呼び出しlmて近似を作成しsummary、p値を計算します。これは非効率的ですが、使用された実際のコードをテストしています。 1秒で数千回の繰り返しを実行できます。

n.sim <- 1e3
set.seed(17)
data.simulated <- matrix(rnorm(n.sim*length(y.expected), y.expected, sigma), ncol=n.sim)
slope.p.value <- function(e) coef(summary(lm(y.expected + e ~ x)))["x", "Pr(>|t|)"]
p.values <- apply(data.simulated, 2, slope.p.value)

正しく計算されたp値は101、帰無仮説が真の場合、間の均一な乱数のように機能します。これらのp値のヒストグラムを使用すると、これを視覚的に確認できます(ほぼ水平に見えますか)。均一性のカイ2乗検定により、より正式な評価が可能になります。ヒストグラムは次のとおりです。

h <- hist(p.values, breaks=seq(0, 1, length.out=20))

図

そして、これが十分に均一でないと想像するかもしれない人のために、ここにカイ二乗検定があります:

chisq.test(h$counts)

X二乗= 13.042、df = 18、p値= 0.7891

このテストの大きなp値は、これらの結果が期待される均一性と一致していることを示しています。つまり、lm正しいです。

では、p値の違いはどこから来るのでしょうか。p値を計算するために呼び出される可能性のある式を確認してみましょう。いずれにしても、検定統計量は

|t|=|β^0se(β^)|,

推定された係数と仮定された(および正しい値)間の不一致に等しく、係数推定の標準誤差の倍数として表されます。問題では、これらの値は β=0β^β=0

|t|=|3.050.87378|=3.491

切片の推定と

|t|=|1.380.31906|=4.321

勾配の推定用。通常、これらは、自由度パラメーターが(データの量)(推定係数の数)であるスチューデントの分布と比較されます。切片のためにそれを計算しましょう:4 2t42

pt(-abs(3.05/0.87378), 4-2) * 2

[1] 0.0732

(これは、両側の代替に対するテストであるため、この計算では、スチューデントの左側確率に乗算され。) 出力と一致します。2 H 0β = 0 H Aβ 0t2H0:β=0HA:β0lm

別の計算では、標準正規分布を使用してスチューデントの分布を近似します。それが生成するものを見てみましょう:t

pnorm(-abs(3.05/0.87378)) * 2

[1] 0.000482

案の定:統計のbiglmnull分布が標準正規であると仮定します。これはどれくらいのエラーですか?の代わりにを使用して前述のシミュレーションを再実行すると、このp値のヒストグラムが得られます。tbiglmlm

図2

これらのp値のほぼ18%は未満であり、これは「有意性」の標準的なしきい値です。それは大きなエラーです。0.05


この小さな調査から学ぶことができるいくつかの教訓は次のとおりです。

  1. 小さなデータセットでは、(標準正規分布のような)漸近分析から導出された近似を使用しないでください。

  2. あなたのソフトウェアを知っています。


2
良い答え(+1)。しかし、実際にはビッグデータではないを使用しています...パッケージの作成者は、典型的なビッグデータのケースを支持して、小さなケースを無視したと思います。ただし、これらの混乱を避けるために、指摘する価値があります。nn=4n
イプシロン2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.