@@ -16,7 +16,7 @@ rng = MersenneTwister(seed)
1616
1717t = 10 * randn (rng, 30 )
1818
19-
19+ #=
2020@testset "Methods penalty functions: $(name)" for name in ("No", penalties...)
2121 tt = copy(t)
2222
133133 refit!(m1)
134134 @test all(coef(m1) .== β1)
135135end
136+ =#
137+
138+ @testset " M-estimator with penalty: Ridge" begin
139+ rtol = 1e-5
140+ pen = SquaredL2Penalty (λ)
141+
142+ kwargs = (; initial_scale= 1 )
143+ m0 = rlm (form, data, MEstimator {L2Loss} (); kwargs... )
144+ m1 = rlm (form, data, MEstimator {L2Loss} (); ridgeλ= λ, kwargs... )
145+
146+ @testset " solver method $(method) " for method in pen_methods
147+ if method === :fista
148+ rtol = 1e-2
149+ end
150+
151+ # Formula, dense and sparse entry
152+ @testset " data type: $(typeof (A)) " for (A, b) in data_tuples
153+ name = " rlm($(pen) ; method=$(method) ),\t "
154+ name *= if A== form; " formula" elseif A== X; " dense " else " sparse " end
155+
156+ m2 = rlm (A, b, pen; method= method, kwargs... )
157+
158+ @test all (isfinite .(coef (m2)))
159+
160+ VERBOSE && println (" \n\t\u 25CF $(name) " )
161+ VERBOSE && println (" rlm ridge : " , coef (m1))
162+ VERBOSE && println (" rlm($method ) $(pen) : " , coef (m2))
163+ @test isapprox (coef (m2), coef (m1); rtol= rtol)
164+
165+ # interface
166+ @testset " method: $(f) " for f in interface_methods
167+ # make sure the methods for IPODRegression give the same results as RobustLinearModel
168+ var1 = f (m1)
169+ var2 = f (m2)
170+ if f == hasformula
171+ # m1 is defined from a formula
172+ @test var2 == (A isa FormulaTerm)
173+ elseif f in (dof, dof_residual)
174+ # Ridge dof is smaller than the unpenalized regression
175+ # rlm with penalty dof is the same as the unpenalized rlm
176+ @test var2 == f (m0)
177+ elseif f in (dispersion, stderror, vcov, leverage)
178+ @test all (abs .(var2) .>= abs .(var1))
179+ elseif f in (leverage_weights,)
180+ @test all (abs .(var2) .<= abs .(var1))
181+ elseif f in (confint, )
182+ @test isapprox (var1, var2; rtol= 1e-1 )
183+ elseif f in (projectionmatrix, )
184+ continue
185+ else
186+ @test isapprox (var1, var2; rtol= rtol)
187+ end
188+ end
189+ end
190+ end
191+ end
192+
0 commit comments