# How to create a loop for a regression model?

**URL:** https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829
**Category:** Statistics
**Created:** [February 23, 2021, 7:42am UTC](https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829 "2021-02-23T07:42:43Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![younghan-lee](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/younghan-lee/32/19224_2.png) [@younghan-lee](https://discourse.julialang.org/u/younghan-lee)
#### Post date: [February 23, 2021, 7:42am UTC](https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829/1 "2021-02-23T07:42:43Z")

</div>

Hi everyone, I’m new to Julia and I’m trying to create a loop for a regression model.  
For example,

```julia
list = [:A, :B, :C]
for i in list
    result = lm(@formula(i ~ X1 + X2), data)
    println(result)
end 

```

Something like this. But I get an error.

> type NamedTuple has no field i

Can someone teach me how to fix it?  
Thank you.

---

<div class="post-metadata">

### Author: ![younghan-lee](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/younghan-lee/32/19224_2.png) [@younghan-lee](https://discourse.julialang.org/u/younghan-lee)
#### Post date: [February 23, 2021, 8:52am UTC](https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829/2 "2021-02-23T08:52:39Z")

</div>

I could solve it by not using the macro “@formula”. Instead,

```julia
list = [:A, :B, :C]
for i in list
result = lm(StatsModels.Term(i) ~ StatsModels.Term(:X1) + StatsModels.Term(:X2), data)
println(result)
end

```

Please let me know if you have any other solution to this.  
Thanks!

---

<div class="post-metadata">

### Author: ![sijo](https://avatars.discourse-cdn.com/v4/letter/s/da6949/32.png) [@sijo](https://discourse.julialang.org/u/sijo)
#### Post date: [February 23, 2021, 9:20am UTC](https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829/3 "2021-02-23T09:20:31Z")

</div>

In the expression `@formula(i ~ X1 + X2)` you have to specify that `i` is not a column name in your data, but that it _contains_ a column name… You can do it like this:

```julia
for i in list
    result = lm((@eval @formula($i ~ X1 + X2)), data)
    println(result)
end

```

---

<div class="post-metadata">

### Author: ![younghan-lee](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/younghan-lee/32/19224_2.png) [@younghan-lee](https://discourse.julialang.org/u/younghan-lee)
#### Post date: [February 23, 2021, 9:51am UTC](https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829/5 "2021-02-23T09:51:44Z")

</div>

Thank you! It works.

Do you also have any idea of how to save the results for each regression?  
For example, result1, result2, …

---

<div class="post-metadata">

### Author: ![sijo](https://avatars.discourse-cdn.com/v4/letter/s/da6949/32.png) [@sijo](https://discourse.julialang.org/u/sijo)
#### Post date: [February 23, 2021, 11:20am UTC](https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829/6 "2021-02-23T11:20:08Z")

</div>

You can collect them using array comprehension:

```julia
using DataFrames, GLM
data = DataFrame(X1=[1,2,3,4], X2=[2,4,7,8], A=[4,8,13,17], B=[10,11,12,13]);
list = [:A, :B];
results = [lm((@eval @formula($i ~ X1 + X2)), data) for i in list]

```

This gives you results in `results[1]`, `results[2]`, …

---

<div class="post-metadata">

### Author: ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)
#### Post date: [February 23, 2021, 1:16pm UTC](https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829/7 "2021-02-23T13:16:12Z")

</div>

The recommended way of constructing formulas programmatically is to use `Term`s (or the `term` function) like so:

```julia
[lm(Term(i) ~ Term(:X1) + Term(:X2), data) for i in list]

```

this is discussed in the docs [here](https://juliastats.org/StatsModels.jl/stable/formula/#Constructing-a-formula-programmatically).

---

<div class="post-metadata">

### Author: ![younghan-lee](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/younghan-lee/32/19224_2.png) [@younghan-lee](https://discourse.julialang.org/u/younghan-lee)
#### Post date: [February 24, 2021, 6:35am UTC](https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829/8 "2021-02-24T06:35:59Z")

</div>

@nilshg Thank you! 🙂

---

<div class="post-metadata">

### Author: ![younghan-lee](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/younghan-lee/32/19224_2.png) [@younghan-lee](https://discourse.julialang.org/u/younghan-lee)
#### Post date: [February 24, 2021, 6:36am UTC](https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829/9 "2021-02-24T06:36:16Z")

</div>

@sijo Thank you 🙂

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [December 29, 2022, 6:01pm UTC](https://discourse.julialang.org/t/how-to-create-a-loop-for-a-regression-model/55829/10 "2022-12-29T18:01:54Z")

</div>

2 posts were split to a new topic: [Regression with variables in array](https://discourse.julialang.org/t/regression-with-variables-in-array/92280)
