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

ध्यान दें कि हमें आवश्यकता है printऔर digitsपी-मान देखने के लिए। गुणांक और मानक त्रुटियां समान हैं, लेकिन पी-मान बहुत भिन्न हैं। ऐसा क्यों है?


5
+1 संकेत: उदाहरण के pt(-3.491, 2)*2लिए pnorm(-3.491)*2, तुलना करें ।
whuber

@ शुभंकर धन्यवाद। तो अनिवार्य रूप से यह एक टी-वितरण बनाम सामान्य वितरण मुद्दा है। क्या यह विचार है कि सामान्य वितरण बड़े डेटा सेटों के लिए अधिक समझ में आता है जो कि biglm के विशिष्ट हैं?
जॉन पॉल

1
ν

जवाबों:


9

यह देखने के लिए कि कौन से पी-मान सही हैं (यदि या तो), तो आइए सिम्युलेटेड डेटा के लिए गणना दोहराएं जिसमें नल की परिकल्पना सत्य है। वर्तमान सेटिंग में, गणना एक (x, y) डेटा के लिए एक न्यूनतम वर्ग फिट है और शून्य परिकल्पना है कि ढलान शून्य है। प्रश्न में चार 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पी-मूल्यों की गणना करता है। हालांकि यह अक्षम है, यह वास्तविक कोड का परीक्षण कर रहा है जिसका उपयोग किया गया था। हम अभी भी एक सेकंड में हजारों पुनरावृत्तियों कर सकते हैं:

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)

01

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

आकृति

और, जो कल्पना कर सकते हैं कि यह पर्याप्त रूप से एक समान नहीं है, यहाँ ची-चुकता परीक्षण है:

chisq.test(h$counts)

एक्स-चुकता = 13.042, डीएफ = 18, पी-मूल्य = 0.7891

इस परीक्षण में बड़े पी-मूल्य से पता चलता है कि ये परिणाम अपेक्षित एकरूपता के अनुरूप हैं। दूसरे शब्दों में, lmसही है।

फिर, पी-वैल्यू में अंतर कहां से आता है? आइए एक पी-मान की गणना करने के लिए संभावित सूत्रों की जांच करें। किसी भी स्थिति में परीक्षण आँकड़ा होगा

|टी|=|β^-0से(β^)|,

β^β=0

|टी|=|3.05.८७,३७८|=3.491

अवरोधन अनुमान के लिए और

|टी|=|-1.38.३१,९०६|=4.321

टी42

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

[1] 0.0732

टी2एच0:β=0एच:β0lm

टी

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

[1] 0.000482

biglmटीbiglmlm

चित्र 2

0.05


इस छोटी सी जाँच से हम कुछ सबक सीख सकते हैं:

  1. छोटे डेटासेट के साथ स्पर्शोन्मुख विश्लेषण (मानक सामान्य वितरण की तरह) से प्राप्त सन्निकटन का उपयोग न करें।

  2. अपने सॉफ्टवेयर को जानें।


2
n=4n
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.