我用loglm和glm两个模型分别对一个三维列联表进行了拟合,这里没有提供该表格,如果需要的话我可以提供。我得到的系数结果如下:
> coefficients(nodnox_loglm_model)
$`(Intercept)`
[1] 10.18939
$w
0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45
-1.04596513 -0.41193617 -0.08840858 0.06407334 -0.06862606 0.02999039 0.17084795 0.45838071 0.35307375
0.5
0.53856982
$s
2 3 4 5
0.36697307 0.15164360 -0.48264571 -0.03597096
并且
> coefficients(nodnox_glm_model)
(Intercept) s3 s4 s5 w0.1 w0.15 w0.2 w0.25 w0.3
9.5104005 -0.2153295 -0.8496188 -0.4029440 0.6340290 0.9575566 1.1100385 0.9773391 1.0759555
w0.35 w0.4 w0.45 w0.5
1.2168131 1.5043458 1.3990389 1.5845350
我知道这两种方法有不同的数值程序 - 我不关心那个 - 我想知道的是如何将glm系数与loglm系数联系起来?
我在互联网上和来到stackoverflow之前搜索的所有文档中都只找到了这个注释:
glm系数表的工作方式就像lm生成的ANOVA摘要一样:按字母顺序第一个级别(s2,w0.5)用作截距,并且所有后续级别都针对第一个进行测试(因此其余系数是与平均值的差异,而不是平均值本身)。
然而,对我来说,这还不足以理解如何从glm输出中以loglm形式获得系数。现在,您的问题可能是:“为什么不直接使用loglm?” 在我的情况下,loglm行不通(虽然这不是我在这里比较的情况,但它具有一张带有一些零的5维表。因此,如果我在原始表上使用loglm,则会将所有系数作为NaN给出)。因此,我被困在glm上,我真的想以loglm的形式获得系数。
非常感谢!
ce <- coef(glmFit)[-1]; cen <- gsub("(.+)[[:digit:]]+$", "\\1", names(ce)); tapply(ce, cen, function(x) { c(x, -sum(x)) })
这类似于上面的
coef(llmFit)
,但可以推广到置信区间。 - caracal