使用MTS包构建带固定系数的VARMA模型报错求助
MTS包VARMA函数fixed参数设置报错问题
问题描述
我尝试在R语言的MTS包中使用VARMA函数的fixed参数,但运行失败,出现“a parameter is 0”和“round(par, 4): non-numeric argument to mathematical function”错误。
VARMA代码:
fixed <- matrix(TRUE, nrow = 5, ncol = 2) fixed[1, 1] = TRUE fixed[1, 2] = TRUE fixed[2, 1] = TRUE fixed[2, 2] = TRUE fixed[3, 1] = TRUE fixed[3, 2] = TRUE fixed[5, 1] = TRUE fixed[5, 2] = TRUE model4 <- MTS::VARMA(data, p = 1,q=1,fixed=fixed)
之前使用VAR函数时设置fixed参数正常,示例代码:
fixed <- matrix(FALSE, nrow = 25, ncol = 2) fixed[1, 2] = TRUE fixed[2, 1] = TRUE fixed[2, 2] = TRUE fixed[1, 1] = TRUE fixed[3, 1] = TRUE fixed[3, 2] = TRUE fixed[25, 1] = TRUE fixed[24, 1] = TRUE fixed[24, 2] = TRUE fixed[25, 2] = TRUE model3 <- MTS::VAR(data, p = 12, fixed = fixed)
问题原因与解决方法
VAR与VARMA的fixed参数结构不兼容
VAR函数的fixed是单个矩阵,维度为(k*p +1) × k(k为变量数,p为AR滞后阶数,+1对应截距项);但VARMA的fixed参数要求是一个列表,需分别指定AR系数、MA系数和截距项的约束,这是核心错误原因。VARMA的fixed参数正确格式
需构建包含三个元素的列表:AR:AR系数约束矩阵,维度k × k*p,TRUE表示该系数需要估计,FALSE表示固定为0MA:MA系数约束矩阵,维度k × k*q,规则同AR矩阵intercept:长度为k的逻辑向量,TRUE表示对应变量的截距需要估计,FALSE表示固定为0
针对你的代码修正示例
假设你的data是2变量时间序列(k=2),p=1,q=1:# 构建AR部分约束矩阵(2行 × 2*1=2列) ar_fixed <- matrix(TRUE, nrow=2, ncol=2) # 可根据需求修改为FALSE固定对应系数为0,示例保留所有AR系数可估计 ar_fixed[1,1] <- TRUE ar_fixed[1,2] <- TRUE ar_fixed[2,1] <- TRUE ar_fixed[2,2] <- TRUE # 构建MA部分约束矩阵(2行 × 2*1=2列) ma_fixed <- matrix(TRUE, nrow=2, ncol=2) # 示例保留所有MA系数可估计 ma_fixed[1,1] <- TRUE ma_fixed[1,2] <- TRUE ma_fixed[2,1] <- TRUE ma_fixed[2,2] <- TRUE # 截距项约束:两个变量都估计截距 intercept_fixed <- c(TRUE, TRUE) # 组合为fixed列表 fixed_list <- list(AR = ar_fixed, MA = ma_fixed, intercept = intercept_fixed) # 运行VARMA模型 model4 <- MTS::VARMA(data, p=1, q=1, fixed=fixed_list)错误解释
你直接将VAR的矩阵格式传入VARMA的fixed参数,VARMA无法解析该结构,导致内部处理时出现非数值参数错误;同时错误的约束结构引发了“a parameter is 0”的提示。
内容的提问来源于stack exchange,提问作者Andres Arriaga
相关产品推荐
相关产品推荐

