2015-02-24 95 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