सरल आर एलएम मॉडल से लॉग-लाइक को फिर से करें


10

मैं केवल dnorm () लॉग-लाइक फ़ंक्शन द्वारा प्रदान किए जाने वाले लॉग-लाइक फ़ंक्शन को एक lm मॉडल (R) से प्राप्त करने की कोशिश कर रहा हूं।

यह उच्च संख्या में डेटा के लिए काम करता है (लगभग पूरी तरह से) (जैसे n = 1000):

> n <- 1000
> x <- 1:n
> set.seed(1)
> y <- 10 + 2*x + rnorm(n, 0, 2)
> mod <- glm(y ~ x, family = gaussian)
> logLik(mod)
'log Lik.' -2145.562 (df=3)
> sigma <- sqrt(summary(mod)$dispersion)
> sum(log(dnorm(x = y, mean = predict(mod), sd = sigma)))
[1] -2145.563
> sum(log(dnorm(x = resid(mod), mean = 0, sd = sigma)))
[1] -2145.563

लेकिन छोटे डेटासेट के लिए स्पष्ट अंतर हैं:

> n <- 5
> x <- 1:n
> set.seed(1)
> y <- 10 + 2*x + rnorm(n, 0, 2)
> 
> mod <- glm(y ~ x, family = gaussian)
> logLik(mod)
'log Lik.' -8.915768 (df=3)
> sigma <- sqrt(summary(mod)$dispersion)
> sum(log(dnorm(x = y, mean = predict(mod), sd = sigma)))
[1] -9.192832
> sum(log(dnorm(x = resid(mod), mean = 0, sd = sigma)))
[1] -9.192832

छोटे डेटासेट प्रभाव के कारण मुझे लगा कि यह lm और glm के बीच अवशिष्ट विचरण अनुमानों के अंतर के कारण हो सकता है लेकिन lm का उपयोग करने से glm के समान परिणाम मिलता है:

> modlm <- lm(y ~ x)
> logLik(modlm)
'log Lik.' -8.915768 (df=3)
> 
> sigma <- summary(modlm)$sigma
> sum(log(dnorm(x = y, mean = predict(modlm), sd = sigma)))
[1] -9.192832
> sum(log(dnorm(x = resid(modlm), mean = 0, sd = sigma)))
[1] -9.192832

मैं गलत कहाँ हूँ?


2
के साथ lm(), आप का उपयोग कर रहे हैंσ^σ^

धन्यवाद स्टीफन सुधार के लिए, लेकिन यह अभी भी काम करने के लिए प्रतीत नहीं होता है
गाइल्स

स्रोत कोड को देखने का प्रयास करें:stats:::logLik.glm
9

मैंने ऐसा किया था, लेकिन यह फ़ंक्शन लॉग-लाइक को वापस खोजने के लिए glm ऑब्जेक्ट से सिर्फ aic स्लॉट को रिवर्स करता है। और मैं glm फंक्शन में aic के बारे में कुछ नहीं देखता ...
Gilles

मुझे संदेह है कि LogLik और AIC (जो कूल्हे पर एक साथ बंधे हुए हैं) के साथ ऐसा करने के लिए कुछ है, यह मानते हुए कि तीन मापदंडों का अनुमान लगाया जा रहा है (ढलान, अवरोधन, और फैलाव / अवशिष्ट मानक त्रुटि) जबकि फैलाव / अवशिष्ट मानक त्रुटि की गणना की जाती है। दो मापदंडों का अनुमान है (ढलान और अवरोधन)।
टॉम

जवाबों:


12

logLik()βj σ Xβσ σ=ϵ^i2n σ2σ^=ϵ^i2n2σ2

>  n <- 5
>  x <- 1:n
>  set.seed(1)
>  y <- 10 + 2*x + rnorm(n, 0, 2)
>  modlm <- lm(y ~ x)
>  sigma <- summary(modlm)$sigma
> 
>  # value of the likelihood with the "classical" sigma hat
>  sum(log(dnorm(x = y, mean = predict(modlm), sd = sigma)))
[1] -9.192832
> 
>  # value of the likelihood with the ML sigma hat
>  sigma.ML <- sigma*sqrt((n-dim(model.matrix(modlm))[2])/n) 
>  sum(log(dnorm(x = y, mean = predict(modlm), sd = sigma.ML)))
[1] -8.915768
>  logLik(modlm)
'log Lik.' -8.915768 (df=3)

वैसे आपको इसी तरह lme / lmer मॉडल के लिए REML / ML विकल्प से सावधान रहना होगा।
स्टीफन लॉरेंट

(+1) क्या यह n-1 है या यह वास्तव में n है ? σ^
पैट्रिक कूलोम्बे

@PatrickCoulombe नंबर: इंटरसेप्ट + ढलान
स्टीफन लॉरेंट

ठीक है, अब पूरी तरह से स्पष्ट है। आपका बहुत बहुत धन्यवाद ! लेकिन आपका क्या मतलब है REML / ML (मेरे द्वारा GuR पर अंतिम पोस्ट के साथ कुछ करने के लिए मुझे लगता है)? कृपया समझाएं (शायद)। मै सिखना चाहता हूॅ !
गाइल्स

मिश्रित मॉडल में विचरण घटकों के REML अनुमान "पूर्वाग्रह के लिए सही" एमएल अनुमानों की तरह हैं। मैंने आपका पोस्ट अभी तक GUR पर नहीं देखा है :)
स्टीफन लॉरेंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.