问题描述
我已经用 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)
谢谢!
解决方法
我在评论中要求澄清,但这是我猜测您在表格中想要什么的最佳尝试:
- 多个模型并排
- 模型估计
- 括号中的 p 值低于估计值
- hte 表底部的内核类型
- 表格底部的带宽选择
为此,我只修改了您的 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 |
内核 | 三角形 | 三角形 | 三角形 |