以编程方式创建模型公式

时间:2019-07-10 16:30:03

标签: julia

是否可以通过编程方式创建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 个答案:

答案 0 :(得分:1)

从StatsModels 0.6.x版开始,您可以使用术语构造函数(例如TermConstantTerm或使用通用函数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文档here