簡體   English   中英

R lm:動態創建回歸

[英]R lm: Create regressions dynamically

我有一組因變量y1, y2, ... ,一組獨立變量x1,x2,... ,以及一組控件d1,d2,... 這些都在data.table ,讓我們稱之為data

我需要做一些事情

out1 <- lm(y1 ~ x1, data=data)
out2 <- lm(y1 ~ x1 + d1 + d2, data=data)
....

這當然不是很好,所以我在考慮編寫一個包含所有這些回歸的列表,而不僅僅是迭代它。 有點像

myRegressions <- list('out1' = y1 ~ x1, 'out2' = y1 ~ x1 + d1 + d2)
output <- NULL
for (reg in myRegressions)
{
    output[reg] <- lm(myRegressions[[reg]])
}

這當然不起作用:我無法構造列表,因為語法在lm()之外是無效的。 這里有什么好方法呢?

使用內置的anscombe數據框試試這個:

formulas = list(y1 ~ x1, y2 ~ x2)
lapply(formulas, function(fo) do.call("lm", list(fo, data = quote(anscombe))))

贈送:

[[1]]

Call:
lm(formula = y1 ~ x1, data = anscombe)

Coefficients:
(Intercept)           x1  
     3.0001       0.5001  


[[2]]

Call:
lm(formula = y2 ~ x2, data = anscombe)

Coefficients:
(Intercept)           x2  
      3.001        0.500  

請注意 ,輸出的Call:部分是准確生成的,如果輸出列表中有許多組件,這將非常有用。

您可以使用paste0as.formula生成公式,然后簡單地將它們放入lm(),例如

regressors <- c("x1", "x1 + x2", "x1 + x2 + x3")


for (i in 1:length(regressors)) {

  print(as.formula(paste0("y1", "~", regressors[i])))
}

這為您提供了公式(打印)。 只需將它們存儲在一個列表中,然后用lapply迭代遍歷該列表

lapply(stored_formulas, function(x) { lm(x, data=yourData) })

公式可以引用:

myReg <- list('out1' = "mpg ~ cyl")
lm(myReg[[1]],data=mtcars)

Call:
lm(formula = myReg[[1]], data = mtcars)

Coefficients:
(Intercept)          cyl  
     37.885       -2.876  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM