R语言GJRM包bvp模型summary输出提取指定统计量转表格方法
GJRM包双变量Probit模型结果提取实操
前置模型拟合
先运行给定的可复现代码,完成bvp模型对象的构建:
require(GJRM) set.seed(123) # 构造模拟数据集 x1 <- sample(1:100, size = 20) bid1 <- sample(c(5, 10, 20, 30), size = 20, replace = TRUE) bid2 <- sample(c(5, 10, 20, 30), size = 20, replace = TRUE) ans1 <- sample(c(1,0), size = 20, replace = TRUE) ans2 <- sample(c(1,0), size = 20, replace = TRUE) df <- as.data.frame(cbind(x1, bid1, bid2, ans1, ans2)) # 指定双方程设定 treat.eq <- ans1 ~ bid1 + x1 out.eq <- ans2 ~ bid2 + x1 f.list <- list(treat.eq, out.eq) mr <- c("probit", "probit") # 拟合双变量probit模型 bvp <- gjrm(f.list, data = df, Model = "B", margins = mr)
结果提取操作
核心思路:GJRM包的summary()方法返回的是结构化S3对象,不需要通过文本解析控制台输出抓数值,直接读取内置的系数矩阵组件即可,完全避免文本错位、排版变动导致的提取错误。
- 将summary结果存为独立对象,而非直接打印输出
# 存储summary结构化结果 bvp_summary <- summary(bvp) - 直接从对象内置的系数矩阵中提取目标三类统计量
对象内的Coef组件是和控制台打印完全一致的系数表,列名固定对应估计值、标准误、z值、p值,直接按列名取数即可:# 提取Estimate、Std. Error、Pr(>|z|)三列 target_coef <- bvp_summary$Coef[, c("Estimate", "Std. Error", "Pr(>|z|)")] - 整理为规范表格格式
把矩阵的行名(对应各个参数的名称,比如两个方程的截距、协变量系数、方程间相关参数)转成单独列,得到可直接用于展示、导出的规整数据框:
整理完成后直接输入# 整理为规范表格 final_result <- data.frame( 参数名称 = rownames(target_coef), target_coef, row.names = NULL, check.names = FALSE )final_result即可查看规整后的结果,也可以用write.csv(final_result, "系数结果表.csv")将结果导出为外部表格文件。
注意事项
- 不要用捕获控制台输出(
capture.output(summary(bvp)))加正则匹配的方式提取数值,一旦模型变量长度、输出排版调整,极易出现数值错位的问题 - 提取的结果会自动包含双变量Probit两个方程的所有系数,以及最后一项两个方程误差项的相关系数(rho)的估计值,和控制台输出的结果完全一致
内容的提问来源于stack exchange,提问作者Claudiano
相关产品推荐
相关产品推荐

