代码之家  ›  专栏  ›  技术社区  ›  Aron

预测Y中缺失数据的回归后lm

  •  4
  • Aron  · 技术社区  · 7 年前

    我不知道如何使用 predict.lm

    # Create a fake dataframe
    x <- c(1,2,3,4,5,6,7,8,9,10)
    y <- c(100,200,300,400,NA,600,700,800,900,100)
    df <- as.data.frame(cbind(x,y))
    
    # Regress X and Y
    model<-lm(y~x+1)
    summary(model)
    
    # Attempt to generate predictions in source dataframe but am unable to.
    df$y_ip<-predict.lm(testy)
    
    Error in `$<-.data.frame`(`*tmp*`, y_ip, value = c(221.............
      replacement has 9 rows, data has 10
    

    df$y<-B0+ B1*df$x ,或通过调用模型的系数来生成预测 df$y<-((summary(model)$coefficients[1, 1]) + (summary(model)$coefficients[2, 1]*(df$x)) predict 作用

    提前感谢您的帮助!

    2 回复  |  直到 7 年前
        1
  •  6
  •   Ben Bolker    7 年前

    R中有内置的功能(但不一定明显):它是 na.action 参数/ ?na.exclude predict() (和类似的下游处理功能)将自动填写 NA

    设置数据:

    df <- data.frame(x=1:10,y=100*(1:10))
    df$y[5] <- NA
    

    拟合模型:默认值 na.行动 na.omit ,它只是删除了不完整的情况。

    mod1 <- lm(y~x+1,data=df)
    predict(mod1)
    ##    1    2    3    4    6    7    8    9   10 
    ##  100  200  300  400  600  700  800  900 1000 
    

    na.exclude 在安装之前删除不完整的案例,然后恢复它们(填充 不适用 )在预测向量中:

    mod2 <- update(mod1,na.action=na.exclude)
    predict(mod2)
    ##    1    2    3    4    5    6    7    8    9   10 
    ##  100  200  300  400   NA  600  700  800  900 1000 
    
        2
  •  2
  •   agenis    7 年前

    predict.lm 作用 无论哪种方式,您都必须输入模型本身作为其第一个参数 model ,有或没有新数据。如果没有新数据,它将仅对训练数据进行预测,从而排除您的 NA 行,您需要此解决方法来适应初始data.frame:

    df$y_ip[!is.na(df$y)] <- predict.lm(model)
    

    或者明确指定一些新数据。自从新的 x 比训练多了一排 x

    df$y_ip <- predict.lm(model, newdata = df)