ข้อผิดพลาดมาตรฐานของสัมประสิทธิ์คำนวณได้อย่างไรในการถดถอย


114

เพื่อความเข้าใจของฉันเองฉันสนใจที่จะจำลองการคำนวณข้อผิดพลาดมาตรฐานของสัมประสิทธิ์โดยประมาณด้วยตนเองเช่นมาพร้อมกับlm()ฟังก์ชั่นเอาท์พุทRแต่ไม่สามารถตรึงมันได้ มีการใช้สูตร / การนำไปปฏิบัติอย่างไร


8
เป็นคำถามที่ดีหลายคนรู้ว่าการถดถอยจากมุมมองพีชคณิตเชิงเส้นซึ่งคุณแก้สมการเชิงเส้นและรับคำตอบสำหรับเบต้า ไม่ชัดเจนว่าทำไมเรามีข้อผิดพลาดมาตรฐานและข้อสมมติฐานอยู่ XXβ=Xy
Haitao Du

คำตอบ:


122

โมเดลเชิงเส้นเขียนเป็น ที่หมายถึงเวกเตอร์ของการตอบสนองเป็นเวกเตอร์ของพารามิเตอร์ผลคงที่เป็นเมทริกซ์การออกแบบที่สอดคล้องกันซึ่งคอลัมน์เป็นค่าของตัวแปรอธิบายและเป็นเวกเตอร์ของข้อผิดพลาดแบบสุ่ม y β X ϵ

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

เป็นที่ทราบกันดีว่าประมาณการของมอบให้โดย (อ้างถึงเช่นบทความวิกิพีเดีย ) ดังนั้น [เตือน:สำหรับเวกเตอร์สุ่มและเมทริกซ์ที่ไม่ใช่แบบสุ่ม ]บีตา = ( X ' X ) - 1 X ' Y Var ( β ) = ( X ' X ) - 1 X 'β

β^=(XX)1Xy.
Var ( A X ) = A × Var ( X ) × A X A
Var(β^)=(XX)1Xσ2IX(XX)1=σ2(XX)1,
Var(AX)=A×Var(X)×AXA

ดังนั้น ที่สามารถรับได้โดย Mean Square Error (MSE) ในตาราง ANOVA σ 2

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

ตัวอย่างที่มีการถดถอยเชิงเส้นอย่างง่ายใน R

#------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

ขอบคุณสำหรับคำตอบอย่างละเอียด ดังนั้นฉันคิดว่าสูตรสุดท้ายไม่ได้อยู่ในกรณีหลายตัวแปร?
ako

1
ไม่ได้สูตรสุดท้ายใช้ได้กับเมทริกซ์ X เฉพาะของโมเดลเชิงเส้นอย่างง่ายเท่านั้น ในกรณีหลายตัวแปรคุณต้องใช้สูตรทั่วไปที่ระบุด้านบน
ocram

4
+1 คำถามที่รวดเร็วมาได้อย่างไร Var(β^)
อะโวคาโด

6
@loganecolss: มันมาจากความจริงที่ว่าสำหรับบางเวกเตอร์สุ่มและบางส่วนที่ไม่สุ่มเมทริกซ์ Var(AX)=AVar(X)AXA
ocram

4
โปรดทราบว่าสิ่งเหล่านี้เป็นคำตอบที่ถูกต้องสำหรับการคำนวณด้วยมือ แต่การใช้งานจริงที่ใช้ภายในlm.fit/ summary.lmนั้นแตกต่างกันเล็กน้อยเพื่อความเสถียรและประสิทธิภาพ ...
Ben Bolker

26

สูตรสำหรับสิ่งเหล่านี้สามารถพบได้ในข้อความกลางในสถิติโดยเฉพาะอย่างยิ่งคุณสามารถค้นหาได้ในSheather (2009, บทที่ 5)จากที่ออกกำลังกายต่อไปนี้ยัง (หน้า 138)

รหัส R ต่อไปนี้คำนวณการประมาณค่าสัมประสิทธิ์และข้อผิดพลาดมาตรฐานด้วยตนเอง

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()ฟังก์ชั่น นี่จะค่อนข้างนานกว่านี้หากไม่มีพีชคณิตเมทริกซ์ มีวิธีสั้น ๆ ในการแสดงบรรทัดเฉพาะกับตัวดำเนินการพื้นฐานหรือไม่
ako

1
@AkselO มีนิพจน์แบบปิดที่รู้จักกันดีสำหรับตัวประมาณ OLS คือซึ่งคุณสามารถคำนวณได้โดยคำนวณการผกผันของเมทริกซ์ ( (ตามที่ @ ocram ได้ทำ) แต่สิ่งนี้ทำให้เกิดความยุ่งยากกับเมทริกซ์ที่ไม่มีเงื่อนไข β^=(XX)1XY(XX)
tchakravarty

0

ส่วนหนึ่งของคำตอบของ Ocram ผิด จริง:

β^=(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.(ในการรับสมการนี้ให้ตั้งอนุพันธ์อันดับหนึ่งของบนเท่ากับศูนย์สำหรับการขยายสูงสุด )β^=(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 สำหรับเบต้าเวกเตอร์พบได้ในหนังสือเรียนการถดถอยที่เหมาะสม คุณสามารถแสดงหลักฐานว่ามันควรเป็นแทน β =(X'X)-1X'Y-(X'X)-1X'εβ^=(XX)1XYβ^=(XX)1Xy(XX)1Xϵ
gung

4
ของคุณไม่ได้เป็นตัวประมาณเนื่องจากไม่สามารถสังเกตได้! εβ^ϵ
whuber

สามารถดูได้ในวิดีโอนี้: youtube.com/watch?v=jyBtfhQsf44
StatsStudent
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.