【问题标题】:bic.glm predict error: "newdata is missing variables"bic.glm 预测错误:“newdata 缺少变量”
【发布时间】:2015-11-17 20:58:25
【问题描述】:

我花了很多时间试图解决这个错误并寻找解决方案,但没有任何运气,在此先感谢您的帮助。

我正在尝试根据通过 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 缺少变量

非常感谢任何帮助!

【问题讨论】:

    标签: r


    【解决方案1】:

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

    除了那条小评论...我刚刚遇到了同样的错误。经过一番挖掘,似乎predict.bic.glm 检查了名称与bic.glm 对象中的mle 矩阵。问题是在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
    

    【讨论】:

    • 我今天也遇到了同样的问题:包还是没变。你的解决方案奏效了!谢谢
    【解决方案2】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      相关资源
      最近更新 更多