具有偏移量的泊松 GLM 的伪 R²
Pseudo R² for a Poisson GLM with offset
我的问题可能是技术性的:我正在尝试通过使用人口 (p) 作为抵消来控制暴露来模拟疾病计数 (d)。在 R 中,我发现了两种可能的方法:
m1 -> glm(d ~ 1 + offset(log(n)), family=poisson, data=dat)
m2 -> glm(d ~ 1, family=poisson, data=dat, offset=log(n))
m1 和 m2 的摘要显示 summary(m1)
= summary(m2)
但如果我尝试通过 pR2
(pscl 包)计算 McFadden:McFadden(m1)
≠ McFadden(m2)
。
有人对此有解释吗?
这里是pscl:::pR2.glm
的源代码:
function (object, ...)
{
llh <- logLik(object)
objectNull <- update(object, ~1)
llhNull <- logLik(objectNull)
n <- dim(object$model)[1]
pR2Work(llh, llhNull, n)
}
<environment: namespace:pscl>
如果在公式中指定了偏移量,它会在第二行丢失(update
计算仅截距模型)。
看这个例子:
library("foreign")
ceb <- read.dta("http://data.princeton.edu/wws509/datasets/ceb.dta")
ceb$y <- round(ceb$mean*ceb$n, 0)
ceb$os <- log(ceb$n)
m0 <- glm(y ~ res + offset(os), data=ceb, family=poisson)
m1 <- glm(y ~ res, offset=os, data=ceb, family=poisson)
all.equal(coef(m0), coef(m1))
# [1] TRUE
### compute null models
coef(update(m0, ~1)) # wrong, offset not considered
# (Intercept)
# 5.02
coef(update(m1, ~1))
# (Intercept)
# 1.376
coef(update(m0, ~1, offset=os))
# (Intercept)
# 1.376
我的问题可能是技术性的:我正在尝试通过使用人口 (p) 作为抵消来控制暴露来模拟疾病计数 (d)。在 R 中,我发现了两种可能的方法:
m1 -> glm(d ~ 1 + offset(log(n)), family=poisson, data=dat)
m2 -> glm(d ~ 1, family=poisson, data=dat, offset=log(n))
m1 和 m2 的摘要显示 summary(m1)
= summary(m2)
但如果我尝试通过 pR2
(pscl 包)计算 McFadden:McFadden(m1)
≠ McFadden(m2)
。
有人对此有解释吗?
这里是pscl:::pR2.glm
的源代码:
function (object, ...)
{
llh <- logLik(object)
objectNull <- update(object, ~1)
llhNull <- logLik(objectNull)
n <- dim(object$model)[1]
pR2Work(llh, llhNull, n)
}
<environment: namespace:pscl>
如果在公式中指定了偏移量,它会在第二行丢失(update
计算仅截距模型)。
看这个例子:
library("foreign")
ceb <- read.dta("http://data.princeton.edu/wws509/datasets/ceb.dta")
ceb$y <- round(ceb$mean*ceb$n, 0)
ceb$os <- log(ceb$n)
m0 <- glm(y ~ res + offset(os), data=ceb, family=poisson)
m1 <- glm(y ~ res, offset=os, data=ceb, family=poisson)
all.equal(coef(m0), coef(m1))
# [1] TRUE
### compute null models
coef(update(m0, ~1)) # wrong, offset not considered
# (Intercept)
# 5.02
coef(update(m1, ~1))
# (Intercept)
# 1.376
coef(update(m0, ~1, offset=os))
# (Intercept)
# 1.376