转化texreg输出中的系数和置信区间

7

我正在拟合几个逻辑回归模型,并尝试使用包texreg创建一个漂亮的表格来展示所有模型。

据我所知,texreg::screenreg只能报告系数(beta)和相应的置信区间,但对于逻辑回归而言,更常见的是报告系数的指数(奥数比)。

我知道我可以使用override.coefoverride.ci.lowoverride.ci.up来达到我想要的效果,但输出的表格并不理想,如果CI覆盖了0,它会给出一个星号,而这在变换后应该是1。

是否有更好更简单的方法来转换系数和置信区间?此外,我是否可以覆盖星号,以表示p值的大小(*** p < 0.001, ** p < 0.01, * p < 0.05)?谢谢!


这是我尝试过的方法:

> set.seed(123)
> x1 <- rnorm(1000)
> x2 <- rnorm(1000)
> y <- runif(1000) < (1 / (1 + exp(-(0.3 + 0.5*x1))))
> mod1 <- glm(y~x1, binomial())
> mod2 <- glm(y~x2, binomial())
> mod3 <- glm(y~x1+x2, binomial())
> 
> tex1 <- extract(mod1)
> tex2 <- extract(mod2)
> tex3 <- extract(mod3)
> 
> screenreg(list(tex1, tex2, tex3), ci.force=T)

==========================================================
                Model 1       Model 2        Model 3      
----------------------------------------------------------
(Intercept)        0.30 *        0.28 *         0.30 *    
                [0.17; 0.43]  [ 0.15; 0.41]  [ 0.17; 0.43]
x1                 0.60 *                       0.60 *    
                [0.45; 0.74]                 [ 0.45; 0.74]
x2                               0.05           0.01      
                              [-0.07; 0.18]  [-0.12; 0.14]
----------------------------------------------------------
AIC             1294.48       1369.92        1296.47      
BIC             1304.30       1379.74        1311.19      
Log Likelihood  -645.24       -682.96        -645.23      
Deviance        1290.48       1365.92        1290.47      
Num. obs.       1000          1000           1000         
==========================================================
* 0 outside the confidence interval

在重写之后,

> tex1@coef <- exp(tex1@coef)
> tex2@coef <- exp(tex2@coef)
> tex3@coef <- exp(tex3@coef)
> 
> ci1 <- confint(mod1)
Waiting for profiling to be done...
> ci2 <- confint(mod2)
Waiting for profiling to be done...
> ci3 <- confint(mod3)
Waiting for profiling to be done...
> 
> tex1@ci.low <- exp(ci1[, 1])
> tex2@ci.low <- exp(ci2[, 1])
> tex3@ci.low <- exp(ci3[, 1])
> tex1@ci.up <- exp(ci1[, 2])
> tex2@ci.up <- exp(ci2[, 2])
> tex3@ci.up <- exp(ci3[, 2])
> 
> screenreg(list(tex1, tex2, tex3))

========================================================
            Model 1       Model 2       Model 3     
--------------------------------------------------------
(Intercept)        1.34 *        1.32 *        1.34 *   
                [1.18; 1.53]  [1.17; 1.50]  [1.18; 1.53]
x1                 1.81 *                      1.81 *   
                [1.58; 2.10]                [1.58; 2.10]
x2                               1.05 *        1.01 *   
                              [0.93; 1.19]  [0.89; 1.15]
--------------------------------------------------------
AIC             1294.48       1369.92       1296.47     
BIC             1304.30       1379.74       1311.19     
Log Likelihood  -645.24       -682.96       -645.23     
Deviance        1290.48       1365.92       1290.47     
Num. obs.       1000          1000          1000        
========================================================
* 0 outside the confidence interval

只需重写函数以实现您想要的功能。这就是开源软件的美妙之处。 - IRTFM
显然,这是我唯一的选择。 - pe-perry
1个回答

4

有一个ci.test参数,可以被设置为“空值”,在这种情况下应该适当地进行参数转换。它应该设置为1.0而不是0。因此,这是成功的:

  screenreg(list(tex1, tex2, tex3), ci.test=1)

#------output--------
========================================================
                Model 1       Model 2       Model 3     
--------------------------------------------------------
(Intercept)        1.34 *        1.32 *        1.34 *   
                [1.18; 1.53]  [1.17; 1.50]  [1.18; 1.53]
x1                 1.81 *                      1.81 *   
                [1.58; 2.10]                [1.58; 2.10]
x2                               1.05          1.01     
                              [0.93; 1.19]  [0.89; 1.15]
--------------------------------------------------------
AIC             1294.48       1369.92       1296.47     
BIC             1304.30       1379.74       1311.19     
Log Likelihood  -645.24       -682.96       -645.23     
Deviance        1290.48       1365.92       1290.47     
Num. obs.       1000          1000          1000        
========================================================
* 1 outside the confidence interval

请注意,6个参数估计值中有2个不再带星号。


谢谢!只是好奇,有没有另一种方法来做同样的事情,而不使用override方法? - pe-perry
1
我阅读了extract.glm的源代码以及包的vignette/JSS文章,但没有看到任何系数转换方法。应该可以编写一个函数,在单个texreg对象上执行所有三个步骤,然后在它们的列表上使用lapply。这将更符合R的方式。我想知道包的作者是否会接受它作为一个功能请求。从JSS文章中我得到的印象是,他希望该包具有最大的通用性。 - IRTFM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接