带有“MASS::polr”的probit序数logistic回归:如何对新数据进行预测

带有“MASS::polr”的probit序数logistic回归:如何对新数据进行预测,r,regression,logistic-regression,predict,ordinal,R,Regression,Logistic Regression,Predict,Ordinal,我想在R中进行顺序回归,所以我想使用MASS包中的polr函数。首先,我创建如下模型: model <- polr(labels ~ var1 + var2, Hess = TRUE) model遗憾的是,predict.polr没有文档条目,否则您只需阅读该条目,了解如何正确使用predict 在R中,只有少数原始模型拟合函数,如smooth.spline,predict需要新数据的向量(这是合理的,因为smooth.spline处理单变量回归)。通常,predict需要一个数据框

我想在R中进行顺序回归,所以我想使用
MASS
包中的
polr
函数。首先,我创建如下模型:

model <- polr(labels ~ var1 + var2, Hess = TRUE)  

model遗憾的是,
predict.polr
没有文档条目,否则您只需阅读该条目,了解如何正确使用
predict

在R中,只有少数原始模型拟合函数,如
smooth.spline
predict
需要新数据的向量(这是合理的,因为
smooth.spline
处理单变量回归)。通常,
predict
需要一个数据框或列表,其名称匹配模型公式中指定的变量或模型框中显示的变量(“术语”属性)。如果您适合某个型号:

labels ~ var1 + var2
然后您应该构造
newdata

predict(model, newdata = data.frame(var1 = newVar1, var2 = newVar2))

注意,对于
预测
,它是
新数据
,而不是
数据


由于没有文档,如果我们看一下:

args(MASS:::predict.polr)
#function (object, newdata, type = c("class", "probs"), ...) 
您甚至可以检查源代码(不长):

您将在源代码中看到:

newdata <- as.data.frame(newdata)
m <- model.frame(Terms, newdata, na.action = function(x) x, 
       xlev = object$xlevels)
在进行预测时,这些将不起作用:

## `data` ignored as no such argument
predict(house.plr, data = data.frame("Low", "Tower", "Low"))
## no_match in names 
predict(house.plr, newdata = data.frame("Low", "Tower", "Low"))
这项工作:

predict(house.plr, newdata = data.frame(Infl = "Low", Type = "Tower", Cont = "Low"))

#[1] Low
#Levels: Low Medium High
newdata <- as.data.frame(newdata)
m <- model.frame(Terms, newdata, na.action = function(x) x, 
       xlev = object$xlevels)
library(MASS)
house.plr <- polr(Sat ~ Infl + Type + Cont, weights = Freq, data = housing)

## check model terms inside model frame
attr(terms(house.plr$model), "term.labels")
# [1] "Infl" "Type" "Cont"
## `data` ignored as no such argument
predict(house.plr, data = data.frame("Low", "Tower", "Low"))
## no_match in names 
predict(house.plr, newdata = data.frame("Low", "Tower", "Low"))
predict(house.plr, newdata = data.frame(Infl = "Low", Type = "Tower", Cont = "Low"))

#[1] Low
#Levels: Low Medium High