Джулия: в @formula как я указываю все столбцы, кроме целевого?

#julia

#джулия

Вопрос:

В R

 glm(target ~., data=data)
  

Будет соответствовать модели, использующей все столбцы данных, кроме целевого.

Как мне добиться того же в Julia с помощью @formula макроса?

 glm(@formula(target ~ .), data)
  

не работает

Ответ №1:

Я предполагаю, что data это фрейм данных из DataFrames.jl для простоты. Вот пример, как это сделать:

 julia> df = DataFrame(rand(6, 5))
6×5 DataFrame
│ Row │ x1         │ x2        │ x3       │ x4       │ x5        │
│     │ Float64    │ Float64   │ Float64  │ Float64  │ Float64   │
├─────┼────────────┼───────────┼──────────┼──────────┼───────────┤
│ 1   │ 0.774058   │ 0.248908  │ 0.926771 │ 0.544818 │ 0.159493  │
│ 2   │ 0.549339   │ 0.60138   │ 0.711105 │ 0.916472 │ 0.703073  │
│ 3   │ 0.455965   │ 0.0912193 │ 0.178479 │ 0.472463 │ 0.0229811 │
│ 4   │ 0.0242736  │ 0.0131428 │ 0.833545 │ 0.232273 │ 0.170568  │
│ 5   │ 0.00796519 │ 0.0655102 │ 0.326123 │ 0.61535  │ 0.148247  │
│ 6   │ 0.653029   │ 0.695704  │ 0.817001 │ 0.11801  │ 0.459253  │

julia> lm(term(:x1) ~ sum(term.([1; names(df, Not(:x1))])), df)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

x1 ~ 1   x2   x3   x4   x5

Coefficients:
─────────────────────────────────────────────────────────────────────────────
              Estimate  Std. Error    t value  Pr(>|t|)  Lower 95%  Upper 95%
─────────────────────────────────────────────────────────────────────────────
(Intercept)  -0.24995     0.358235  -0.697725    0.6122   -4.80176    4.30186
x2            2.12158     0.784308   2.70504     0.2254   -7.84399   12.0872
x3            0.483761    0.411032   1.17694     0.4484   -4.73889    5.70641
x4            0.747987    0.48225    1.55104     0.3646   -5.37958    6.87555
x5           -2.21183     1.03313   -2.14091     0.2782  -15.339     10.9153
─────────────────────────────────────────────────────────────────────────────
  

Однако в целом я стараюсь избегать этого (т. Е. Использовать синоним . ), поскольку обычно безопаснее явно указывать, какие переменные вы хотите иметь в своей модели. Обратите внимание, что в шаблоне, который я показываю, это действительно просто, поскольку единственное, что вам нужно сделать, это заменить names(df, Not(:x1)) списком переменных, которые вы хотите включить, которые, например, могут быть

 names(df, All(r"first_type_of_predictors", r"second_type_of_predictors")))
  

итак, как вы можете видеть, это действительно гибко.