我花了很多时间试图解决这个错误并搜索没有任何运气的解决方案,我提前感谢您的帮助。
我正在尝试根据通过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缺少变量
非常感谢任何帮助!
答案 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的文档文档中的用法部分。
此示例对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)