线性回归的NA问题

时间:2015-02-24 17:23:06

标签: r linear-regression na

我想用x回归y1,然后用x回归y2,然后将斜率,截距,r2值,p值等保存到向量中,使得最终向量应包含y1...n的值甚至如果值是NA。

以下是我的数据的外观

y1  y2  y3  y4  y5  x
NA  89  86  91  69  1
NA  86  NA  88  NA  2
NA  86  83  88  66  3
NA  100 NA  102 80  4

使用以下代码,不会计算y [,i]的所有值都是NA的那些列的斜率值,但如果其中一个值是NA,则仍将计算斜率值。

slope<-0
for(i in 1:length(names(y))){
if (all(is.na(y[,i]))==FALSE) {
   m <- lm(y[,i] ~ time)
   slope <- c(slope, m$coefficients[2])
  }
}

然而,我仍然无法找到一种方法来维持所有y [,i]的位置信息,使得我的最终矢量输出看起来像这样

slope
1   NA
2   9.362637e-01
3   8.461538e-01
4   3.450549e-01
5   6.593407e-01

非常感谢任何帮助

2 个答案:

答案 0 :(得分:1)

如果因变量(sapply)中存在任何非NA并且返回NAs,则DF的非x列上的y会返回系数:

t(sapply(DF[-6], function(y) if (any(!is.na(y))) coef(lm(y ~ x, DF)) else c(NA, NA)))

这给出了以下内容,其中第1列是截距,第2列是斜率:

       [,1]      [,2]
y1       NA        NA
y2 82.00000  3.300000
y3 87.50000 -1.500000
y4 84.00000  3.300000
y5 63.85714  2.928571

如果只需要斜坡,那么:

 matrix(sapply(DF[-6], function(y) if (any(!is.na(y))) coef(lm(y ~ x, DF))[2] else NA))

答案 1 :(得分:0)

#This is for the slope only. 
  nn<-lapply(paste0("y",1:5),function(i){
    if (all(is.na(y[[i]]))==FALSE) {bb<-lm(y[[i]]~x,data=y)
               return(bb[[1]][2])
     }else{
         return(NA)
    }
 })
     do.call(rbind,kk)
             x
[1,]        NA
[2,]  3.300000
[3,] -1.500000
[4,]  3.300000
[5,]  2.928571

    do.call(rbind,nn)