मैं के साथ पुन: पेश करने की कोशिश optim
एक सरल रेखीय प्रतीपगमन के साथ लगे से परिणाम glm
या यहाँ तक कि nls
आर कार्य करता है।
पैरामीटर अनुमान समान हैं, लेकिन अवशिष्ट विचरण अनुमान और अन्य मापदंडों के मानक त्रुटियां विशेष रूप से समान नहीं हैं जब नमूना आकार कम होता है। मुझे लगता है कि यह उस तरह से भिन्नता है जिस तरह से अवशिष्ट मानक त्रुटि की गणना अधिकतम संभावना और कम से कम वर्ग दृष्टिकोण (एन द्वारा या 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
चमक और 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