Birlikte yeniden oluşturmaya çalışın optim
takılmış basit doğrusal regresyon sonuçlarının glm
hatta nls
R fonksiyonları.
Parametre tahminleri aynıdır, ancak artık varyans tahmini ve diğer parametrelerin standart hataları, özellikle numune boyutu düşük olduğunda aynı değildir. Bunun, maksimum standart olabilirlik ve en küçük kare yaklaşımları arasında kalan standart hatanın hesaplanma biçimindeki farklılıklardan kaynaklandığını düşünüyorum (n'ye veya n-k + 1'e bölünme, bkz. Örnekteki aşağıdaki).
Web'deki okumalarımdan optimizasyonun basit bir görev olmadığını anlıyorum, ancak standart hatanın glm
kullanırken tahmin ettiği basit bir şekilde çoğalmanın mümkün olup olmadığını merak ediyordum optim
.
Küçük bir veri kümesini simüle et
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)
Optim ile tahmin edin
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 ve nls ile karşılaştırma
> 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
Farklı kalıntı standart hata tahminlerini şöyle çoğaltabilirim:
> # 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