Regression with variables in array

It’s not clear to me what list and list_2 are, and the fact that you are calling reg suggests that you are using some additional package (although as long as it relies on StatsModels you’ll be fine).

The case when both right hand side and left hand side variables come from some sort of iterator is a straightforward extension of what I posted above:

julia> using DataFrames, GLM

julia> df = DataFrame([:y1, :y2, :x1, :x2, :x3] .=> eachcol(rand(3, 5)))
3×5 DataFrame
 Row │ y1        y2        x1        x2         x3       
     │ Float64   Float64   Float64   Float64    Float64  
─────┼───────────────────────────────────────────────────
   1 │ 0.406401  0.974452  0.57843   0.553727   0.816638
   2 │ 0.429666  0.873084  0.808852  0.0404561  0.728702
   3 │ 0.998661  0.865624  0.269401  0.6146     0.630912

julia> rhs = ["y1", "y2"]; lhs = ["x1", "x2", "x3"];

julia> for y ∈ rhs
           for x ∈ lhs
               println(lm(term(y) ~ term(x), df))
           end
       end
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Vector{Float64}}, GLM.DensePredChol{Float64, LinearAlgebra.CholeskyPivoted{Float64, Matrix{Float64}, Vector{Int64}}}}, Matrix{Float64}}

y1 ~ 1 + x1

Coefficients:
────────────────────────────────────────────────────────────────────────
                Coef.  Std. Error      t  Pr(>|t|)  Lower 95%  Upper 95%
────────────────────────────────────────────────────────────────────────
(Intercept)   1.22034    0.336678   3.62    0.1714   -3.05755    5.49824
x1           -1.10239    0.566025  -1.95    0.3020   -8.29441    6.08964
────────────────────────────────────────────────────────────────────────
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Vector{Float64}}, GLM.DensePredChol{Float64, LinearAlgebra.CholeskyPivoted{Float64, Matrix{Float64}, Vector{Int64}}}}, Matrix{Float64}}

y1 ~ 1 + x2

Coefficients:
───────────────────────────────────────────────────────────────────────
                Coef.  Std. Error     t  Pr(>|t|)  Lower 95%  Upper 95%
───────────────────────────────────────────────────────────────────────
(Intercept)  0.374734    0.423848  0.88    0.5391   -5.01076    5.76023
x2           0.587803    0.886367  0.66    0.6272  -10.6746    11.8502
───────────────────────────────────────────────────────────────────────
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Vector{Float64}}, GLM.DensePredChol{Float64, LinearAlgebra.CholeskyPivoted{Float64, Matrix{Float64}, Vector{Int64}}}}, Matrix{Float64}}

y1 ~ 1 + x3

Coefficients:
────────────────────────────────────────────────────────────────────────
                Coef.  Std. Error      t  Pr(>|t|)  Lower 95%  Upper 95%
────────────────────────────────────────────────────────────────────────
(Intercept)   2.96036     1.16501   2.54    0.2387   -11.8425    17.7632
x3           -3.23784     1.59728  -2.03    0.2918   -23.5332    17.0575
────────────────────────────────────────────────────────────────────────
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Vector{Float64}}, GLM.DensePredChol{Float64, LinearAlgebra.CholeskyPivoted{Float64, Matrix{Float64}, Vector{Int64}}}}, Matrix{Float64}}

y2 ~ 1 + x1

Coefficients:
────────────────────────────────────────────────────────────────────────
                 Coef.  Std. Error     t  Pr(>|t|)  Lower 95%  Upper 95%
────────────────────────────────────────────────────────────────────────
(Intercept)  0.886426     0.132183  6.71    0.0942  -0.793119    2.56597
x1           0.0325252    0.222227  0.15    0.9075  -2.79114     2.85619
────────────────────────────────────────────────────────────────────────
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Vector{Float64}}, GLM.DensePredChol{Float64, LinearAlgebra.CholeskyPivoted{Float64, Matrix{Float64}, Vector{Int64}}}}, Matrix{Float64}}

y2 ~ 1 + x2

Coefficients:
─────────────────────────────────────────────────────────────────────────
                 Coef.  Std. Error      t  Pr(>|t|)  Lower 95%  Upper 95%
─────────────────────────────────────────────────────────────────────────
(Intercept)  0.876624    0.0860848  10.18    0.0623  -0.217188    1.97044
x2           0.0689036   0.180024    0.38    0.7673  -2.21852     2.35632
─────────────────────────────────────────────────────────────────────────
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Vector{Float64}}, GLM.DensePredChol{Float64, LinearAlgebra.CholeskyPivoted{Float64, Matrix{Float64}, Vector{Int64}}}}, Matrix{Float64}}

y2 ~ 1 + x3

Coefficients:
───────────────────────────────────────────────────────────────────────
                Coef.  Std. Error     t  Pr(>|t|)  Lower 95%  Upper 95%
───────────────────────────────────────────────────────────────────────
(Intercept)  0.4862      0.225802  2.15    0.2768   -2.38289    3.35529
x3           0.576478    0.309584  1.86    0.3137   -3.35716    4.51012
───────────────────────────────────────────────────────────────────────

As a general rule of thumb, if you find yourself using @eval you’re likely doing it wrong.

1 Like