@@ -687,76 +687,15 @@ end
687687end
688688
689689@testset " Predict" begin
690- # Linear model
691- rng = StableRNG (123 )
692- X = rand (rng, 10 , 2 )
693- Y = rand (rng, 10 )
694-
695- lmpred = fit (LinearModel, X, Y)
696- @test predict (lmpred) == fitted (lmpred)
697-
698- newX = rand (rng, 5 , 2 )
699- newY = newX * coef (lmpred)
700- lmpred_pred1 = predict (lmpred, newX)
701- lmpred_pred2 = predict (lmpred, newX; interval= :confidence )
702- lmpred_pred3 = predict (lmpred, newX; interval= :prediction )
703- @test lmpred_pred1 == lmpred_pred2. prediction == lmpred_pred3. prediction ≈ newY
704- @test lmpred_pred2. upper ≈
705- [0.6170432517234414 , 0.6857915349758823 , 0.8644361267055548 ,
706- 0.2510551586658352 , 0.6280144618607879 ]
707- @test lmpred_pred2. lower ≈
708- [0.32609178249933063 , 0.41055748807994336 , 0.5523913320342061 ,
709- 0.14588615084888942 , 0.2619696605732852 ]
710- @test lmpred_pred3. upper ≈
711- [0.8217622514968357 , 0.8951782691056336 , 1.0631194540216677 ,
712- 0.5213302104184558 , 0.8123751878951413 ]
713- @test lmpred_pred3. lower ≈
714- [0.12137278272593627 , 0.20117075395019213 , 0.35370800471809305 ,
715- - 0.12438890090373123 , 0.07760893453893175 ]
716-
717- @test ndims (lmpred_pred1) == 1
718-
719- @test ndims (lmpred_pred2. prediction) == 1
720- @test ndims (lmpred_pred2. upper) == 1
721- @test ndims (lmpred_pred2. lower) == 1
722-
723- @test ndims (lmpred_pred3. prediction) == 1
724- @test ndims (lmpred_pred3. upper) == 1
725- @test ndims (lmpred_pred3. lower) == 1
726-
727- @test predict! (similar (Y, size (newX, 1 )), lmpred, newX) == predict (lmpred, newX)
728- @test predict! ((prediction= similar (Y, size (newX, 1 )),
729- lower= similar (Y, size (newX, 1 )),
730- upper= similar (Y, size (newX, 1 ))),
731- lmpred, newX, interval= :confidence ) ==
732- predict (lmpred, newX, interval= :confidence )
733- @test predict! ((prediction= similar (Y, size (newX, 1 )),
734- lower= similar (Y, size (newX, 1 )),
735- upper= similar (Y, size (newX, 1 ))),
736- lmpred, newX, interval= :prediction ) ==
737- predict (lmpred, newX, interval= :prediction )
738- @test_throws ArgumentError predict! ((prediction= similar (Y, size (newX, 1 )),
739- lower= similar (Y, size (newX, 1 )),
740- upper= similar (Y, size (newX, 1 ))), lmpred, newX)
741- @test_throws ArgumentError predict! (similar (Y, size (newX, 1 )), lmpred, newX,
742- interval= :confidence )
743- @test_throws ArgumentError predict! (similar (Y, size (newX, 1 )), lmpred, newX,
744- interval= :prediction )
745- @test_throws DimensionMismatch predict! ([1 ], lmpred, newX)
746- @test_throws DimensionMismatch predict! ((prediction= similar (Y, size (newX, 1 )),
747- lower= similar (Y, size (newX, 1 )),
748- upper= [1 ]),
749- lmpred, newX, interval= :confidence )
750-
751- # Binomial GLM with perfect fit
690+ # Binomial GLM
752691 rng = StableRNG (123 )
753692 X = rand (rng, 10 , 2 )
754693 Y = logistic .(X * [3 ; - 3 ])
755694
756695 gm11 = fit (GeneralizedLinearModel, X, Y, Binomial ())
757696 @test isapprox (predict (gm11), Y)
758697 @test predict (gm11) == fitted (gm11)
759-
698+
760699 newX = rand (rng, 5 , 2 )
761700 newY = logistic .(newX * coef (gm11))
762701 gm11_pred1 = predict (gm11, newX)
812751 @test isapprox (predict (gm12, newX, offset= newoff),
813752 logistic .(newX * coef (gm12) .+ newoff))
814753
754+
815755 # Prediction from DataFrames
816756 d = DataFrame (X, :auto )
817757 d. y = Y
868808 @test pred3. upper ≈ pred3. prediction + quantile (TDist (dof_residual (mm)), 0.975 )* sqrt .(diag (newX* vcov (mm)* newX' ) .+ deviance (mm)/ dof_residual (mm)) ≈
869809 [3.9288331595737196 , 4.077092463922373 , 4.762903743958081 , 3.82184595169028 , 4.034521019386702 ]
870810
811+ @test predict! (similar (Y, size (newX, 1 )), mm, newX) == predict (mm, newX)
812+ @test predict! ((prediction= similar (Y, size (newX, 1 )),
813+ lower= similar (Y, size (newX, 1 )),
814+ upper= similar (Y, size (newX, 1 ))),
815+ mm, newX, interval= :confidence ) ==
816+ predict (mm, newX, interval= :confidence )
817+ @test predict! ((prediction= similar (Y, size (newX, 1 )),
818+ lower= similar (Y, size (newX, 1 )),
819+ upper= similar (Y, size (newX, 1 ))),
820+ mm, newX, interval= :prediction ) ==
821+ predict (mm, newX, interval= :prediction )
822+ @test_throws ArgumentError predict! ((prediction= similar (Y, size (newX, 1 )),
823+ lower= similar (Y, size (newX, 1 )),
824+ upper= similar (Y, size (newX, 1 ))), mm, newX)
825+ @test_throws ArgumentError predict! (similar (Y, size (newX, 1 )), mm, newX,
826+ interval= :confidence )
827+ @test_throws ArgumentError predict! (similar (Y, size (newX, 1 )), mm, newX,
828+ interval= :prediction )
829+ @test_throws DimensionMismatch predict! ([1 ], mm, newX)
830+ @test_throws DimensionMismatch predict! ((prediction= similar (Y, size (newX, 1 )),
831+ lower= similar (Y, size (newX, 1 )),
832+ upper= [1 ]),
833+ mm, newX, interval= :confidence )
834+
835+
871836 # Prediction with dropcollinear (#409)
872837 x = [1.0 1.0
873838 1.0 2.0
0 commit comments