R'deki lm ve biglm neden aynı veriler için farklı p değerleri veriyor?


12

İşte küçük bir örnek:

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

Şimdi 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

Şimdi, aynı şeyi denemek biglmgelen biglmpaketin:

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

P değerini görmek için printve öğelerine ihtiyacımız olduğunu unutmayın digits. Katsayılar ve standart hatalar aynıdır, ancak p değerleri çok farklıdır. Bu neden böyle?


5
+1 ipucu: Karşılaştırma pt(-3.491, 2)*2için pnorm(-3.491)*2, örneğin.
whuber

@whuber Teşekkürler. Yani aslında t-dağılımı ile normal dağılım meselesidir. Normal dağılımın, biglm'e özgü büyük veri kümeleri için daha anlamlı olduğu fikri mi?
John Paul

1
Bence normal, yüksek değeri olan farklı değildir . İlk yorumdan örnek deneyin, ancak pt (-3.491, 2) * 2'yi pt (-3.491, 2e3) * 2 olarak değiştirin. ν
Andrey Kolyadin

Yanıtlar:


9

Hangi p-değerlerinin doğru olduğunu görmek için (eğer varsa), boş hipotezin doğru olduğu simüle edilmiş veriler için hesaplamayı tekrarlayalım. Mevcut ayarda, hesaplama (x, y) verilerine en az karedir ve sıfır hipotezi eğimin sıfır olmasıdır. Soruda dört x değeri 1,2,3,4 vardır ve tahmini hata 0,7 civarındadır, bu yüzden bunu simülasyona dahil edelim.

İşte, tanıdık olmayanlar bile herkes tarafından anlaşılabilir olarak yazılan kurulum R.

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

Simülasyonu, bağımsız hataları oluşturduğunu ekler y.expected, çağıran lmuygun hale getirilmesi için, ve summaryp-değerleri hesaplamak için. Bu verimsiz olmasına rağmen , kullanılan gerçek kodu test ediyor. Saniyede binlerce yineleme yapabiliriz:

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)

Doğru olarak hesaplanan p değerleri01 , sıfır hipotezi doğru olduğunda ile arasında tekdüze rastgele sayılar gibi davranacaktır . Bu p-değerlerinin bir histogramı bunu görsel olarak kontrol etmemize izin verir - kabaca yatay görünüyor mu - ve kare şeklinde tekdüzelik testi daha resmi bir değerlendirmeye izin verecektir. İşte histogram:

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

şekil

ve bunun yeterince üniform olmadığını düşünebilenler için, burada ki kare testi:

chisq.test(h$counts)

X kare = 13.042, df = 18, p değeri = 0.7891

Bu testteki büyük p değeri, bu sonuçların beklenen tekdüzelik ile tutarlı olduğunu göstermektedir. Başka bir deyişle, lmdoğrudur.

P-değerleri arasındaki farklar nereden geliyor? Bir p değerini hesaplamak için çağrılabilecek olası formülleri kontrol edelim. Her durumda test istatistiği

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

tahmin edilen katsayı ile varsayılmış (ve doğru değer) arasındaki tutarsızlığa eşittir ve katsayı tahmininin standart hatasının bir katı olarak ifade edilir. Soruda bu değerlerβ^β=0

|t|=|3.050.87378|=3.491

kesişme tahmini için ve

|t|=|1.380.31906|=4.321

eğim tahmini için. Genellikle bunlar , serbestlik derecesi parametresi (veri miktarı) eksi (tahmini katsayıların sayısı ) olan Student dağılımı ile karşılaştırılır . Kesişim noktası için hesaplayalım:t42

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

[1] 0.0732

(Bu hesaplama çarpar sol kuyruklu Student , olasılık , bu bir test olması nedeniyle karşı iki-taraflı bir alternatif .) Bu kabul eder çıkış.t2H0:β=0HA:β0lm

Alternatif bir hesaplama, Student dağılımına yaklaşmak için standart Normal dağılımı kullanır . Bakalım ne üretiyor:t

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

[1] 0.000482

Tabii ki: istatistiğinin biglmboş dağılımının standart Normal olduğunu varsayar . Bu ne kadar hata? Kullanarak, önceki simülasyon yeniden çalışan yerine p-değerleri, bu histogram verir:tbiglmlm

şekil 2

Bu p-değerlerinin neredeyse% 18'i standart bir "anlamlılık" eşiği olan küçüktür . Bu çok büyük bir hata.0.05


Bu küçük soruşturmadan edinebileceğimiz bazı dersler:

  1. Küçük veri kümeleri ile asimptotik analizlerden (standart Normal dağılım gibi) elde edilen yaklaşık değerleri kullanmayın.

  2. Yazılımınızı tanıyın.


2
İyi cevap (+1). Ama gerçekten büyük veri olmayan alıyorsunuz ... Bence paketin yazarı , tipik büyük veri durumu lehine küçük durumunu gözardı etti . Bununla birlikte, bu karışıklıklardan kaçınmaya yardımcı olmak için işaret etmeye değer. nn=4n
epsilone
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.