2015-02-24 92 views
0

我想用x回归y1,然后y2用x等等,并将斜率,截距,r2值,p值等保存到一个向量中,使得最终向量应包含y1...n即使值是NA。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的所有值[我]是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的位置信息的方法[我]这样,我的最终载体输出会是这个样子

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

任何帮助将非常感激

+0

需要使用match()与数据框的colnames和lm结果的'$ terms'组件。 – 2015-02-24 17:26:54

回答

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) 
1

sapply超过DF返回系数非x列,如果有任何非NAS在从属variabl E(y)以及返回的NA否则:

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)) 
+0

谢谢,正是我需要的 – user14845 2015-02-24 19:02:28