बूटस्ट्रैप रिग्रेशन से गुणांक के पी-मान कैसे प्राप्त करें?


10

रॉबर्ट काबाकोफ के क्विक-आर से

# Bootstrap 95% CI for regression coefficients 
library(boot)
# function to obtain regression weights 
bs <- function(formula, data, indices) {
  d <- data[indices,] # allows boot to select sample 
  fit <- lm(formula, data=d)
  return(coef(fit)) 
} 
# bootstrapping with 1000 replications 
results <- boot(data=mtcars, statistic=bs, 
     R=1000, formula=mpg~wt+disp)

# view results
results
plot(results, index=1) # intercept 
plot(results, index=2) # wt 
plot(results, index=3) # disp 

# get 95% confidence intervals 
boot.ci(results, type="bca", index=1) # intercept 
boot.ci(results, type="bca", index=2) # wt 
boot.ci(results, type="bca", index=3) # disp

बूटस्ट्रैप रिग्रेशन गुणांकों का मैं P-मान कैसे प्राप्त कर सकता हूं ?H0:bj=0


"पी वैल्यू" का मतलब क्या है? क्या अशक्त परिकल्पना के साथ विशिष्ट परीक्षण?
ब्रायन डिग्स

सुधार H0: bj = 0
ECII

3
आप पहले से ही मिलता है p<0.05/p>0.05इस आधार पर कि क्या विश्वास अंतराल शामिल नहीं है / शामिल नहीं है 0. बूटस्ट्रैप से पैरामीटर का वितरण पैरामीट्रिक नहीं है (और इस प्रकार आपको एक संभावना नहीं मिल सकती है कि मान 0 है)।
ब्रायन डिग्स

यदि आप एक वितरण नहीं मान सकते हैं कि आप कैसे जानते हैं कि पी <0.05 अगर सीआई 0 शामिल नहीं है? यह z या t गड़बड़ी के लिए सही है।
ईसीआईएन

मुझे वह मिलता है लेकिन आप केवल यह कह सकते हैं कि पी <0.05, आप एक विशिष्ट मूल्य सही संलग्न नहीं कर सकते हैं?
ईसीआई

जवाबों:


8

बस एक और संस्करण जो कुछ हद तक सरलीकृत है, लेकिन मुझे लगता है bootकि पुस्तकालय का उपयोग किए बिना स्पष्ट रूप से संदेश वितरित करें जो कुछ लोगों को वाक्यविन्यास के उपयोग के साथ भ्रमित कर सकता है।

हमारे पास एक रैखिक मॉडल है: y=एक्सβ+ε, ε~एन(0,σ2)

निम्नलिखित उस रैखिक मॉडल के लिए एक पैरामीट्रिक बूटस्ट्रैप है, जिसका अर्थ है कि हम अपने मूल डेटा को फिर से नहीं बनाते हैं लेकिन वास्तव में हम अपने फिट किए गए मॉडल से नया डेटा उत्पन्न करते हैं। इसके अतिरिक्त, हम मानते हैं कि प्रतिगमन गुणांक का बूटस्ट्रैप्ड वितरणβसममित है और वह अनुवाद अपरिवर्तनीय है। (बहुत मोटे तौर पर बोलना कि हम इसके गुणों को प्रभावित करने के साथ इसकी धुरी को स्थानांतरित कर सकते हैं) इसके पीछे का विचार यह है कि इसमें उतार-चढ़ावβ के कारण हैं εऔर इसलिए पर्याप्त नमूनों के साथ उन्हें सही वितरण का एक अच्छा अनुमान प्रदान करना चाहिएβ'है। जैसा कि पहले हम फिर से परीक्षण करते हैंएच0:0=βजेऔर हमने अपने पी-मानों को "संभाव्यता के रूप में परिभाषित किया है, डेटा की संभाव्यता वितरण के लिए एक अशक्त परिकल्पना दी है, कि परिणाम अवलोकन परिणाम की तरह चरम या अधिक चरम होगा," (जहां इस मामले में देखे गए परिणाम हैं) हैंβहम अपने मूल मॉडल के लिए मिल गए)। तो यहाँ जाता है:

# Sample Size
N           <- 2^12;
# Linear Model to Boostrap          
Model2Boot  <- lm( mpg ~ wt + disp, mtcars)
# Values of the model coefficients
Betas       <- coefficients(Model2Boot)
# Number of coefficents to test against
M           <- length(Betas)
# Matrix of M columns to hold Bootstraping results
BtStrpRes   <- matrix( rep(0,M*N), ncol=M)

for (i in 1:N) {
# Simulate data N times from the model we assume be true
# and save the resulting coefficient in the i-th row of BtStrpRes
BtStrpRes[i,] <-coefficients(lm(unlist(simulate(Model2Boot)) ~wt + disp, mtcars))
}

#Get the p-values for coefficient
P_val1 <-mean( abs(BtStrpRes[,1] - mean(BtStrpRes[,1]) )> abs( Betas[1]))
P_val2 <-mean( abs(BtStrpRes[,2] - mean(BtStrpRes[,2]) )> abs( Betas[2]))
P_val3 <-mean( abs(BtStrpRes[,3] - mean(BtStrpRes[,3]) )> abs( Betas[3]))

#and some parametric bootstrap confidence intervals (2.5%, 97.5%) 
ConfInt1 <- quantile(BtStrpRes[,1], c(.025, 0.975))
ConfInt2 <- quantile(BtStrpRes[,2], c(.025, 0.975))
ConfInt3 <- quantile(BtStrpRes[,3], c(.025, 0.975))

जैसा कि पूरे विचार में बताया गया है कि आपके पास वितरण का बूटस्ट्रैप है βउनके सच एक अनुमान है। (स्पष्ट रूप से यह कोड गति के लिए लेकिन पठनीयता के लिए अनुकूलित है। :))


16

समुदाय और @BrianDiggs मुझे सही कर सकते हैं यदि मैं गलत हूं, लेकिन मेरा मानना ​​है कि आप अपनी समस्या के लिए एक पी-मान प्राप्त कर सकते हैं। एक दो-पक्षीय परीक्षण के लिए एक पी-मान के रूप में परिभाषित किया गया है

2*मिनट[पी(एक्सएक्स|एच0),पी(एक्सएक्स|एच0)]

इसलिए यदि आप आकार के आधार पर बूटस्ट्रैप किए गए गुणांक का आदेश देते हैं और फिर अनुपात को बड़ा और छोटा शून्य निर्धारित करते हैं, तो न्यूनतम अनुपात दो बार आपको एक पी-मूल्य देना चाहिए।

मैं आमतौर पर ऐसी स्थिति में निम्नलिखित फ़ंक्शन का उपयोग करता हूं:

twosidep<-function(data){
  p1<-sum(data>0)/length(data)
  p2<-sum(data<0)/length(data)
  p<-min(p1,p2)*2
  return(p)
}

4

गणना करने के लिए बूटस्ट्रैप का उपयोग किया जा सकता है पी-वास्तव, लेकिन इसे आपके कोड में पर्याप्त बदलाव की आवश्यकता होगी। जैसा कि मैं आरआई से परिचित नहीं हूं केवल आपको एक संदर्भ दे सकता है जिसमें आप देख सकते हैं कि आपको क्या करने की आवश्यकता होगी: अध्याय 4 का (डेविसन और हिंकले 1997)।

डेविसन, एसी और हिंकले, डीवी 1997। बूटस्ट्रैप के तरीके और उनके आवेदन। कैम्ब्रिज: कैम्ब्रिज यूनिवर्सिटी प्रेस।

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