Создайте формулу модели программно - PullRequest
1 голос
/ 10 июля 2019

Есть ли способ создать формулу StatsModels программно?Например, предположим, что я хочу создать формулу типа @formula(y ~ x1 + x2) для любого числа терминов предиктора.Другими словами, я хотел бы создать функцию, которая ведет себя следующим образом:

julia> using StatsModels

julia> make_formula(3)
FormulaTerm
Response:
  y(unknown)
Predictors:
  x1(unknown)
  x2(unknown)
  x3(unknown)

julia> make_formula(3) == @formula(y ~ x1 + x2 + x3)
true

Есть ли способ сделать это?

1 Ответ

1 голос
/ 10 июля 2019

Начиная с версии 0.6.x StatsModels, вы можете создавать термины формул, используя конструкторы терминов, такие как Term и ConstantTerm, или используя универсальную функцию term, которая работает как с числами, так и с символами.Затем эти термины можно объединить с помощью операторов формул, таких как +, & и ~.

. Вот как можно построить простую формулу с использованием конструкторов Term:

julia> f = Term(:y) ~ ConstantTerm(1) + Term(:x)
FormulaTerm
Response:
  y(unknown)
Predictors:
  1
  x(unknown)

julia> f == @formula(y ~ 1 + x)
true

А вот как вы можете использовать функцию term для программного создания формулы:

julia> function make_formula(n)
           term(:y) ~ sum(term.(Symbol.(string.("x", 1:n))))
       end
make_formula (generic function with 1 method)

julia> make_formula(3)
FormulaTerm
Response:
  y(unknown)
Predictors:
  x1(unknown)
  x2(unknown)
  x3(unknown)

julia> make_formula(3) == @formula(y ~ x1 + x2 + x3)
true

Подробнее см. Документацию StatsModels здесь .

...