[英]Appending statistics to coeftest output to include in stargazer tables
我有一個 glm 模型,我使用lmtest
包中的coeftest
來估計穩健的標准誤差。 當我使用 stargazer 生成回歸表時,我得到了正確的結果,但沒有觀察數量和其他相關統計數據,如零偏差和模型偏差。
下面是一個例子:
library(lmtest)
library(stargazer)
m1 <- glm(am ~ mpg + cyl + disp, mtcars, family = binomial)
# Simple binomial regression
# For whatever reason, let's say I want to use coeftest to estimate something
m <- coeftest(m1)
stargazer(m, type = "text", single.row = T) # This is fine, but I want to also include the number of observations
# the null deviance and the model deviance.
我對觀察次數、零偏差和殘差偏差特別感興趣。
我認為如果我用新的系數矩陣替換舊的系數矩陣,我會得到正確的估計值和正確的統計數據,觀星者會識別模型並正確打印它。 為此,我嘗試用m1
模型中的coeftest
模型替換系數、SE、z 統計量和 p 值,但其中一些統計數據是使用summary.glm
計算的,不包含在m1
輸出中。 我可以輕松地在summary
輸出中替換這些系數,但 stargazer 無法識別摘要類型類。 我嘗試使用特定統計信息向m
對象添加屬性,但它們沒有顯示在輸出中,並且觀星者無法識別它。
注意:我知道 stargazer 可以計算強大的 SE,但我也在做其他計算,所以這個例子需要包括coeftest
輸出。
任何幫助表示贊賞。
將原始模型傳遞到 stargazer 可能是最簡單的,然后使用coeftest
傳遞標准誤差 ( se =
)、置信區間 ( ci.custom =
) 和/或 p 值 ( p =
) 的自定義值。 有關如何輕松處理包含多個模型的列表,請參見下文。
suppressPackageStartupMessages(library(lmtest))
suppressPackageStartupMessages(library(stargazer))
mdls <- list(
m1 = glm(am ~ mpg, mtcars, family = poisson),
m2 = glm(am ~ mpg + cyl + disp, mtcars, family = poisson)
)
# Calculate robust confidence intervals
se_robust <- function(x)
coeftest(x, vcov. = sandwich::sandwich)[, 2]
# Original SE
stargazer(mdls, type = "text", single.row = T, report = "vcsp")
#>
#> ===============================================
#> Dependent variable:
#> -----------------------------
#> am
#> (1) (2)
#> -----------------------------------------------
#> mpg 0.106 (0.042) 0.028 (0.083)
#> p = 0.012 p = 0.742
#> cyl 0.435 (0.496)
#> p = 0.381
#> disp -0.014 (0.009)
#> p = 0.151
#> Constant -3.247 (1.064) -1.488 (3.411)
#> p = 0.003 p = 0.663
#> -----------------------------------------------
#> Observations 32 32
#> Log Likelihood -21.647 -20.299
#> Akaike Inf. Crit. 47.293 48.598
#> ===============================================
#> Note: *p<0.1; **p<0.05; ***p<0.01
# With robust SE
stargazer(
mdls, type = "text", single.row = TRUE, report = "vcsp",
se = lapply(mdls, se_robust))
#>
#> ===============================================
#> Dependent variable:
#> -----------------------------
#> am
#> (1) (2)
#> -----------------------------------------------
#> mpg 0.106 (0.025) 0.028 (0.047)
#> p = 0.00002 p = 0.560
#> cyl 0.435 (0.292)
#> p = 0.137
#> disp -0.014 (0.007)
#> p = 0.042
#> Constant -3.247 (0.737) -1.488 (2.162)
#> p = 0.00002 p = 0.492
#> -----------------------------------------------
#> Observations 32 32
#> Log Likelihood -21.647 -20.299
#> Akaike Inf. Crit. 47.293 48.598
#> ===============================================
#> Note: *p<0.1; **p<0.05; ***p<0.01
由reprex 包(v0.3.0) 於 2020 年 11 月 9 日創建
如果我猜對了,您可以嘗試以下操作:
首先,將您的觀星者分析分配給這樣的對象
stargazer.values <- stargazer(m, type = "text", single.row = T)
然后用body(stargazer)
檢查 stargazer 命令的代碼。 希望您可以找到觀星者使用但未報告的值的對象。 然后你可以像這樣處理它們(例如,如果有一個名為“null.deviance”的對象
stargazers.values$null.deviance
或者,如果它是另一個數據框的一部分,比如 df,它可能會像這樣
stargazers.values$df$null.deviance
也許這樣的代碼可能會有所幫助
print(null.deviance <- stargazers.values$null.deviance)
希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.