अवशिष्ट और त्रुटि के बीच अवशिष्ट मानक त्रुटि अंतर


16

मैं के साथ पुन: पेश करने की कोशिश 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

जवाबों:


9

मुद्दा यह है कि मानक त्रुटियों से आता है

σ^2(एक्सएक्स)-1

σ^2summary.lm

summary.lm
#R function (object, correlation = FALSE, symbolic.cor = FALSE, 
#R     ...) 
#R {
#R    z <- object
#R    p <- z$rank
#R    rdf <- z$df.residual
#R    ...
#R    Qr <- qr.lm(object) 
#R    ... 
#R    r <- z$residuals
#R    f <- z$fitted.values
#R    w <- z$weights
#R    if (is.null(w)) {
#R         mss <- if (attr(z$terms, "intercept")) 
#R             sum((f - mean(f))^2)
#R         else sum(f^2)
#R         rss <- sum(r^2)
#R    }
#R    ...
#R    resvar <- rss/rdf
#R    ...
#R    R <- chol2inv(Qr$qr[p1, p1, drop = FALSE])
#R    se <- sqrt(diag(R) * resvar)
#R    ...

(β0,β1)σ^2(β0,β1,σ)σn/(n-3+1)

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
  return(-sum(dnorm(y, yhat, sigma, log = TRUE)))
}

res <- optim(c(0, 0, 1), negLL, y = y, x = x, hessian=TRUE)
estimates <- res$par     # Parameters estimates
(se <- sqrt(diag(solve(res$hessian))))
#R [1] 5.690 0.097 1.653
k <- 3
se * sqrt(n / (n-k+1))
#R [1] 8.047 0.137 2.338

Usεr11852 अनुरोधों के रूप में अधिक विस्तृत करने के लिए , लॉग- लाइबिलिटी है

एल(β,σ)=-n2लॉग(2π)-nलॉगσ-12σ2(y-एक्सβ)(y-एक्सβ)

एक्सn

-ββएल(β,σ)=1σ2एक्सएक्स

σ

m <- lm(y ~ x)
X <- cbind(1, x)
sqrt(sum(resid(m)^2)/n       * diag(solve(crossprod(X))))
#R                     x 
#R 5.71058285 0.09732149
k <- 3
sqrt(sum(resid(m)^2)/(n-k+1) * diag(solve(crossprod(X))))
#R                   x 
#R 8.0759837 0.1376334 

के रूप में हम एक QR अपघटन के साथ भी ऐसा कर सकते हैं lmकरता है

obj <- qr(X)
sqrt(sum(resid(m)^2)/(n-k+1) * diag(chol2inv(obj$qr)))
#R [1] 8.0759837 0.1376334

तो जवाब देना है

मैं वेब पर अपने रीडिंग से समझता हूं कि अनुकूलन एक सरल कार्य नहीं है, लेकिन मैं सोच रहा था कि क्या glmउपयोग करते समय मानक त्रुटि अनुमानों को सरल तरीके से पुन: पेश करना संभव होगा optim

तब आपको आपके द्वारा उपयोग किए जाने वाले गाऊसी उदाहरण में मानक त्रुटियों को मापना होगा।


1
+1। मैं 100% नहीं हूं कि आप इसे पूरी तरह से सही कर लें लेकिन यह निश्चित रूप से सही दिशा में है। क्या आप बता सकते हैं कि आप उस कारक की उम्मीद क्यों करते हैं?
us --r11852 का कहना है कि

क्या यह अब अधिक स्पष्ट है?
बेंजामिन क्रिस्टोफ़रसेन

1
हाँ। अच्छा उत्तर! (मैं इसे पहले ही याद कर चुका हूं)
us upr11852

1

optimnn-+1nn-+1sqrt(4.717216^2*4/2) = 6.671151


1
आपके जवाब के लिए धन्यवाद। मुझे एहसास है कि मेरा सवाल पर्याप्त स्पष्ट नहीं था (मैंने अब इसे संपादित किया है)। मैं न केवल अवशिष्ट मानक त्रुटि संगणना बल्कि मापदंडों को भी त्रुटियों को पुन: प्रस्तुत करना चाहता हूं ...
गिल्स

@ मुझे पता नहीं है कि मानक त्रुटियों को कैसे पुन: पेश करना है। अंतर इस कारण से हैं: 1. glm फ़िशर सूचना मैट्रिक्स का उपयोग करता है, जबकि हेसियन को आशा करता है, और 2. glm इसे 2 पैरामीटर समस्या (b0 और b1 खोजें) मानता है, जबकि एक 3 पैरामीटर समस्या (b0, b1 और sigma2) का अनुकूलन करता है । मुझे यकीन नहीं है कि अगर इन अंतरों को पाटा जा सकता है।
पैपजियो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.