从 glm 系数中提取参考水平

Bra*_*don 5 regression r logistic-regression

我知道参考水平不包括在内,但我想要一种能够获取拟合glm对象并找出参考水平的方法(即不使用原始数据集的知识)。它是否存储在glm安装对象的任何位置?

\n\n

示例数据如下:

\n\n
> btest <- data.frame(var1 = sample(c(1,2,3), 100, replace = T),\n+                     var2 = sample(c(\'a\',\'b\',\'c\'), 100, replace = T),\n+                     var3 = sample(c(\'e\',\'f\',\'g\'), 100, replace = T),\n+                     var4 = rnorm(100, mean = 3, 2),\n+                     var5 = sample(c(\'yes\',\'no\'), 100, replace = T))\n> summary(glm(var5 ~ var1 + var2 + var3 + var4, data = btest, family = \'binomial\'))\n\nCall:\nglm(formula = var5 ~ var1 + var2 + var3 + var4, family = "binomial", \n    data = btest)\n\nDeviance Residuals: \n    Min       1Q   Median       3Q      Max  \n-1.6988  -1.0457  -0.6213   1.1224   1.8904  \n\nCoefficients:\n            Estimate Std. Error z value Pr(>|z|)  \n(Intercept) -0.81827    0.73173  -1.118   0.2635  \nvar1         0.55923    0.27279   2.050   0.0404 *\nvar2b       -0.60998    0.53435  -1.142   0.2536  \nvar2c       -0.60250    0.51706  -1.165   0.2439  \nvar3f       -0.81899    0.53345  -1.535   0.1247  \nvar3g        0.21215    0.51907   0.409   0.6828  \nvar4         0.04429    0.12650   0.350   0.7263  \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 binomial family taken to be 1)\n\n    Null deviance: 137.99  on 99  degrees of freedom\nResidual deviance: 128.35  on 93  degrees of freedom\nAIC: 142.35\n\nNumber of Fisher Scoring iterations: 4\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里我想知道 和var1没有参考,但是和var4的参考电平分别是和。因为我最终输出的将是一个表格,其中包含这些参考级别的这些变量。var2var3\'a\'\'e\'NAEstimate

\n\n
\n\n

编辑:对于后来的人来说,我也想知道结合下面的答案时,利用拟合对象terms的元素可以在多大程度上有所帮助......glm

\n\n
> btest2 <- glm(var5 ~ var1 + var3 + var2 + var4, data = btest, family = \'binomial\')\n> btest2$terms\nvar5 ~ var1 + var3 + var2 + var4\nattr(,"variables")\nlist(var5, var1, var3, var2, var4)\nattr(,"factors")\n     var1 var3 var2 var4\nvar5    0    0    0    0\nvar1    1    0    0    0\nvar3    0    1    0    0\nvar2    0    0    1    0\nvar4    0    0    0    1\nattr(,"term.labels")\n[1] "var1" "var3" "var2" "var4"\nattr(,"order")\n[1] 1 1 1 1\nattr(,"intercept")\n[1] 1\nattr(,"response")\n[1] 1\nattr(,".Environment")\n<environment: R_GlobalEnv>\nattr(,"predvars")\nlist(var5, var1, var3, var2, var4)\nattr(,"dataClasses")\n     var5      var1      var3      var2      var4 \n "factor" "numeric"  "factor"  "factor" "numeric" \n> attr(btest2$terms, \'dataClasses\')\n     var5      var1      var3      var2      var4 \n "factor" "numeric"  "factor"  "factor" "numeric" \n
Run Code Online (Sandbox Code Playgroud)\n

use*_*015 3

如果将如下所示的拟合保存到变量中,my_fit则可以执行以下操作my_fit$xlevels。对于所有分类变量,您将看到它们的所有级别。

然后您可以将其与模型关联起来。例如,var1 不在 xlevel 中,因此它是连续的。Var2 有 3 个级别(a、b、c),并且您对 b 和 c 进行了估计。这意味着 a 是参考。Var3 具有类别 e、f、g,并且您对 f 和 g 有估计,因此 e 必须是参考。

my_fit <- glm(var5 ~ var1 + var2 + var3 + var4, data = btest, family = 'binomial')


my_fit$xlevels
$var2
[1] "a" "b" "c"

$var3
[1] "e" "f" "g"


> summary(my_fit)

Call:
glm(formula = var5 ~ var1 + var2 + var3 + var4, family = "binomial", 
    data = btest)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0344  -1.1100   0.5975   0.9605   1.9985  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)   
(Intercept)   0.7321     0.8111   0.903  0.36673   
var1         -0.5061     0.2846  -1.778  0.07533 . 
var2b        -0.1929     0.5904  -0.327  0.74385   
var2c        -0.1968     0.5442  -0.362  0.71764   
var3f        -1.1015     0.5816  -1.894  0.05824 . 
var3g        -0.2004     0.5629  -0.356  0.72187   
var4          0.3945     0.1290   3.058  0.00223 **
---
Run Code Online (Sandbox Code Playgroud)