रैखिक प्रतिगमन में अशक्त परिकल्पना को बदलना


18

मेरे पास कुछ डेटा हैं जो अत्यधिक सहसंबद्ध हैं। यदि मैं एक रेखीय प्रतिगमन को चलाता हूं तो मुझे एक ढलान के साथ एक प्रतिगमन रेखा मिलती है (= 0.93)। अगर यह ढलान 1.0 से काफी अलग है तो मैं क्या करना चाहूंगा। मेरी अपेक्षा यह है कि यह नहीं है। दूसरे शब्दों में, मैं शून्य के ढलान से एक के ढलान में रैखिक प्रतिगमन की अशक्त परिकल्पना को बदलना चाहूंगा। क्या यह एक समझदार दृष्टिकोण है? मैं वास्तव में इसकी सराहना करता हूं कि आप अपने उत्तर में कुछ आर कोड शामिल कर सकते हैं ताकि मैं इस पद्धति को लागू कर सकूं (या आपके द्वारा सुझाया गया बेहतर)। धन्यवाद।

जवाबों:


11
set.seed(20); y = rnorm(20); x = y + rnorm(20, 0, 0.2) # generate correlated data
summary(lm(y ~ x))                  # original model
summary(lm(y ~ x, offset= 1.00*x))  # testing against slope=1
summary(lm(y-x ~ x))                # testing against slope=1

आउटपुट:

            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.01532    0.04728   0.324     0.75    
x            0.91424    0.04128  22.148 1.64e-14 ***

 

            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  0.01532    0.04728   0.324   0.7497  
x           -0.08576    0.04128  -2.078   0.0523 .

 

            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  0.01532    0.04728   0.324   0.7497  
x           -0.08576    0.04128  -2.078   0.0523 .

धन्यवाद! मैं अभी पता नहीं लगा सका कि lm कमांड कैसे बदलें।
निक क्रॉफोर्ड

फिर क्या यह "lm (y ~ x, ऑफसेट = 1.00 * x)" (या उस 1.00 के बिना) की तुलना में बिल्कुल "lm (yx ~ x)" है? कम से कम वर्गों के लिए मान्यताओं के साथ समस्या या संपार्श्विकता के साथ समस्या नहीं होगी? मैं यादृच्छिक प्रभावों के साथ एक लॉजिस्टिक प्रतिगमन के लिए इसका इस्तेमाल करना चाहता हूं (....)। पी-वैल्यू प्राप्त करने के लिए एक सरल लेकिन सही तरीका होना बहुत अच्छा होगा।
स्कैन

यहाँ आँकड़े ।stackexchange.com/ questions/ 111559/ Matifou का कहना है कि यह विधि वाल्ड टेस्ट का उपयोग करने से भी बदतर है।
स्कैन

7

आरβ=आरβआरआर

y=β0+β1एक्स+यू

β1=0, आर=[0,1] तथा आर=1

इन प्रकार की परिकल्पनाओं के लिए आप linearHypothesisपैकेज कार से फ़ंक्शन का उपयोग कर सकते हैं :

set.seed(20); y = rnorm(20); x = y + rnorm(20, 0, 0.2) # generate correlated data
mod <- lm(y ~ x))                  # original model


> linearHypothesis(mod,matrix(c(0,1),nrow=1),rhs=c(1))
Linear hypothesis test

Hypothesis:
x = 1

Model 1: restricted model
Model 2: y ~ x

  Res.Df     RSS Df Sum of Sq      F  Pr(>F)  
1     19 0.96022                              
2     18 0.77450  1   0.18572 4.3162 0.05234 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

क्या यह एक तरफा परीक्षण के लिए इस्तेमाल किया जा सकता है?
jpmath

6

