含自回归结构的mvord模型报错求助:seq_len参数类型错误
mvord包AR1结构多变量有序模型报错排查与解决
问题场景
使用mvord包构建带AR1自相关结构的多变量有序回归模型,代码如下:
library(mvord) roedores2 <- mvord(datos(IndicAD) ~ Trat + Tiempo + Trat:Tiempo+(1|Tiempo) + (1|Granja), data = datos, error.structure = cor_ar1(~Tiempo), link = mvprobit(), control = mvord.control(solver = "BFGS"))
变量说明
- IndicAD:有序分类变量,取值为0、1、2、3、4
- Trat:3水平因子变量(处理类型)
- Tiempo:11水平因子变量(重复测量时间点)
- Granja:2水平因子变量(采样地点)
报错信息
运行代码时触发如下错误与警告:
Error in seq_len(rho$ndim) : argument must be coercible to non-negative integer In addition: Warning message: In seq_len(rho$ndim) : first element used of 'length.out' argument
问题原因
- 时间变量类型不兼容:
cor_ar1()要求时间变量为数值型(整数/连续),但当前Tiempo是因子类型,无法被识别为有序的时间序列维度,导致内部计算rho$ndim时生成无效值,触发seq_len()错误。 - 模型结构冲突:同时加入
(1|Tiempo)随机效应和cor_ar1(~Tiempo)自相关结构,两者均针对时间维度建模,造成参数识别冲突,进一步加剧维度计算错误。
解决办法
步骤1:转换时间变量为数值型
将因子类型的Tiempo转换为数值型变量,确保AR1结构能识别时间顺序(假设因子水平已按时间顺序排列):
datos$Tiempo_num <- as.integer(datos$Tiempo)
步骤2:调整模型结构,移除冲突项
删除重复的(1|Tiempo)随机效应,保留AR1自相关结构,修改后的模型代码:
roedores2 <- mvord(datos(IndicAD) ~ Trat + Tiempo_num + Trat:Tiempo_num + (1|Granja), data = datos, error.structure = cor_ar1(~Tiempo_num), link = mvprobit(), control = mvord.control(solver = "BFGS"))
步骤3:验证数据结构(可选)
检查每个Granja分组内的Tiempo_num是否为连续的重复测量序列,无缺失或乱序,避免AR1结构计算时出现维度异常。
内容的提问来源于stack exchange,提问作者Juan Santiago Guidobono
相关产品推荐
相关产品推荐

