एक प्रतिगमन में गुणांक के मानक त्रुटियों की गणना कैसे की जाती है?


114

मेरी स्वयं की समझ के लिए, मैं मैन्युअल रूप से अनुमानित गुणांक की मानक त्रुटियों की गणना की नकल करने में दिलचस्पी रखता हूं, उदाहरण के लिए, lm()फ़ंक्शन के आउटपुट के साथ आते हैं R, लेकिन इसे पिन करने में सक्षम नहीं है। फार्मूला / कार्यान्वयन क्या है?


8
अच्छा सवाल, बहुत से लोगों को देखने के रेखीय बीजगणित बिंदु है, जहां आप रेखीय समीकरण को हल से प्रतिगमन पता XXβ=Xy और बीटा के लिए इस सवाल का जवाब मिलता है। स्पष्ट नहीं है कि हमारे पास मानक त्रुटि और इसके पीछे की धारणा क्यों है।
हायताओ डू

जवाबों:


122

रेखीय मॉडल के रूप में लिखा है जहां y प्रतिक्रियाओं का वेक्टर को दर्शाता है, β तय प्रभाव मापदंडों के वेक्टर है, एक्स इसी डिजाइन मैट्रिक्स जिसका कॉलम व्याख्यात्मक चरों के मान रहे हैं, और ε यादृच्छिक त्रुटियों की वेक्टर है।

|y=Xβ+ϵϵN(0,σ2I),
yβXϵ

