I tried to use lm
from GLM.jl with units from Unitful, but then received this error below. Is there some way to make this work? Or should I stick to stripping the units first before using lm
?
julia> test_df = DataFrame(x=inv.([1u"m", 2u"m", 3u"m"]), y=[1u"m", 2u"m", 3u"m"])
julia> lm(@formula(x~y), test_df)
ERROR: promotion of types Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}, Quantity{Float64, 𝐋^-2, Unitful.FreeUnits{(m^-2,), 𝐋^-2, n
othing}}, Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}} and Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}} fail
ed to change any arguments
Stacktrace:
[1] error(::String, ::String, ::String)
@ Base .\error.jl:44
[2] sametype_error(input::Tuple{Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}, Quantity{Float64, 𝐋^-2, Unitful.FreeUnits{(m^-2,),
𝐋^-2, nothing}}, Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}, Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}
})
@ Base .\promotion.jl:383
[3] not_sametype(x::Tuple{Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}, Quantity{Float64, 𝐋^-2, Unitful.FreeUnits{(m^-2,), 𝐋^-2,
nothing}}, Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}, Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}} , y::Tuple{Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}, Quantity{Float64, 𝐋^-2, Unitful.FreeUnits{(m^-2,), 𝐋^-2, nothing}}, Quantity{F
loat64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}, Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}} )
@ Base .\promotion.jl:377
[4] promote(x::Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}} , y::Quantity{Float64, 𝐋^-2, Unitful.FreeUnits{(m^-2,), 𝐋^-2, nothing
}}, z::Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}} , a::Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}} )
@ Base .\promotion.jl:371
[5] concrete_term(t::Term, xs::Vector{Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}} , #unused#::Type{ContinuousTerm})
@ StatsModels C:\Users\whee\.julia\packages\StatsModels\s9GMM\src\schema.jl:202
[6] concrete_term(t::Term, xs::Vector{Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}} , #unused#::Nothing)
@ StatsModels C:\Users\whee\.julia\packages\StatsModels\s9GMM\src\schema.jl:198
[7] concrete_term(t::Term, dt::NamedTuple{(:x, :y), Tuple{Vector{Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}}, Vector{Quantity{In
t64, 𝐋, Unitful.FreeUnits{(m,), 𝐋, nothing}}}}} , hints::Dict{Symbol, Any})
@ StatsModels C:\Users\whee\.julia\packages\StatsModels\s9GMM\src\schema.jl:184
[8] (::StatsModels.var"#56#57"{NamedTuple{(:x, :y), Tuple{Vector{Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}}, Vector{Quantity{In
t64, 𝐋, Unitful.FreeUnits{(m,), 𝐋, nothing}}}}}, Dict{Symbol, Any}}) (t::Term)
@ StatsModels .\none:0
[9] iterate
@ .\generator.jl:47 [inlined]
[10] Dict{Term, AbstractTerm}(kv::Base.Generator{Vector{Term}, StatsModels.var"#56#57"{NamedTuple{(:x, :y), Tuple{Vector{Quantity{Float64, 𝐋^-1, Unitful.F
reeUnits{(m^-1,), 𝐋^-1, nothing}}}, Vector{Quantity{Int64, 𝐋, Unitful.FreeUnits{(m,), 𝐋, nothing}}}}}, Dict{Symbol, Any}}} )
@ Base .\dict.jl:103
[11] Schema
@ C:\Users\whee\.julia\packages\StatsModels\s9GMM\src\schema.jl:37 [inlined]
[12] schema
@ C:\Users\whee\.julia\packages\StatsModels\s9GMM\src\schema.jl:123 [inlined]
[13] schema(f::FormulaTerm{Term, Term}, data::NamedTuple{(:x, :y), Tuple{Vector{Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}}, Vect
or{Quantity{Int64, 𝐋, Unitful.FreeUnits{(m,), 𝐋, nothing}}}}} , hints::Dict{Symbol, Any})
@ StatsModels C:\Users\whee\.julia\packages\StatsModels\s9GMM\src\schema.jl:126
[14] ModelFrame(f::FormulaTerm{Term, Term}, data::NamedTuple{(:x, :y), Tuple{Vector{Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(m^-1,), 𝐋^-1, nothing}}},
Vector{Quantity{Int64, 𝐋, Unitful.FreeUnits{(m,), 𝐋, nothing}}}}} ; model::Type{LinearModel}, contrasts::Dict{Symbol, Any})
@ StatsModels C:\Users\whee\.julia\packages\StatsModels\s9GMM\src\modelframe.jl:81
[15] fit(::Type{LinearModel}, f::FormulaTerm{Term, Term}, data::DataFrame, args::Nothing; contrasts::Dict{Symbol, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ StatsModels C:\Users\whee\.julia\packages\StatsModels\s9GMM\src\statsmodel.jl:85
[16] fit
@ C:\Users\whee\.julia\packages\StatsModels\s9GMM\src\statsmodel.jl:78 [inlined]
[17] #lm#5
@ C:\Users\whee\.julia\packages\GLM\P0Ris\src\lm.jl:184 [inlined]
[18] lm (repeats 2 times)
@ C:\Users\whee\.julia\packages\GLM\P0Ris\src\lm.jl:184 [inlined]
[19] top-level scope
@ REPL[51]:1