使用cosinor.lm()模型调用predict()时出现‘未定义列选择’错误
解决cosinor.lm模型predict时的"undefined columns selected"错误
问题根源
cosinor.lm()中的time(time)语法并非直接使用原始time列,而是会自动生成与周期(这里是24)对应的余弦项(cos_24)和正弦项(sin_24)作为模型的核心预测变量。你之前重命名time列的做法无效,因为模型实际依赖的是这些衍生变量,而非名为time(time)的列。
解决方法
方法1:使用cosinor内置函数生成合规数据集
gen.cosinor.data()是cosinor包提供的工具,能自动根据拟合好的模型生成包含所需衍生变量的预测数据集:
library(cosinor) # 拟合原模型 fit <- cosinor.lm(Y ~ time(time), data=vitamind, period=24) # 生成符合要求的预测数据集 new_data <- gen.cosinor.data( fit, xname = "time", newdata = data.frame(time = seq(0, 24, length.out = 200)) ) # 执行预测 predictions <- predict(fit, newdata = new_data, interval = "confidence")
方法2:手动构造衍生变量
如果不想依赖内置函数,可以手动计算模型需要的余弦和正弦项,确保变量名与模型中一致(由周期决定,这里周期24对应cos_24和sin_24):
library(cosinor) fit <- cosinor.lm(Y ~ time(time), data=vitamind, period=24) new_data <- data.frame( time = seq(0, 24, length.out = 200) ) # 手动生成模型所需的余弦、正弦项 new_data$cos_24 <- cos(2 * pi * new_data$time / 24) new_data$sin_24 <- sin(2 * pi * new_data$time / 24) # 执行预测 predictions <- predict(fit, newdata = new_data, interval = "confidence")
验证模型变量
可以通过以下代码查看模型实际使用的变量,确认衍生项的名称:
names(fit$model)
输出会包含cos_24和sin_24,这就是predict时newdata必须包含的列。
内容的提问来源于stack exchange,提问作者Brennan
相关产品推荐
相关产品推荐

