{"word_count": 530, "character_count": 4582}
Un billet rapide pour reprendre un point qu'on a vu ce matin en cours STT5100 pour illustrer le test de Fisher. On va utiliser les données de prix d’appartements en Pologne (données pas mal utilisées dans mon ébauche de notes de cours)library(DALEX)data(apartments)with(data = apartments, boxplot(m2.price ~ district))On a envie de faire ici des regroupements de modalités (c'est d'ailleurs suggéré par la régression simple, 5 variables explicatives étant ici non significatives). Pour mieux voir, on peut réordonner les modalitésA = with(data = apartments, aggregate(m2.price,by=list(district),FUN=mean))A = A[order(A$x),]L = as.character(A$Group.1)apartments$district = factor(apartments$district, level=L)with(data = apartments, boxplot(m2.price ~ district))On va prendre ici le district le moins cher comme référence,reg=lm(m2.price ~ district, data=apartments)&#62; summary(reg)Coefficients:                    Estimate Std. Error t value Pr(&#62;|t|)    (Intercept)          2968.36      58.02  51.160   &#60;2e-16 ***districtBielany        17.38      84.16   0.207    0.836    districtPraga          26.45      85.12   0.311    0.756    districtUrsynow        42.01      82.65   0.508    0.611    districtBemowo         80.10      83.71   0.957    0.339    districtUrsus         102.01      82.25   1.240    0.215    districtZoliborz      829.59      83.94   9.884   &#60;2e-16 ***districtMokotow       887.10      81.86  10.837   &#60;2e-16 ***districtOchota        987.93      84.16  11.738   &#60;2e-16 ***districtSrodmiescie  2214.39      83.28  26.591   &#60;2e-16 ***---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 597.4 on 990 degrees of freedomMultiple R-squared:  0.5698,Adjusted R-squared:  0.5659 F-statistic: 145.7 on 9 and 990 DF,  p-value: &#60; 2.2e-16On peut tester si les 5 premières modalités sont nulles, ce qui est un test multiple, et on va utiliser le test de Ficher :library(car)linearHypothesis(reg, c("districtBielany = 0",                         "districtPraga = 0",                        "districtUrsynow = 0",                        "districtBemowo = 0",                        "districtUrsus = 0"))Linear hypothesis testModel 1: restricted modelModel 2: m2.price ~ district  Res.Df       RSS Df Sum of Sq      F Pr(&#62;F)1    995 354051715                           2    990 353269202  5    782513 0.4386 0.8217La statistique de Fisher est faible, et avec une p-value de 82%. On peut tenter le diable, et rajouter encore une modalitélibrary(car)linearHypothesis(reg, c("districtBielany = 0",                         "districtPraga = 0",                        "districtUrsynow = 0",                        "districtBemowo = 0",                        "districtUrsus = 0",                        "districtZoliborz = 0"))Linear hypothesis testModel 1: restricted modelModel 2: m2.price ~ district  Res.Df       RSS Df Sum of Sq      F    Pr(&#62;F)    1    996 405455409                                  2    990 353269202  6  52186207 24.374 &#60; 2.2e-16 ***---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Mais on a peut être été trop gourmand cette fois. On va regrouper les 6 premières modalités (et appeler A le regroupement de districts). Si on regarde les prix moyens, par districts, on obtientlevels(apartments$district) = c(rep("A",6),levels(apartments$district)[7:11])with(data = apartments, boxplot(m2.price ~ district))apartments$district = relevel(apartments$district,"Zoliborz")On recommence, en mettant le district le moins cher comme référence, et on veut tester si les deux suivants ont des coefficients nuls dans la régression linéaire.reg=lm(m2.price ~ district, data=apartments)linearHypothesis(reg, c("districtMokotow = 0",                        "districtOchota = 0"))Linear hypothesis testModel 1: restricted modelModel 2: m2.price ~ district  Res.Df       RSS Df Sum of Sq      F Pr(&#62;F)1    997 355292524                           2    995 354051715  2   1240809 1.7435 0.1754Avec une p-value de 17%, on peut accepter de regrouper les trois modalités ensemble. On a alors trois groupes de districts, dont les noms sont A, B et C. On obtient les boîtes à moustaches suivanteslevels(apartments$district) = c("B","A",rep("B",2),"C")apartments$district = relevel(apartments$district,"A")with(data = apartments, boxplot(m2.price ~ district))Je laisse les plus courageux vérifier, mais on a trois districts effectivement différents, et si le but est de prévoir le prix des logements, inutiles d'utiliser un découpage avec 10 modalités, un découpage avec 3 suffit !