-1

我有三个数据矩阵MatZ,MatXMatY,其中矩阵Z,Y的每一列X对应于同一表达式探针的一组观察值。对于每一列i,我想回归ZXY

lm(MatZ[,i]~MatX[,i]+MatY[,i])

通过遍历所有i列。这样做的问题是某些列MatX都是NA's。因此,我需要一些论据,当 的所有元素都是时(即排除回归),当有定义的观察值时在线性模型中使用这两者时lm执行线性回归。就目前而言,我得到一个错误。MatZ[,i]MatY[,i]MatX[,i]NAMatX[,i]X0 (non-NA) cases in the lm call

4

3 回答 3

1

这是一个不使用的解决方案if。这会将两个预测变量列组合成一个矩阵,然后只选择那些并非全部为 NA 的列。

lapply(seq_len(ncol(MatZ)), function(i) {
    m <- cbind(MatX[, i], MatY[, i])
    keep <- colSums(matrix(!is.na(m), ncol=2)) > 0
    lm(MatZ[, i] ~ m[, keep])
})
于 2013-06-12T13:24:12.723 回答
0

这是一个通过 mapply 作为开始的非鲁棒替代解决方案(如果矩阵中的一个不完整则有效)。但是,我也认为 if () else 没有害处。

MatW <- matrix(rnorm(16),nrow=4)
MatY <- matrix(rnorm(16),nrow=4)
MatZ <- matrix(rnorm(16),nrow=4)
MatW[ , 3] <- NA
is.na(MatW[ ,3]) # True
lm.help2 <- function (x, y, z){
  if (is.na(all(x))) lm(z ~ y)[1] else lm(z ~ x + y)[1]}
mapply(lm.help2, 
       split(MatW, col(MatW)), split(MatY, row(MatY)), split(MatZ, row(MatZ)))
# $`1.coefficients`
# (Intercept)           x           y 
# 0.5736469  -0.4142749  -0.6161875 
# 
# $`2.coefficients`
# (Intercept)           x           y 
# -0.3755538   0.1491310  -1.0966652 
# 
# $`3.coefficients` 
# (Intercept)           y # Only 1 variable in regression equation!
# 0.6374279  -0.8962027 
# 
# $`4.coefficients`
# (Intercept)           x           y 
# -1.1016562  -0.7240938  -0.5976613 
于 2013-06-12T13:07:56.963 回答
0
MatZ <- matrix(rnorm(1000),nrow=100)
MatX <- matrix(rnorm(1000),nrow=100)
MatY <- matrix(rnorm(1000),nrow=100)

MatX[,2] <- NA
MatY[,4] <- NA

condlm <- function(i){
    if(sum(is.na(MatX[,i]))==dim(MatZ)[1])
        lm <- lm(MatZ[,i]~MatY[,i])
    else if(sum(is.na(MatY[,i]))==dim(MatZ)[1])
        lm <- lm(MatZ[,i]~MatX[,i])
    else
        lm <- lm(MatZ[,i]~MatX[,i]+MatY[,i])
}

lms <- lapply(1:dim(MatZ)[2], condlm)
lms
于 2013-06-10T22:01:19.537 回答