很遗憾,predict.polr
没有文档条目,否则您可以简单地阅读该文档来了解如何正确使用predict
。
在R中,仅针对少数原始的模型拟合函数(例如smooth.spline
),predict
会期望新数据为向量(这是合理的,因为smooth.spline
处理单变量回归)。通常情况下,predict
期望一个数据框或列表,其中的变量名与模型公式中指定的变量名称匹配,或者与模型框架中显示的名称相同(即“terms”属性)。如果您拟合了一个模型:
labels ~ var1 + var2
那么您应该构建“ newdata”:
predict(model, newdata = data.frame(var1 = newVar1, var2 = newVar2))
或者
predict(model, newdata = list(var1 = newVar1, var2 = newVar2))
注意,对于predict
使用的是newdata
而不是data
。
由于缺乏文档,我们可以看一下:
args(MASS:::predict.polr)
您甚至可以检查源代码(不长):
MASS:::predict.polr
您将在源代码中看到以下内容:
newdata <- as.data.frame(newdata)
m <- model.frame(Terms, newdata, na.action = function(x) x,
xlev = object$xlevels)
这就解释了为什么应该将
newdata
作为数据框传递,并且变量名称必须与
Terms
中的名称相匹配。
以下是一个可重现的示例:
library(MASS)
house.plr <- polr(Sat ~ Infl + Type + Cont, weights = Freq, data = housing)
attr(terms(house.plr$model), "term.labels")
进行预测时,以下内容将不起作用:
predict(house.plr, data = data.frame("Low", "Tower", "Low"))
predict(house.plr, newdata = data.frame("Low", "Tower", "Low"))
这个可以运行:
predict(house.plr, newdata = data.frame(Infl = "Low", Type = "Tower", Cont = "Low"))