Làm thế nào là các lỗi tiêu chuẩn của hệ số được tính toán trong hồi quy?


114

Theo hiểu biết của riêng tôi, tôi quan tâm đến việc sao chép thủ công các phép tính sai số chuẩn của các hệ số ước tính, ví dụ, đi kèm với đầu ra của lm()hàm trong R, nhưng không thể xác định được. Công thức / thực hiện được sử dụng là gì?


8
Câu hỏi hay, nhiều người biết hồi quy theo quan điểm đại số tuyến tính, trong đó bạn giải phương trình tuyến tính và nhận câu trả lời cho beta. Không rõ tại sao chúng ta có lỗi tiêu chuẩn và giả định đằng sau nó. XXβ=Xy
Haitao Du

Câu trả lời:


122

Mô hình tuyến tính được viết là Trong đó biểu thị vectơ phản hồi, là vectơ của các tham số hiệu ứng cố định, là ma trận thiết kế tương ứng có các cột là giá trị của các biến giải thích và là vectơ của các lỗi ngẫu nhiên. y β X ε

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

Người ta biết rằng ước tính của được đưa ra bởi (tham khảo, ví dụ: bài viết trên wikipedia ) Do đó [nhắc nhở: , đối với một số vectơ ngẫu nhiên và một số ma trận không ngẫu nhiên ]beta = ( X ' X ) - 1 X ' y . Var ( β ) = ( X ' X ) - 1 X 'β

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

sao cho trong đó có thể nhận được bằng Lỗi bình phương trung bình (MSE) trong bảng ANOVA.

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

Ví dụ với hồi quy tuyến tính đơn giản trong 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 
#----------------------

Khi có một biến giải thích duy nhất, mô hình sẽ giảm xuống và sao cho và các công thức trở nên trong suốt hơn. Ví dụ: lỗi tiêu chuẩn của độ dốc ước tính là

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

Cảm ơn câu trả lời thấu đáo. Vì vậy, tôi lấy nó theo công thức cuối cùng không giữ trong trường hợp đa biến?
ako

1
Không, công thức cuối cùng chỉ hoạt động cho ma trận X cụ thể của mô hình tuyến tính đơn giản. Trong trường hợp đa biến, bạn phải sử dụng công thức chung được đưa ra ở trên.
ocram

4
+1, một câu hỏi nhanh, làm thế nào đến? Var(β^)

6
@loganecolss: Nó xuất phát từ thực tế là , đối với một số véc tơ ngẫu nhiên và một số ma trận không ngẫu nhiên . X AVar(AX)=AVar(X)AXA
ocram

4
lưu ý rằng đây là những câu trả lời đúng cho tính toán tay, nhưng việc triển khai thực tế được sử dụng trong lm.fit/ summary.lmhơi khác một chút, vì tính ổn định và hiệu quả ...
Ben Bolker

26

Các công thức cho những điều này có thể được tìm thấy trong bất kỳ văn bản trung gian nào về thống kê, đặc biệt, bạn có thể tìm thấy chúng trong Sheather (2009, Chương 5) , từ đó cũng thực hiện bài tập sau (trang 138).

Mã R sau đây tính toán các ước tính hệ số và các lỗi tiêu chuẩn của chúng theo cách thủ công

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

tạo ra đầu ra

                         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

So sánh với đầu ra từ lm():

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

tạo ra đầu ra:

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 

Thủ thuật đẹp với solve()chức năng. Điều này sẽ khá lâu hơn một chút nếu không có đại số ma trận. Có cách nào ngắn gọn để thực hiện dòng cụ thể đó chỉ với các toán tử cơ bản không?
ako

1
@AkselO Có biểu thức dạng đóng nổi tiếng cho công cụ ước tính OLS, , mà bạn có thể tính toán bằng cách tính toán rõ ràng nghịch đảo của ma trận ( (như @ ocram đã thực hiện), nhưng điều này trở nên khó khăn với ma trận điều hòa. β^=(XX)1XY(XX)
tchakravarty

0

Một phần câu trả lời của Ocram là sai. Thực ra:

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

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

Và nhận xét của câu trả lời đầu tiên cho thấy cần giải thích thêm về phương sai của hệ số:

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


Biên tập

Cảm ơn, tôi bỏ qua chiếc mũ trên bản beta đó. Khấu trừ ở trên là . Kết quả đúng là:wronglywrong

1.(Để có phương trình này, hãy đặt đạo hàm bậc nhất của trên bằng 0, để tối đa hóa )β^=(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

Hy vọng nó sẽ giúp.


1
Đạo hàm của công cụ ước tính OLS cho vectơ beta, , được tìm thấy trong bất kỳ sách giáo khoa hồi quy tốt nào. Trước điều đó, bạn có thể cung cấp bằng chứng rằng nó phải là thay vào đó? β =(X'X)-1X'y-(X'X)-1X'εβ^=(XX)1XYβ^=(XX)1Xy(XX)1Xϵ
gung

4
của bạn thậm chí không phải là công cụ ước tính, vì không thể quan sát được! εβ^ϵ
whuber

Điều này cũng có thể được xem trong video này: youtube.com/watch?v=jyBtfhQsf44
StatsStudent
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.