ऐसा लगता है कि आप अभी भी एक अशक्त परिकल्पना को खारिज करने की कोशिश कर रहे हैं। इसके साथ समस्याओं का भार है, जिनमें से कम से कम यह नहीं है कि यह संभव है कि आपके पास देखने के लिए पर्याप्त शक्ति न हो। 1. लेकिन क्या होगा यदि आप वास्तव में नहीं बता सकते हैं? क्या होगा यदि आप वास्तव में एक ढलान का अनुमान लगा रहे हैं जो बेतहाशा भिन्न होता है और वास्तव में actually 0.4 के विश्वास अंतराल जैसे कुछ के साथ 1 से काफी दूर हो सकता है। यहाँ आपकी सर्वश्रेष्ठ रणनीति अशक्त परिकल्पना को नहीं बदल रही है बल्कि वास्तव में एक अंतराल अनुमान के बारे में यथोचित रूप से बोल रही है। यदि आप अपने मॉडल में कमांड कंफ़र्ट () लागू करते हैं तो आप अपने ढलान के चारों ओर 95% विश्वास अंतराल प्राप्त कर सकते हैं। फिर आप इसका उपयोग उस ढलान पर चर्चा करने के लिए कर सकते हैं जो आपको मिला था। यदि 1 विश्वास अंतराल के भीतर है तो आप यह कह सकते हैं कि यह उन मूल्यों की सीमा के भीतर है जिनके बारे में आपको विश्वास है कि इसमें सही मूल्य शामिल है। लेकिन इससे भी महत्वपूर्ण बात यह है कि आप यह भी बता सकते हैं कि मूल्यों की सीमा क्या है।


3

परीक्षण की बात यह है कि आप अपनी अशक्त परिकल्पना को अस्वीकार करना चाहते हैं, न कि उसकी पुष्टि करना। यह तथ्य कि कोई महत्वपूर्ण अंतर नहीं है, किसी भी तरह से महत्वपूर्ण अंतर की अनुपस्थिति का प्रमाण नहीं है। उसके लिए, आपको परिभाषित करना होगा कि नल को अस्वीकार करने के लिए आप किस प्रभाव का आकार उचित समझते हैं।

परीक्षण करना कि क्या आपका ढलान 1 से काफी अलग है, यह उतना मुश्किल नहीं है, आप सिर्फ यह परीक्षण करें कि क्या अंतर है रोंएलपी-1शून्य से काफी भिन्न होता है। हाथ से यह कुछ इस तरह होगा:

set.seed(20); y = rnorm(20); x = y + rnorm(20, 0, 0.2)
model <- lm(y~x)

coefx <- coef(summary(model))[2,1]
seslope <- coef(summary(model))[2,2]
DF <- model$df.residual

# normal test
p <- (1 - pt(coefx/seslope,DF) )*2
# test whether different from 1
p2 <- (1 - pt(abs(coefx-1)/seslope,DF) )*2

अब आपको इस तथ्य के बारे में पता होना चाहिए कि प्रभाव का आकार जिसके लिए एक अंतर महत्वपूर्ण हो जाता है, है

> qt(0.975,DF)*seslope
[1] 0.08672358

बशर्ते कि हमारे पास ढलान पर मानक त्रुटि का एक सभ्य अनुमानक है। इसलिए, यदि आप तय करते हैं कि केवल 0.1 से एक महत्वपूर्ण अंतर का पता लगाया जाना चाहिए, तो आप आवश्यक DF की गणना निम्नानुसार कर सकते हैं:

optimize(
    function(x)abs(qt(0.975,x)*seslope - 0.1),
    interval=c(5,500)
) 
$minimum
[1] 6.2593

आप पर ध्यान दें, यह बहुत ही सीसोपल के अनुमान पर निर्भर है। सेस्कोप पर एक बेहतर अनुमान प्राप्त करने के लिए, आप अपने डेटा का पुन: परीक्षण कर सकते हैं। एक भोला तरीका होगा:

n <- length(y)
seslope2 <-
  mean(
    replicate(n,{
      id <- sample(seq.int(n),1)
      model <- lm(y[-id]~x[-id])
      coef(summary(model))[2,2]
    })
  )

अनुकूलन कार्य में seslope2 डालकर, रिटर्न:

$minimum
[1] 6.954609

यह सब आपको बताएगा कि आपका डेटासेट आपके द्वारा आवश्यक डीम की तुलना में तेजी से एक महत्वपूर्ण परिणाम लौटाएगा, और आपको केवल 7 डिग्री की स्वतंत्रता (इस मामले में 9 टिप्पणियों) की आवश्यकता है यदि आप सुनिश्चित करना चाहते हैं कि गैर-महत्वपूर्ण का मतलब है कि आप क्या चाहते हैं माध्यम।

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