我正在尝试针对一个独立变量 执行多个因变量的线性回归。
当缺少观察值( NA )时,整行不会用于该特定回归。
我通过循环/遍历因变量的每一列来完成它。
fit = list()
for( i in 1 : 2 ) {
fit[[i]] = lm( mydf$Ind_Var[ which( !is.na( mydf[ , (2+i) ] ) ) ] ~ na.omit( mydf[ , (2+i) ] ) )
}
无需涉及其他软件包(让我们限制 lm 等功能,应用系列函数, do / do.call ),我该怎么办?
mydf = data.frame(
"ID" = rep( "A" , 25 ),
"Date" = c( 1 : 25 ),
"Dep_1" = c( 0.78670185, 0.15221561, NA, 0.85270392, 0.90057399, 0.75974473, 0.42026760, 0.64035871, 0.83012434, 0.04985492, 0.06619375, 0.36024745, 0.83969627, 0.45293842, 0.25272036, NA, 0.63783321, 0.42294695, 0.06726004, 0.14124547, 0.54590193, 0.99560087, 0.14255501, 0.41559977, 0.80120970) ,
"Dep_2" = c( 0.736137983, 0.979317444, 0.901380500, 0.942325049, 0.420741297, NA, 0.243408607, 0.824064331, 0.462912557, NA, 0.710834065, 0.264922818, 0.797917063, 0.578866651, 0.955944058, 0.291149075, 0.437322581, 0.298153168, 0.579299049, 0.671718144, 0.545720702, 0.099175216, 0.808933227, 0.912825535, 0.417438973 ) ,
"Ind_Var" = c( 75:51 ) )
我自己的转换尝试将是:
apply( mydf[ ,-c(1:2) ] , 2 , function( x ) lm( mydf$Ind_Var[ which( !is.na( x ) ) ] ~ na.omit(x) ) )
但这涉及 mydf 硬编码。
如果我使用了任何错误的条款,我会道歉。
答案 0 :(得分:0)
以下方法如何
# Specify the columns that contain your predictor variables
predIdx <- c(3, 4);
# lm(y ~ x), for x being a single predictor
lapply(predIdx, function(x) lm(mydf[, ncol(mydf)] ~ mydf[, x]))
这里我假设响应总是在数据帧的最后一列。您需要手动指定的是包含预测变量的列索引。
如果您想手动排除NAs,可以在complete.cases
函数中使用lapply
;这不应该是必要的,因为lm
(默认情况下)处理NA。
我不确定你的意思是“让mydf硬编码”。对于任何数据框df
,您可以将上面的代码包含在函数内部,以使其更通用,其中列predIdx
中给出预测变量,列respIndx
中给出自变量。
one_at_a_time_LM <- function(df, predIdx, respIdx) {
lapply(predIdx, function(x) lm(df[, respIdx] ~ df[, x]))
}
one_at_a_time_LM(mydf, c(3, 4), 5);