Tôi cố gắng tái tạo với optim
các kết quả từ hồi quy tuyến tính đơn giản được trang bị glm
hoặc thậm chí các nls
hàm R.
Các ước tính tham số là như nhau nhưng ước tính phương sai dư và sai số chuẩn của các tham số khác không giống nhau đặc biệt khi kích thước mẫu thấp. Tôi cho rằng đây là sự khác biệt do cách tính sai số chuẩn còn lại giữa các phương pháp bình phương tối đa và tối thiểu (chia cho n hoặc cho n - k + 1 xem dưới đây trong ví dụ).
Tôi hiểu từ các bài đọc của tôi trên web rằng tối ưu hóa không phải là một nhiệm vụ đơn giản nhưng tôi đã tự hỏi liệu có thể tái tạo một cách đơn giản các ước tính lỗi tiêu chuẩn glm
trong khi sử dụng optim
.
Mô phỏng một tập dữ liệu nhỏ
set.seed(1)
n = 4 # very small sample size !
b0 <- 5
b1 <- 2
sigma <- 5
x <- runif(n, 1, 100)
y = b0 + b1*x + rnorm(n, 0, sigma)
Ước tính với tối ưu
negLL <- function(beta, y, x) {
b0 <- beta[1]
b1 <- beta[2]
sigma <- beta[3]
yhat <- b0 + b1*x
likelihood <- dnorm(y, yhat, sigma)
return(-sum(log(likelihood)))
}
res <- optim(starting.values, negLL, y = y, x = x, hessian=TRUE)
estimates <- res$par # Parameters estimates
se <- sqrt(diag(solve(res$hessian))) # Standard errors of the estimates
cbind(estimates,se)
> cbind(estimates,se)
estimates se
b0 9.016513 5.70999880
b1 1.931119 0.09731153
sigma 4.717216 1.66753138
So sánh với glm và nls
> m <- glm(y ~ x)
> summary(m)$coefficients
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.016113 8.0759837 1.116411 0.380380963
x 1.931130 0.1376334 14.030973 0.005041162
> sqrt(summary(m)$dispersion) # residuals standard error
[1] 6.671833
>
> summary(nls( y ~ b0 + b1*x, start=list(b0 = 5, b1= 2)))
Formula: y ~ b0 + b1 * x
Parameters:
Estimate Std. Error t value Pr(>|t|)
b0 9.0161 8.0760 1.116 0.38038
b1 1.9311 0.1376 14.031 0.00504 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.672 on 2 degrees of freedom
Tôi có thể sao chép các ước tính lỗi tiêu chuẩn còn lại khác nhau như thế này:
> # optim / Maximum Likelihood estimate
> sqrt(sum(resid(m)^2)/n)
[1] 4.717698
>
> # Least squares estimate (glm and nls estimates)
> k <- 3 # number of parameters
> sqrt(sum(resid(m)^2)/(n-k+1))
[1] 6.671833