我在R中运行了multinom()函数,但是当我尝试预测新样本时,它会一直出错。
这是代码:
library(nnet)
dta=data.frame(replicate(10,runif(10)))
names(dta)=c('y',paste0('x',1:9))
res4 <- multinom(y ~ as.matrix(dta[2:10]) , data=dta)
#make new data to predict
nd<-0.1*dta[1,2:10]
pred<-predict(res4, newdata=nd)
这是错误:
Error in predict.multinom(res4, newdata = nd) :
NAs are not allowed in subscripted assignments
我认为它与拦截包含在分析中有关,但不在新的预测输入中。我尝试通过合并一个包含1个名为“Intercept”的1x1数据帧手动设置它(因为它在summary()中调用),但它仍然会给出相同的错误。
#add intercept manually to prediction row
intercept<-data.frame(1)
names(intercept)[1]<-"Intercept"
nd<-merge(intercept,nd)
答案 0 :(得分:1)
问题在于您如何指定模型:您不能将R函数混合到这样的公式中。试试这个:
res4 <- multinom(y ~ . , data=dta) # You could also specify explicitly: y~x1+x2+x3...
#make new data to predict
nd<-0.1*dta[1,2:10]
predict(res4, newdata=nd)
# [1] 0.971794712357223
# 10 Levels: 0.201776991132647 0.211950202938169 0.223103292752057 0.225121688563377 0.372682225191966 0.612373929005116 ... 0.971794712357223