我正试图在朱莉娅实施OLS回归作为学习练习。我想要的一个特性是将公式作为参数(例如'formula = Y~x1 + x2',其中Y,x1和x2是DataFrame中的列)。这是一个existing example。
如何将公式/表达式“映射”到正确的DataFrame列?
答案 0 :(得分:2)
Julia统计软件包中的公式是作为宏实现的。为~
符号定义了一个宏,这意味着表达式由Julia编译器解析。一旦被编译器解析,它们就被存储为名为rhs
的复合类型的lhs
和Formula
字段。
相对简单的实施细节可以在DataFrames.jl
源代码中看到:https://github.com/JuliaStats/DataFrames.jl/blob/725a22602b8b3f6413e35ebdd707b69c4ed7b659/src/statsmodels/formula.jl
答案 1 :(得分:1)
使用anonymous function作为输入。
julia > using DataFrames
julia > f = (x,y) -> x[:A] .* y[:B] # Anonymous function
julia > x = DataFrame(A = 6)
julia > y = DataFrame(B = 7)
julia > function OSL(x::DataFrame,y::DataFrame,f::Function);return f(x,y);end
julia > OSL(x,y,f)
1-element DataArrays.DataArray{Int64,1}:
42
答案 2 :(得分:0)
这是使用来自ISLR的波士顿数据集的最小示例,在lstat上回归medv。 (如果要验证权重向量是否正确,请查看ISLR的第111页
julia> using DataFrames, RDatasets
julia> df = dataset("MASS", "Boston")
julia> fm = @formula(MedV ~ LStat)
julia> mf = ModelFrame(fm, df)
julia> X = ModelMatrix(mf).m
julia> y = Array(df[:MedV])
julia> w = X \ y
2-element Array{Float64,1}:
34.5538
-0.950049
有关详细信息:http://dataframesjl.readthedocs.io/en/latest/formulas.html