bic.glm预测错误:“newdata缺少变量”

时间:2015-11-17 20:58:26

标签: r

我花了很多时间试图解决这个错误并搜索没有任何运气的解决方案,我提前感谢您的帮助。

我正在尝试根据通过BMA创建的系数创建预测值。每当我运行我的预测函数时,我都会收到“newdata is missing variables”错误。原始模型中包含的所有变量都存在于新数据框中,因此我不太确定问题是什么。我正在处理一个包含许多自变量的相当大的数据集。我对R很新,所以如果这是一个显而易见的问题我会道歉!

y<-df$y
x<-df
x$y<-NULL
bic.glm<-bic.glm(x, y, strict=FALSE, OR=20, glm.family="binomial", factortype=TRUE)
predict(bic.glm.bwt, x)

我也是这样试过的:

bic.glm<-bic.glm(y~., data=df, strict=FALSE, OR=20, glm.family="binomial", factortype=TRUE)
predict(bic.glm, x)

还要创建一个新的数据框......

bic.glm<-bic.glm(y~., data=df, strict=FALSE, OR=20, glm.family="binomial", factortype=TRUE)
newdata<-x
predict(bic.glm, newdata=x)

每次收到相同的错误消息时:    predict.bic.glm中的错误(bic.glm,newdata = x):    newdata缺少变量

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

首先,调用LHS与函数调用的名称相同是不好的做法。您可能正在屏蔽函数bic.glm以供进一步使用。

除了那个小评论......我刚刚遇到了同样的错误。经过一些挖掘后,似乎predict.bic.glm检查mle对象中的名称与bic.glm矩阵。问题是bic.glm中的某个地方,如果使用了因素,那些名称会得到'.x'或只是'。'附在最后。因此,无论何时使用因子,都会出现此错误。

我告诉包维护者。同时,你可以通过重命名mle对象的列名来解决这个问题,就像这样(使用你的例子):

fittedBMA<-bic.glm(y~., data=df) 
colnames(fittedBMA$mle)=colnames(model.matrix(y~., data=df)) ### this is the workaround
predict(fittedBMA,newdata=x) ### should work now, if x has the same variables as df

答案 1 :(得分:0)

好的,首先看一下BMA :: bic.glm的文档文档中的用法部分。

here

此示例对data.frame有启发意义。

Example 2 (binomial)
library(MASS)
data(birthwt)
y <- birthwt$lo
x <- data.frame(birthwt[,-1])
x$race <- as.factor(x$race)
x$ht <- (x$ht>=1)+0
x <- x[,-9]
x$smoke <- as.factor(x$smoke)
x$ptl <- as.factor(x$ptl)
x$ht <- as.factor(x$ht)
x$ui <- as.factor(x$ui)
bic.glm.bwT <- bic.glm(x, y, strict = FALSE, OR = 20,
glm.family="binomial",
factor.type=TRUE)
predict( bic.glm.bwT, newdata = x)
bic.glm.bwF <- bic.glm(x, y, strict = FALSE, OR = 20,
glm.family="binomial",
factor.type=FALSE)
predict( bic.glm.bwF, newdata = x)