यह सर्वविदित है कि के एक अनुमान (देखें, जैसे, द्वारा दिया जाता है विकिपीडिया लेख ) β = ( एक्स ' एक्स ) - 1 एक्स ' y इसलिए वार ( β ) = ( एक्स ' एक्स ) - 1 एक्स 'β

β^=(XX)1Xy.
[अनुस्मारक: वार ( एक एक्स ) = एक × वार ( एक्स ) × एक ' , कुछ यादृच्छिक वेक्टर के लिए एक्स और कुछ गैर यादृच्छिक मैट्रिक्स एक ]
Var(β^)=(XX)1Xσ2IX(XX)1=σ2(XX)1,
Var(AX)=A×Var(X)×AXA

ताकि जहां σ 2 एनोवा तालिका में मीन स्क्वायर त्रुटि (एमएसई) के द्वारा प्राप्त किया जा सकता है।

Var^(β^)=σ^2(XX)1,
σ^2

आर में एक सरल रैखिक प्रतिगमन के साथ उदाहरण

#------generate one data set with epsilon ~ N(0, 0.25)------
seed <- 1152 #seed
n <- 100     #nb of observations
a <- 5       #intercept
b <- 2.7     #slope

set.seed(seed)
epsilon <- rnorm(n, mean=0, sd=sqrt(0.25))
x <- sample(x=c(0, 1), size=n, replace=TRUE)
y <- a + b * x + epsilon
#-----------------------------------------------------------

#------using lm------
mod <- lm(y ~ x)
#--------------------

#------using the explicit formulas------
X <- cbind(1, x)
betaHat <- solve(t(X) %*% X) %*% t(X) %*% y
var_betaHat <- anova(mod)[[3]][2] * solve(t(X) %*% X)
#---------------------------------------

#------comparison------
#estimate
> mod$coef
(Intercept)           x 
   5.020261    2.755577 

> c(betaHat[1], betaHat[2])
[1] 5.020261 2.755577

#standard error
> summary(mod)$coefficients[, 2]
(Intercept)           x 
 0.06596021  0.09725302 

> sqrt(diag(var_betaHat))
                    x 
0.06596021 0.09725302 
#----------------------

जब वहाँ एक भी व्याख्यात्मक चर रहा है, मॉडल के लिए कम कर देता है

yi=a+bxi+ϵi,i=1,,n
X=(1x11x21xn),β=(ab)
(XX)1=1nxi2(xi)2(xi2xixin)
Var^(b^)=[σ^2(XX)1]22=nσ^2nxi2(xi)2.
> num <- n * anova(mod)[[3]][2]
> denom <- n * sum(x^2) - sum(x)^2
> sqrt(num / denom)
[1] 0.09725302

पूरी तरह से उत्तर के लिए धन्यवाद। तो, मैं इसे अंतिम सूत्र बहुभिन्नरूपी मामले में नहीं रखता हूं?
एको डे

1
नहीं, बहुत अंतिम सूत्र केवल सरल रैखिक मॉडल के विशिष्ट एक्स मैट्रिक्स के लिए काम करता है। बहुभिन्नरूपी मामले में, आपको ऊपर दिए गए सामान्य सूत्र का उपयोग करना होगा।
ओकराम

4
Var(β^)

6
Var(AX)=AVar(X)AXA

4
ध्यान दें कि ये हाथ की गणना के लिए सही उत्तर हैं, लेकिन स्थिरता और दक्षता के लिए lm.fit/ के भीतर इस्तेमाल किया गया वास्तविक कार्यान्वयन summary.lmथोड़ा अलग है ...
बेन बोल्कर

26

इन के लिए सूत्र आँकड़ों पर किसी भी मध्यवर्ती पाठ में पाए जा सकते हैं, विशेष रूप से, आप उन्हें शिथर (2009, अध्याय 5) में पा सकते हैं , जहाँ से निम्नलिखित अभ्यास भी लिया जाता है (पृष्ठ 138)।

निम्नलिखित आर कोड गुणांक अनुमान और उनके मानक त्रुटियों को मैन्युअल रूप से गणना करता है

dfData <- as.data.frame(
  read.csv("http://www.stat.tamu.edu/~sheather/book/docs/datasets/MichelinNY.csv",
                   header=T))

# using direct calculations
vY <- as.matrix(dfData[, -2])[, 5]                        # dependent variable
mX <- cbind(constant = 1, as.matrix(dfData[, -2])[, -5])  # design matrix

vBeta <- solve(t(mX)%*%mX, t(mX)%*%vY)                    # coefficient estimates
dSigmaSq <- sum((vY - mX%*%vBeta)^2)/(nrow(mX)-ncol(mX))  # estimate of sigma-squared
mVarCovar <- dSigmaSq*chol2inv(chol(t(mX)%*%mX))          # variance covariance matrix
vStdErr <- sqrt(diag(mVarCovar))                          # coeff. est. standard errors
print(cbind(vBeta, vStdErr))                              # output

जो उत्पादन का उत्पादन करता है

                         vStdErr
constant   -57.6003854 9.2336793
InMichelin   1.9931416 2.6357441
Food         0.2006282 0.6682711
Decor        2.2048571 0.3929987
Service      3.0597698 0.5705031

आउटपुट से इसकी तुलना करें lm():

# using lm()
names(dfData)
summary(lm(Price ~ InMichelin + Food + Decor + Service, data = dfData))

जो उत्पादन का उत्पादन करता है:

Call:
lm(formula = Price ~ InMichelin + Food + Decor + Service, data = dfData)

Residuals:
    Min      1Q  Median      3Q     Max 
-20.898  -5.835  -0.755   3.457 105.785 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -57.6004     9.2337  -6.238 3.84e-09 ***
InMichelin    1.9931     2.6357   0.756    0.451    
Food          0.2006     0.6683   0.300    0.764    
Decor         2.2049     0.3930   5.610 8.76e-08 ***
Service       3.0598     0.5705   5.363 2.84e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 13.55 on 159 degrees of freedom
Multiple R-squared: 0.6344, Adjusted R-squared: 0.6252 
F-statistic: 68.98 on 4 and 159 DF,  p-value: < 2.2e-16 

solve()फंक्शन के साथ अच्छी ट्रिक । यह मैट्रिक्स बीजगणित के बिना काफी लंबा होगा। क्या केवल विशिष्ट ऑपरेटरों के साथ उस विशिष्ट लाइन को निष्पादित करने का एक अच्छा तरीका है?
एको 12

1
@ अक्सेलो ओएलएस अनुमानक के लिए प्रसिद्ध क्लोज्ड फॉर्म एक्सप्रेशन है, , जिसे आप स्पष्ट रूप से मैट्रिक्स (जैसा कि @ ocram ने किया है) के व्युत्क्रम की गणना करके कर सकते हैं , लेकिन यह बीमार-अवस्था वाले मेट्रिसेस के लिए मुश्किल हो जाता है। β^=(XX)1XY(XX)
19

0

ओकराम के जवाब का एक हिस्सा गलत है। वास्तव में:

β^=(XX)1Xy(XX)1Xϵ.

E(β^)=(XX)1Xy.

और पहले उत्तर की टिप्पणी से पता चलता है कि गुणांक के विचरण की अधिक व्याख्या की आवश्यकता है:

Var(β^)=E(β^E(β^))2=Var((XX)1Xϵ)=(XX)1Xσ2IX(XX)1=σ2(XX)1


संपादित करें

धन्यवाद, I ने उस बीटा पर टोपी को नजरअंदाज कर दिया। ऊपर की कटौती । सही परिणाम है:wronglywrong

1. "(इस समीकरण पाने के लिए, के पहले के आदेश व्युत्पन्न सेट पर शून्य के बराबर, maxmizing के लिए )β^=(XX)1Xy.SSRβSSR

2.E(β^|X)=E((XX)1X(Xβ+ϵ)|X)=β+((XX)1X)E(ϵ|X)=β.

3. "Var(β^)=E(β^E(β^|X))2=Var((XX)1Xϵ)=(XX)1Xσ2IX(XX)1=σ2(XX)1

उम्मीद है कि यह मदद करता है।


1
बीटा वेक्टर के लिए OLS आकलनकर्ता की व्युत्पत्ति, , किसी भी सभ्य प्रतिगमन पाठ्यपुस्तक में पाई जाती है। इसके प्रकाश में, क्या आप एक प्रमाण दे सकते हैं कि यह इसके बजाय? β^=(XX)1XYβ^=(XX)1Xy(XX)1Xϵ
गंग

4
आपका भी एक अनुमानक नहीं है, क्योंकि अवलोकनीय नहीं है! β^ϵ
whuber

इसे इस वीडियो में भी देखा जा सकता है: youtube.com/watch?v=jyBtfhQsf44
StatsStudent
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.