ฉันพยายามที่จะทำซ้ำกับoptim
ผลลัพธ์จากการถดถอยเชิงเส้นอย่างง่ายที่พอดีกับglm
หรือแม้แต่nls
ฟังก์ชั่น R
การประมาณพารามิเตอร์เหมือนกัน แต่การประมาณค่าความแปรปรวนที่เหลือและข้อผิดพลาดมาตรฐานของพารามิเตอร์อื่นจะไม่เหมือนกันโดยเฉพาะเมื่อขนาดตัวอย่างต่ำ ฉันคิดว่านี่เป็นความแตกต่างเนื่องจากวิธีการคำนวณข้อผิดพลาดมาตรฐานที่เหลือระหว่างความน่าจะเป็นสูงสุดและวิธีกำลังสองน้อยที่สุด (หารด้วย n หรือโดย n-k + 1 ดูการร้องในตัวอย่าง)
ผมเข้าใจจากการอ่านของฉันบนเว็บที่เพิ่มประสิทธิภาพไม่ได้เป็นงานที่ง่าย แต่ผมสงสัยว่าถ้ามันจะเป็นไปได้ที่จะทำซ้ำในวิธีที่ง่ายประมาณการจากข้อผิดพลาดมาตรฐานในขณะที่ใช้glm
optim
จำลองชุดข้อมูลขนาดเล็ก
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)
ประเมินด้วยประสิทธิภาพ
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
เปรียบเทียบกับ glm และ 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
ฉันสามารถทำซ้ำประมาณการข้อผิดพลาดมาตรฐานที่เหลือที่แตกต่างกันเช่นนี้
> # 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