Closed yoninazarathy closed 1 year ago
I think this is almost already supported. With https://github.com/JuliaStats/GLM.jl/pull/535, I can write
julia> X = [ones(10) randn(10)];
julia> y1 = X*ones(2) + randn(10)*0.1;
julia> y2 = X*ones(2) + randn(10)*0.1;
julia> myp = GLM.DensePredChol(X, false);
julia> myr1 = GLM.LmResp(y1);
julia> myr2 = GLM.LmResp(y2);
julia> fit!(LinearModel(myr1, myp, nothing))
LinearModel
Coefficients:
───────────────────────────────────────────────────────────────
Coef. Std. Error t Pr(>|t|) Lower 95% Upper 95%
───────────────────────────────────────────────────────────────
x1 0.976384 0.0449526 21.72 <1e-07 0.872723 1.08004
x2 0.977983 0.0427468 22.88 <1e-07 0.879409 1.07656
───────────────────────────────────────────────────────────────
julia> fit!(LinearModel(myr2, myp, nothing))
LinearModel
Coefficients:
───────────────────────────────────────────────────────────────
Coef. Std. Error t Pr(>|t|) Lower 95% Upper 95%
───────────────────────────────────────────────────────────────
x1 0.995871 0.0278513 35.76 <1e-09 0.931646 1.0601
x2 0.965657 0.0264846 36.46 <1e-09 0.904583 1.02673
───────────────────────────────────────────────────────────────
Thank you.
For
LinearModel
, it may be useful to have some sort of API which allows one to reapply the model to multiple right hand sides repeatedly (without redoing the internal QR or Cholesky decomposition or other pinv computation again).This can help performance when using the package for simulation with a fixed design matrix and multiple right hand sides.
My current workaround for this is of the form:
With this one can clearly just carry out the complete
LinearModel
fit just using elementaryLinearAlgebra
operations, still the support thatGLM.jl
gives to data frames, contrasts, and model queries is useful.