我想在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
}
如果效率更高,我什至不必预分配,我可以将列连接起来
任何帮助或建议都很好。谢谢!
答案 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)
.
,将保留所有剩余的列。