gpt4 book ai didi

r - glm 中的系数与 loglm 中的系数

转载 作者:行者123 更新时间:2023-12-04 02:44:57 25 4
gpt4 key购买 nike

我用对数线性模型拟合了一个 3 维列联表(这里没有提供,但如果它有帮助的话我可以),包括 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 之前,我在互联网上找到的所有内容和我搜索的文档都是这个注释:

The glm coefficient table works just like the summary for ANOVA produced by lm: the level alphabetically first (s2,w0.5) is used as an intercept, and all subsequent levels are tested against the first (thus the remaining coefficients are differences from the mean, not means themselves).

不过,对我来说,这还不足以理解如何以 loglm 的形式从 glm 输出中获取系数。现在,您的问题可能是:“为什么不直接使用 loglm?”Loglm 在我的情况下不起作用(这不是我在这里比较的那个,但它有一个带有一些零的 5 维表。所以如果我在原始表上使用 loglm,它会给我所有系数作为 NaN)。所以我坚持使用 glm,我真的很想获得 loglm 中的系数。

非常感谢!

最佳答案

您似乎有一个双向交叉表,其中包含 10 个水平的因子 w 和 5 个水平的因子 s,并且模型中没有交互作用。使用 glm(),分类变量的默认编码方案是 treatment coding其中因子中的第一组是引用水平,其余每个组的各自参数是其与该引用的差异。 (Intercept) 估计是针对所有组 = 其因子引用水平的单元格。

loglm()中,参数进行偏差编码,即每组都有自己的参数,一个因子的参数和为零。 (Intercept) 是添加到所有组效应的总均值。

在您的示例中,您可以告诉 glm() 使用偏差编码来获得与 loglm() 相同的参数估计值(请参见下面的示例),或者您将处理编码的参数估计值转换如下:

  • w = 0.05 和 s = 2 是引用单元格:glm() 9.5104005 = loglm() 10.18939 + -1.04596513 + 0.36697307
  • w = 0.1 和 s = 2 是 s 的引用水平,但需要与 w = 0.1 到引用 w = 0.05:glm() 9.5104005 + 0.6340290 = loglm() 10.18939 + -0.41193617 + 0.36697307
  • w = 0.1 和 s = 3 但需要从 w = 0.1 到引用 w 的区别= 0.05 以及从 s = 3 到引用 s = 2 的差异:glm() 9.5104005 + 0.6340290 + -0.2153295 = loglm() 10.18939 + -0.41193617 + 0.15164360,等等

使用偏差编码的 glm() 示例(UCBAdmissions 是一个具有内置于基 R 中的绝对频率的交叉表):

> library(MASS)                                # for loglm()
> llmFit <- loglm(~ Admit + Gender + Dept, data=UCBAdmissions)
> coef(llmFit)
$`(Intercept)`
[1] 5.177567

$Admit
Admitted Rejected
-0.2283697 0.2283697

$Gender
Male Female
0.1914342 -0.1914342

$Dept
A B C D E F
0.23047857 -0.23631478 0.21427076 0.06663476 -0.23802565 -0.03704367

> UCBdf <- as.data.frame(UCBAdmissions) # convert to data frame for glm()
> glmFit <- glm(Freq ~ Admit + Gender + Dept, family=poisson(link="log"),
+ contrasts=list(Admit=contr.sum, Gender=contr.sum, Dept=contr.sum),
+ data=UCBdf)
> coef(glmFit)
(Intercept) Admit1 Gender1 Dept1 Dept2 Dept3 Dept4
5.17756677 -0.22836970 0.19143420 0.23047857 -0.23631478 0.21427076 0.06663476
Dept5
-0.23802565

请注意,glm() 并未列出那些通过一个因子的参数的总和为零约束完全确定(别名)的参数估计值。

关于r - glm 中的系数与 loglm 中的系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com