使用 rdrobust 的 3 个回归输出模型打印表格

问题描述

我已经用 rdrobust 运行了 3 次回归,并且想打印一些值(不是所有的值都在一个表中,这样每个模型都有一个列,结果可以并排比较。

我尝试过 stargazer 但没有成功,modelsummary 也是如此。

这是我的回归代码的样子:

model <- rdrobust::rdrobust(x,y,c = cutoffvalue,kernel = "tri",#default
                            bwselect = "mserd"

我只想在表中显示回归估计、值、带宽和内核。

这是我尝试过的,但它没有给我想要的值,而且我也只适用于一种模型。我希望将所有 3 个放在同一个表中。

tidy.rdrobust <- function(model,...){
ret <- data.frame(term = row.names(model$coef),estimate = model$coef[,1],std.error = model$se[,p.value = model$pv[,1])
    row.names(ret) <- NULL
ret
}

glance.rdrobust <- function(model,...){
ret <- data.frame(nobs.left = model$N[1],kernel = model$kernel,bwselect = model$bwselect)
ret
}
x <- runif(1000,-1,1)
y <- 5 + 3 * x + 2 * (x >= 0) + rnorm(1000)
fit <- rdrobust(y,x)
modelsummary(fit)

谢谢!

解决方法

我在评论中要求澄清,但这是我猜测您在表格中想要什么的最佳尝试:

  1. 多个模型并排
  2. 模型估计
  3. 括号中的 p 值低于估计值
  4. hte 表底部的内核类型
  5. 表格底部的带宽选择

为此,我只修改了您的 glance.rdrobust 方法,并使用了 statistic 函数的 modelsummary 参数。

rdrobust 对象加载库和 define custom tidy and glance methods to extract information (see documentation)

library(rdrobust)
library(modelsummary)

tidy.rdrobust <- function(model,...) {
  ret <- data.frame(
    term = row.names(model$coef),estimate = model$coef[,1],std.error = model$se[,p.value = model$pv[,1]
  )
  row.names(ret) <- NULL
  ret
}

glance.rdrobust <- function(model,...) {
  ret <- data.frame(
    Kernel = model$kernel,Bandwidth = model$bwselect
  )
  ret
}

模拟数据,估计 3 个模型,并将它们存储在一个列表中:

x1 <- runif(1000,-1,1)
x2 <- runif(1000,1)
x3 <- runif(1000,1)
y1 <- 5 + 3 * x1 + 2 * (x1 >= 0) + rnorm(1000)
y2 <- 5 + 3 * x2 + 2 * (x2 >= 0) + rnorm(1000)
y3 <- 5 + 3 * x3 + 2 * (x3 >= 0) + rnorm(1000)

fit1 <- rdrobust(y1,x1)
fit2 <- rdrobust(y2,x2)
fit3 <- rdrobust(y3,x3)
models <- list(fit1,fit2,fit3)

创建表格:

modelsummary(models,statistic = "p.value")
模型1 模型2 模型3
常规 2.155 2.085 2.050
(0.000) (0.000) (0.000)
偏差修正 2.110 2.110 1.984
(0.000) (0.000) (0.000)
健壮 2.110 2.110 1.984
(0.000) (0.000) (0.000)
带宽 mserd mserd mserd
内核 三角形 三角形 三角形