#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")))
итак, как вы можете видеть, это действительно гибко.