是否可以通过编程方式创建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
有没有办法做到这一点?
答案 0 :(得分:1)
从StatsModels 0.6.x版开始,您可以使用术语构造函数(例如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文档here。