我正在尝试为我运行的具有 2 个因子和一个连续变量的模型创建一个预测数据框。我想创建的数据框来绘制第一个因素的模型预测如下:
Preds.Month = data.frame(Month = factor(1:12),
VegeType = factor(1:12),
DistAgriLand = median(a$DistAgriLand, na.rm = TRUE))
但我收到这条消息:model.frame.default 中的错误(Terms, newdata, na.action = na.action, xlev = object$xlevels):因子 VegeType 有新的级别 6
但是,如果我从模型中删除因子 VegeType,重新拟合模型并尝试创建预测数据框,它可以正常工作。我不确定错误是什么以及如何解决它,任何帮助将不胜感激。我确实知道,尽管 VegeType 有 12 个级别,但如果这在错误中发挥作用,则只有 5 个级别中有数据。
以下是一些示例数据:
a = structure(list(Month = structure(c(9L, 9L, 9L, 9L, 9L, 9L, 9L,
9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L,
11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 12L,
12L, 12L, 12L, 12L, 3L, 4L, 6L, 6L, 8L, 8L, 10L, 10L, 12L, 12L,
3L, 3L, 3L, 6L, 6L, 10L, 10L, 3L, 3L, 3L, 6L, 6L, 10L, 10L, 3L,
6L, 6L, 10L, 10L, 3L, 6L, 6L, 10L, 10L, 3L, 4L, 6L, 6L, 8L, 8L,
10L, 10L, 12L, 12L, 3L, 4L, 6L, 6L, 8L, 8L), .Label = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"), class = "factor"),
VegeType = structure(c(6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L), .Label = c("1", "2", "3", "4", "5", "7", "8", "9", "10",
"11", "12"), class = "factor"), DistAgriLand = c(580.5, 580.5,
580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5,
580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5,
580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5,
580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5,
580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5, 580.5,
580.5, 580.5, 580.5, 594.37, 594.37, 594.37, 594.37, 594.37,
594.37, 594.37, 594.37, 594.37, 594.37, 594.37, 594.37, 594.37,
594.37, 594.37, 594.37, 594.37, 594.37, 594.37, 594.37, 594.37,
594.37, 594.37, 594.37, 594.37, 594.37, 594.37, 594.37, 594.37,
594.37, 594.37, 594.37, 594.37, 594.37, 594.37, 594.37, 594.37,
594.37, 594.37, 594.37, 594.37, 594.37, 594.37, 594.37, 594.37,
594.37, 594.37, 594.37, 594.37, 594.37)), row.names = c(NA,
100L), class = "data.frame")
尝试将缺少的级别添加到 VegeType:
Preds.Month = data.frame(Month = factor(1:12),
VegeType = c(levels(a$VegeType),6),
DistAgriLand = median(a$DistAgriLand, na.rm = TRUE))
输出:
Month VegeType DistAgriLand
1 1 1 587.435
2 2 2 587.435
3 3 3 587.435
4 4 4 587.435
5 5 5 587.435
6 6 7 587.435
7 7 8 587.435
8 8 9 587.435
9 9 10 587.435
10 10 11 587.435
11 11 12 587.435
12 12 6 587.435
但是,更好的方法是确保在首先创建 vegeType 时,其中有 6 级。即levels=(1:12)
,虽然当前在您提供的结构中,您的所有值都是“6”,但.Label = c(1,2,3,4,5,7,8,9,10,11,12)
. 您是否打算将 VegeType=6 标记为“7”?
最后,如果你想预测月份和蔬菜类型的所有级别,你可以这样做
Preds.Month = setNames(
cbind(
expand.grid(1:12, 1:12),
median(a$DistAgriLand,na.rm=T)
), c("Month", "VegeType", "DistAgriLand")
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句