![](/img/trans.png)
[英]What is the equivalent of R's lm function for fitting simple linear regressions in python?
[英]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:
部分是准確生成的,如果輸出列表中有許多組件,這將非常有用。
您可以使用paste0
和as.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.