【发布时间】:2021-05-31 09:13:32
【问题描述】:
我试图在R 中使用多变量响应,但遇到了该死的公式,并且出现了各种意外行为,主要是在函数和包中使用它们时。这个问题是双重的
我可以输入一个多变量响应,然后能够使用模型进行预测吗?
此 MVE 使用 rpart 包作为示例。这里y 是一个两列矩阵(响应),我想使用x 预测y,即x 中的每一列(此MVE 中的两列)。请注意method 本身和y 中每一列的含义无关,这只是重现问题的MVE:
library(rpart)
set.seed(1)
y <- rpois(10, lambda = 1.25)
y <- cbind(c(1,4,10,11,12, 14,16,17,20, 21), y)
print(y)
x <- matrix(1:20, ncol = 2) # just two dummy predictors
print(x)
mymodel <- rpart(y ~ x, method = "poisson", minbucket = 1)
newx <- matrix(11:20, ncol = 2) # just some dummy test predictors, note that we have less rows
predict(mymodel, newdata = data.frame(newx))
# output:
1 2 3 4 5 6 7 8
9 10
0.12500000 0.12500000 0.12500000 0.20000000 0.04761905 0.17948718 0.17948718 0.11538462
0.04000000 0.04000000
Warning message:
'newdata' had 5 rows but variables found have 10 rows
如您所见,我无法预测新数据集。我一直在弄乱列名和行名,但无法使其正常工作。
另外,
如何制作“安全”的包装器?
例如,在这个 MVE 中:
mywrapper <- function(y, x){
mymodel <- rpart(y ~ x, method = "poisson", minbucket = 1)
return(mymodel)
}
并提供了 R 文档中提供的帮助:
公式对象具有关联的环境,model.frame 使用此环境(而不是父环境)来评估在提供的数据参数中找不到的变量。 使用 ~ 运算符创建的公式使用创建它们的环境。使用 as.formula 创建的公式将为其环境使用 env 参数。
我真的不明白这是什么意思。据我了解,不输入也不输入y 或x 到mywrapper() 将导致错误(这是预期的行为)。我问是因为我正在处理 r 包和包内的函数,并且我想确保公式没有意外行为。
【问题讨论】:
标签: r machine-learning predict multivalue