অপ্টিম এবং গ্ল্যামের মধ্যে অবশিষ্ট মানক ত্রুটি পার্থক্য


16

আমি optimএকটি সাধারণ লিনিয়ার রিগ্রেশন glmবা এমনকি nlsফাংশন লাগানো থেকে ফলাফলগুলি পুনরুত্পাদন করার চেষ্টা করি ।
প্যারামিটারের অনুমানগুলি একই তবে অবশিষ্ট পরামিতিগুলির স্ট্যান্ডার্ড ত্রুটিগুলি বিশেষত যখন নমুনার আকার কম থাকে তখন একই হয় না। আমি অনুমান করি যে সর্বোচ্চ সম্ভাবনা এবং ন্যূনতম বর্গাকার পদ্ধতির (n দ্বারা বা এন-কে + 1 দ্বারা বিভাজনে উদাহরণটিতে নমুনা দেখুন) মধ্যে যেভাবে রেসিডুয়াল স্ট্যান্ডার্ড ত্রুটি গণনা করা হয় তাতে পার্থক্য রয়েছে is
আমি ওয়েবে আমার পড়া থেকে বুঝতে পারি যে অপ্টিমাইজেশন কোনও সহজ কাজ নয় তবে আমি ভাবছিলাম যে 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

গ্ল্যাম এবং এনএলএসের সাথে তুলনা করুন

> 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(XX)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    ...

এই বিপরীত হয় ফিশার তথ্য পরিলক্ষিত জন্য শর্তাধীন উপর । এখন ইনভার্স ফিশার তথ্য আপনি গনা ত্রয়ী জন্য পালন । অর্থাৎ আপনি you এমএলই ব্যবহার করেন এবং নিরপেক্ষ অনুমানকটি নয়। সুতরাং, আমি সংগ্রহ করি স্ট্যান্ডার্ড ত্রুটিগুলি ফ্যাক্টর বা অনুরূপ কিছু দ্বারা পৃথক হওয়া উচিত । এই ঘটনা(β0,β1)σ^2(β0,β1,σ)σn/(n3+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 অনুরোধ হিসাবে আরও বিস্তারিত জানাতে লগ-সম্ভাবনা

l(β,σ)=n2log(2π)nlogσ12σ2(yXβ)(yXβ)

Xn

ββl(β,σ)=1σ2XX

σ

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 

যেমন আমরা একটি কিউ পচানি একইভাবে কাজ করতে পারেন 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
হ্যাঁ. ভাল উত্তর! (আমি এটি ইতিমধ্যে
upvated

1

optimnnk+1nnk+1sqrt(4.717216^2*4/2) = 6.671151


1
আপনার উত্তর দেওয়ার জন্য ধন্যবাদ. আমি বুঝতে পারি যে আমার প্রশ্নটি যথেষ্ট পরিষ্কার ছিল না (আমি এখন এটি সম্পাদনা করেছি)। আমি কেবল অবশিষ্ট অবশিষ্ট স্ট্যান্ডার্ড ত্রুটি গণনা পুনরুত্পাদন করতে চাই না তবে পরামিতিগুলির স্ট্যান্ডার্ড ত্রুটিগুলিও ...
গিলস

@ গিলস আমি জানি না কীভাবে স্ট্যান্ডার্ড ত্রুটিগুলি পুনরুত্পাদন করতে হয়। পার্থক্যগুলি হ'ল: ১. গ্ল্যাম ফিশার ইনফরমেশন ম্যাট্রিক্স ব্যবহার করে, তবে হেসিয়ানকে অনুকূল এবং ২. গ্লাম এটিকে একটি 2 প্যারামিটার সমস্যা হিসাবে বিবেচনা করে (বি0 এবং বি 1 খুঁজে বের করুন), তবে একটি 3 পরামিতি সমস্যা (বি0, বি 1 এবং সিগমা 2) । আমি নিশ্চিত নই যে এই পার্থক্যগুলি মিটিয়ে দেওয়া যায় কিনা।
পেপজিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.