18

当使用 stargazer 在逻辑回归对象上创建 LaTeX 表时,标准行为是输出每个模型的 logit 值。是否有可能获得 exp(logit) 代替?也就是说,我可以得到赔率比吗?

在 stargazer 文档中,以下提到了“Coef”-argument,但我不明白这是否可以启用 exp(logits)。

Coef:将替换每个模型的默认系数值的数值向量列表。元素名称将用于将系数与单个协变量匹配,因此应匹配协变量名称。NULL 向量表示,对于给定的模型,应该使用默认的一组系数。相比之下,NA 向量意味着模型的所有系数都应该留空。

4

4 回答 4

15

根据 2014 年的共生评论,最新版本的 ''stargazer'' 有选项 ''apply.*'' 用于 ''coef'' ''se'' ''t'' ''p'' 和 '' ci'' 允许直接转换这些统计数据。

apply.coef a function that will be applied to the coefficients.
apply.se a function that will be applied to the standard errors.
apply.t a function that will be applied to the test statistics.
apply.p a function that will be applied to the p-values.
apply.ci a function that will be applied to the lower and upper bounds of the confidence intervals.

这意味着您可以直接使用...

stargazer(model, 
          apply.coef = exp,
          apply.se   = exp)

编辑:但是我注意到,简单地对 CI 求幂并不能达到您的期望。

编辑:您可以使用此处描述的方法获得正确的 CI 。

于 2015-10-13T08:59:49.727 回答
8

stargazer允许你替换很多东西,因变量标签,协变量标签等等。要替换您需要提供变量标签向量的那些,这样做是为了具有可发布的行名称,而不是R默认情况下的变量名称。

因此,为了获得优势比,您需要向 提供优势比向量stargazer。您如何获得该向量?实际上很容易。假设您的模型被称为model,那么您的代码是:

coef.vector <- exp(model$coef)
stargazer(model,coef=list(coef.vector))

如果您的表中有多个模型,则应扩展该列表,例如coef=list(coef.vector1,coef.vector2,...),列表中的所有向量都来自与上述类似的幂运算。

于 2013-06-20T18:58:28.517 回答
5

因此,问题是您要显示(非对数)优势比,但要根据基础线性模型保留测试统计信息。默认情况下,当您使用其中一种“应用”方法时,例如apply.coef = exp,stargazer 将重新计算 t 统计数据和 p 值。我们不希望那样。此外,标准错误是基于日志的,但我们不能只对它们求幂。我首选的方法是:

  1. 对观星者中的系数取幂
  2. 关闭自动 p 和自动 t
  3. 在表格中报告(未转换的)t 统计量而不是标准误差

在代码中,这是:

stargazer(model, apply.coef=exp, t.auto=F, p.auto=F, report = "vct*")
于 2016-03-18T20:49:33.810 回答
3

各个帖子中都有一些正确答案,但似乎没有一个将它们放在一起。假设如下:

glm_out <- glm(Y ~ X, data=DT, family = "binomial")

获得优势比

对于逻辑回归,回归系数 (b1) 是X 每增加一个单位,Y 的对数几率增加的估计值。因此,要获得优势比,我们只需使用 exp 函数:

OR <- exp(coef(glm_out))

# pass in coef directly
stargazer(glm_out, coef = list(OR), t.auto=F, p.auto=F)

# or, use the apply.coef option
stargazer(glm_out, apply.coef = exp, t.auto=F, p.auto=F)

获得优势比的标准误差

您不能简单地使用apply.se = exp来获取标准。优势比的错误

相反,您必须使用以下功能:Std.Error.OR = OR * SE(coef)

# define a helper function to extract SE from glm output
se.coef <- function(glm.output){sqrt(diag(vcov(glm.output)))}

# or, you can use the arm package
se.coef <- arm::se.coef

#Get the odds ratio
OR <- exp(coef(glm_out))

# Then, we can get the `StdErr.OR` by multiplying the two:
Std.Error.OR <-  OR * se.coef(glm_out)

所以,为了让它进入 stargazer,我们使用以下内容:

# using Std Errors
stargazer(glm_out, coef=list(OR), se = list(Std.Error.OR), t.auto=F, p.auto=F)

计算优势比的 CI

优势比设置中的置信区间不是对称的。所以,我们不能只做 ±1.96*SE(OR) 来获得 CI。相反,我们可以从原始对数赔率计算它exp(coef ± 1.96*SE)

# Based on normal distribution to compute Wald CIs:
# we use confint.default to obtain the conventional confidence intervals
# then, use the exp function to get the confidence intervals

CI.OR <- as.matrix(exp(confint.default(glm_out)))

所以,为了让它进入 stargazer,我们使用以下内容:

# using ci.custom
stargazer(glm_out, coef=list(OR), ci.custom = list(CI.OR), t.auto=F, p.auto=F, ci = T)

# using apply.ci
stargazer(glm_out, apply.coef = exp, apply.ci = exp, t.auto=F, p.auto=F, ci = T)

关于使用置信区间进行显着性检验的注意事项:

不要使用优势比的置信区间来计算显着性(参见底部的注释和参考)。相反,您可以使用对数赔率进行操作:

z <- coef(glm_out)/se.coef(glm_out)

并且,使用它来获取显着性检验的 p.values:

pvalue <- 2*pnorm(abs(coef(glm_out)/se.coef(glm_out)), lower.tail = F)

(来源:https ://data.princeton.edu/wws509/r/c3s1 )

有关统计测试的更详细讨论,请参阅此链接:https ://stats.stackexchange.com/questions/144603/why-do-my-p-values-differ-between-logistic-regression-output-chi-squared-test

然而,重要的是要注意,与 p 值不同,95% CI 不报告测量的统计显着性。在实践中,如果 95% CI 不与空值重叠(例如 OR=1),则通常将其用作统计显着性存在的代表。然而,将具有 95% CI 且跨越空值的 OR 解释为表明暴露与结果之间缺乏关联的证据是不恰当的。 来源:解释赔率比

于 2020-09-08T07:41:12.610 回答