如何在R中进行多因素回归(一般线性模型)而不预先知道预测变量的数量?

时间:2019-06-28 17:22:49

标签: r linear-regression

我想在R 中进行多元线性回归,而无需明确知道之前的预测变量数量

我大约有400个数组,我正在循环执行,每个数组都进行了多因素回归。 对于每个回归,我最多具有7个预测变量。 我的问题是在'最多'中,某些数组不存在某些预测变量。 在这种情况下,当我做这样的事情时,显然是行不通的 LinearModel = lm(Y ~ V1 + V2 + V3 + V4 + V5 + V6 + V7, data = foo)。 其中foo是具有8列[Y,V1,V2,... V7]的数据帧

我实际上找到了一个解决方案,其中包括将任何缺少的预测变量替换为零向量。 它可以工作,但是我不得不保留和处理许多占用内存的无用数据(每个数组都有大约40,000个值)。

这是代码的样子

for (current_array in arrays)
{
    Y = get.data(current_array) #Actually lot of long process

    regressors_mat = matrix (0, nrow = 40000, ncol = 7) # All non existing indicators will stay at 0
    colmatreg = 0
    for (predictor in predictors)
    {
        colmatreg = colmatreg + 1       
        if (!(predictor.exists.for(current_array))
        { 
                next
        }
        regressors_mat[, colmatreg] = get.data(predictor) #Actually lot of long process
    }
    dtf = data.frame(cbind(regressors_mat, Y))  
    colnames(dtf)[ncol(dtf)] = "Y"

    LinearModel = lm(Y ~ V1 + V2 + V3 + V4 + V5 + V6 + V7, data = dtf)#won't work if the 7 predictors are not available
# Long process 
}   
# Long process 

是否仍然可以执行多因素线性回归,而不必编写LinearModel = lm(Y ~ V1 + V2 + V3 + V4 + V5 + V6 + V7, data = dtf),当所有7个预测变量都不可用并且无需保存和处理40,000 x 400 x nb_of_unavailable_predictors时,该函数就无法工作 strong>?

像这样的事情会很棒:

for (current_array in arrays)
{
    Y = get.data(current_array)
    nbcol = nb.predictos.available(current_array) # I can have this function
    regressors_mat = matrix (0, nrow = 40000, ncol = nbcol )
    colmatreg = 0
    for (predictor in predictors)
    {
        colmatreg = colmatreg + 1       
        if (!(predictor.exists.for(current_array))
        { 
                next
        }
        regressors_mat[, colmatreg] = get.data(predictor) #Actually lot of long process
    }
    dtf = data.frame(cbind(regressors_mat, Y))  
    colnames(dtf)[ncol(dtf)] = "Y"

    LinearModel = lm(Y ~ colSums(dtf[, 1:(ncol(dtf) -1)], data = dtf)
#Allowing to make the multifactorial model without knowing in advance the number of factors
}   

如果效率更高,我什至不必预分配,我可以将列连接起来

任何帮助或建议都很好。谢谢!

1 个答案:

答案 0 :(得分:0)

我终于发现.是解决方案! 如果dtf是具有8列[Y,V1,V2,... V7]的数据帧,则

LinearModel = lm(Y ~ V1 + V2 + V3 + V4 + V5 + V6 + V7, data = dtf)

与以下内容完全相同:

LinearModel = lm(Y ~ ., data = dtf)

.,将保留所有剩余的列。