我正在解决 Agresti 的分类数据分析练习 4.10。
他提供了桌子
Aortic | Mitral
<55 4 1
1259 2082
55+ 7 9
1417 1647
Run Code Online (Sandbox Code Playgroud)
行代表年龄组,列代表心脏瓣膜类型,每个单元格中的两个数字是死亡人数(顶部)和总时间长度(底部)。然后他建议模型 $$ \log(\mu_{ij}) = \alpha + 1 \times \log(t_{ij}) + \beta_1 a_i + \beta_2 \nu_j $$ 其中 $t_{ij}$是单元格$(i,j)的总时间长度,$$a_i$是“55+”的指示变量,$\nu_j$是“二尖瓣”的指示变量。
然后练习 4.10 要求找到 $\beta_1.$ 的 95% 轮廓似然置信区间。我明白这在数学上意味着什么,但我在R. 我正在使用R“ProfileLikelihood”库。
这是我的尝试:
heart_table <- data.frame(
y = c(9,7,1,4),
tot_time = c(1647,1417,2082,1259),
age = c(1,1,0,0), #1 means 55+
valve = c(1,0,1,0) #1 means mitral
)
heart_prof <- profilelike.glm(
y ~ valve,
data = heart_table,
family = poisson(),
offset.glm = log(tot_time),
profile.theta = "age",
lo.theta = -.5,
hi.theta = 3.5
)
Run Code Online (Sandbox Code Playgroud)
它产生一个错误
Error: object 'tot_time' not found
Run Code Online (Sandbox Code Playgroud)
如果我引用log(tot_time)我会得到一个不同的错误,即
heart_prof <- profilelike.glm(
y ~ valve,
data = heart_table,
family = poisson(),
offset.glm = "log(tot_time)",
profile.theta = "age",
lo.theta = -.5,
hi.theta = 3.5
)
Run Code Online (Sandbox Code Playgroud)
产生
Error in model.frame.default(formula = y ~ -1 + X + offset(pi * theta.off) + :
invalid type (list) for variable 'offset(glm.off)'
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用公式
y ~ valve + offset.glm(log(tot_time))
Run Code Online (Sandbox Code Playgroud)
有错误
Error in offset.glm(log(tot_time)) : could not find function "offset.glm"
Run Code Online (Sandbox Code Playgroud)
和公式
y ~ valve + offset(log(tot_time))
Run Code Online (Sandbox Code Playgroud)
它不会产生错误(它运行)。然而,这感觉是错误的,因为 profilelike.glm 的文档指出“不应提供偏移量。而是使用 offset.glm”。
ProfileLikelihood 文档:https://cran.r-project.org/web/packages/ProfileLikelihood/ProfileLikelihood.pdf
我没有,也不知道那个包,但你不需要它。您可以在基数 R 中拟合泊松回归模型,并且可以通过调用 来基于分析可能性来获得置信区间confint。考虑:
> heart_table <- data.frame(\n+ y = c(9,7,1,4),\n+ tot_time = c(1647,1417,2082,1259),\n+ age = c(1,1,0,0), #1 means 55+\n+ valve = c(1,0,1,0) #1 means mitral\n+ )\n> m = glm(y~valve+offset(log(tot_time)), data=heart_table, family="poisson")\n> summary(m)\n\nCall:\nglm(formula = y ~ valve + offset(log(tot_time)), family = "poisson", \n data = heart_table)\n\nDeviance Residuals: \n 1 2 3 4 \n 1.9095 0.4718 -2.3931 -0.5383 \n\nCoefficients:\n Estimate Std. Error z value Pr(>|z|) \n(Intercept) -5.4942 0.3015 -18.222 <2e-16 ***\nvalve -0.4271 0.4369 -0.978 0.328 \n---\nSignif. codes: 0 \xe2\x80\x98***\xe2\x80\x99 0.001 \xe2\x80\x98**\xe2\x80\x99 0.01 \xe2\x80\x98*\xe2\x80\x99 0.05 \xe2\x80\x98.\xe2\x80\x99 0.1 \xe2\x80\x98 \xe2\x80\x99 1\n\n(Dispersion parameter for poisson family taken to be 1)\n\n Null deviance: 10.8405 on 3 degrees of freedom\nResidual deviance: 9.8857 on 2 degrees of freedom\nAIC: 27.013\n\nNumber of Fisher Scoring iterations: 5\n\n> confint(m)\nWaiting for profiling to be done...\n 2.5 % 97.5 %\n(Intercept) -6.149598 -4.9562364\nvalve -1.302631 0.4365193\nRun Code Online (Sandbox Code Playgroud)\n