如何使用R语言Amelia包对多重插补数据拟合最优时间序列模型
问题解决方法
错误原因
- 你之前的写法核心问题是
lapply的第二个参数需要传入可被迭代调用的函数,但你传入的都是直接执行的表达式、或者语法错误的语句,自然无法运行。
正确代码实现
1. 迭代拟合模型并提取系数
extractcoefs <- lapply(imp$imputations, function(current_imp) { # 提取当前插补数据集的pm25序列 pm25_vec <- current_imp$pm25 # 拟合AR(1)模型 ar_model <- arima(pm25_vec, order = c(1, 0, 0)) # 返回模型系数 return(coef(ar_model)) })
2. 合并多重插补的系数结果
得到的extractcoefs是长度为50的列表,每个元素对应一个插补集的模型系数,你可以用以下代码合并得到最终的聚合系数:
# 将系数列表转为数据框,每行对应一个插补集的结果 coef_result <- do.call(rbind, extractcoefs) # 计算多重插补合并后的均值系数(符合多重插补结果合并的常规逻辑) final_pooled_coef <- colMeans(coef_result) # 如需计算系数的标准差/置信区间,也可以直接对coef_result的每列做统计计算
原有错误写法拆解
extractcoefs <- lapply(imp$imputations, coef(model1)):直接计算了第一个插补集的coef(model1)值,传入lapply的是数值向量而非函数,无法迭代extractcoefs <- lapply(imp$imputations, coef(arima(order=c(1,0,0)))):arima未传入时间序列输入,直接执行就会报错,返回结果也不是可调用函数extractcoefs <- lapply(imp$imputations, arima(order=c(1,0,0)$coef)):语法优先级错误,$优先级高于函数调用,会先尝试提取c(1,0,0)的coef元素,该元素不存在直接报错
内容的提问来源于stack exchange,提问作者Shanting
相关产品推荐
相关产品推荐

