如何在R中用modelsummary报告MTS类VARX模型为LaTeX表格?
用modelsummary生成MTS包VARX模型的LaTeX表格
问题原因
你之前错误定义了tidy.mts和glance.mts方法,但MTS包拟合的VARX模型对象类为VARX而非mts,导致modelsummary无法识别对应的信息提取逻辑,需要针对VARX类实现broom风格的tidy和glance方法。
解决方案
1. 实现tidy.VARX函数(提取参数估计结果)
从VARX对象中提取每个方程的系数、标准误、t值和p值,整理为modelsummary兼容的数据框格式。
2. 实现glance.VARX函数(提取模型拟合统计量)
提取R²、AIC、BIC、样本量、残差标准差等常用统计量。
3. 调用modelsummary生成LaTeX表格
完整代码示例
library(tidyverse) library(MTS) library(modelsummary) library(vars) library(stats) # 生成模拟数据 set.seed(10) ts1 <- rnorm(200, mean = 10, sd = 3) %>% ts() ts2 <- ts1 + rnorm(200, mean = 1, sd = 3) %>% ts() exg1 <- rchisq(n = 200,df = 10) + ts1 %>% ts() exg2 <- rf(n = 200,df1 = 20,df2 = 20) + ts2 %>% ts() zt <- cbind(ts1, ts2) xt <- cbind(exg1, exg2) p = 1 m = 0 # 拟合VARX模型 varx <- VARX(zt = zt, p = p, xt = xt, m = m) # 自定义tidy.VARX函数:提取参数信息 tidy.VARX <- function(x, ...) { coef_mat <- x$coef eq_names <- colnames(x$zt) var_names <- rownames(coef_mat) tidied <- coef_mat %>% as.data.frame() %>% rownames_to_column("term") %>% pivot_longer(cols = -term, names_to = "response", values_to = "estimate") %>% mutate( std.error = x$se[term, response], statistic = estimate / std.error, p.value = 2 * pt(abs(statistic), df = x$n - x$k, lower.tail = FALSE) ) return(tidied) } # 自定义glance.VARX函数:提取拟合统计量 glance.VARX <- function(x, ...) { glance_df <- tibble( nobs = x$n, r.squared = mean(x$Rsq), adj.r.squared = mean(x$adjRsq), aic = x$AIC, bic = x$BIC, sigma = sqrt(mean(diag(x$Sigma))) ) return(glance_df) } # 生成LaTeX表格 modelsummary(varx, output = "latex")
关键说明
- VARX对象核心结构:
$coef为系数矩阵,$se为标准误矩阵,$Rsq为各方程的R²,$AIC/$BIC为信息准则,$n为样本量,$k为单方程参数个数。 - 若需按方程单独展示统计量,可修改
glance函数,或在modelsummary中添加group = "response"参数。 - 运行代码后会直接输出可插入LaTeX文档的表格代码。
内容的提问来源于stack exchange,提问作者Victor Hugo Schieck Terziani
相关产品推荐
相关产品推荐

