【问题标题】:specify only target variable in GLM.jl在 GLM.jl 中仅指定目标变量
【发布时间】:2023-03-31 12:45:01
【问题描述】:

R 中,可以使用公式对象仅指定目标变量:y ~ .

这在GLM.jl 中不起作用。

【问题讨论】:

  • 不确定问题是什么?
  • 见下面 Dan 的回答

标签: metaprogramming julia


【解决方案1】:

在 R 中,公式中的点表示法表示除依赖字段(在公式的 LHS 上)之外的所有字段。显然GLM.jl 没有实现这种表示法,但这可以改变。

例如,以下函数使事情更接近于 R:

using DataFrames    # install with Pkg.add("DataFrames")
using MacroTools    # install with Pkg.add("MacroTools")

function usedot!(f, df)
    vs = collect(filter(x->x != f.lhs,names(df)))
    ex = length(vs)>1 ? Expr(:call,:+,vs...) : vs[1]
    f.rhs = MacroTools.postwalk(x -> x == :(:.) ? ex : x , f.rhs)
    f.rhs = MacroTools.postwalk(x -> typeof(x)==Expr &&
      x.head==:quote && length(x.args)==1 &&
      x.args[1] == :. ? ex : x , f.rhs)
    return f
end

usedot(f,df) = usedot!(DataFrames.Formula(f),df)

这些函数可以按如下方式使用:

julia> using GLM, RDatasets

julia> form = dataset("datasets", "Formaldehyde");

julia> lm1 = fit(LinearModel, usedot(@formula(OptDen ~ :.),form), form)
DataFrames.DataFrameRegressionModel{GLM.LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,Base.LinAlg.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

Formula: OptDen ~ 1 + Carb

Coefficients:
               Estimate  Std.Error  t value Pr(>|t|)
(Intercept)  0.00508571 0.00783368 0.649211   0.5516
Carb           0.876286  0.0135345  64.7444    <1e-6

但是,当然,在实践中应该使用具有更多字段的 DataFrame。 更改 GLM.jl 以包含点表示法也不应该这么难,但请注意需要在点具有具体含义之前将公式附加到 DataFrame,这可能是迄今为止避免使用它的原因。

【讨论】:

  • 到目前为止,我的印象是,ScikitLearn.jl 是与 DataFrames 集成的首选机器学习库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 2013-11-20
相关资源
最近更新 更多