मैं केवल 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
मैं गलत कहाँ हूँ?
धन्यवाद स्टीफन सुधार के लिए, लेकिन यह अभी भी काम करने के लिए प्रतीत नहीं होता है
—
गाइल्स
स्रोत कोड को देखने का प्रयास करें:
—
9
stats:::logLik.glm
मैंने ऐसा किया था, लेकिन यह फ़ंक्शन लॉग-लाइक को वापस खोजने के लिए glm ऑब्जेक्ट से सिर्फ aic स्लॉट को रिवर्स करता है। और मैं glm फंक्शन में aic के बारे में कुछ नहीं देखता ...
—
Gilles
मुझे संदेह है कि LogLik और AIC (जो कूल्हे पर एक साथ बंधे हुए हैं) के साथ ऐसा करने के लिए कुछ है, यह मानते हुए कि तीन मापदंडों का अनुमान लगाया जा रहा है (ढलान, अवरोधन, और फैलाव / अवशिष्ट मानक त्रुटि) जबकि फैलाव / अवशिष्ट मानक त्रुटि की गणना की जाती है। दो मापदंडों का अनुमान है (ढलान और अवरोधन)।
—
टॉम
lm()
, आप का उपयोग कर रहे हैं