Les posteurs les plus actifs de la semaine
Eric Wajnberg
 
zezima
 
Nik
 
margotte185
 
c@ssoulet
 
Coco
 
Ayana
 


Interprétation régression logistique binomiale

Voir le sujet précédent Voir le sujet suivant Aller en bas

Interprétation régression logistique binomiale

Message par MarionL le Mar 22 Aoû 2017 - 9:48

Bonjour,

On m'a conseillé de réaliser une régression logistique pour étudier ma variable à prédire qui est l'occupation de mes nichoirs en fonction de mes variables explicatives (année de pose, essence de l'arbre, type de nichoir, aire des milieux, etc.). Etant débutante avec R et n'ayant jamais réaliser ce type de test, je me suis basée sur la littérature et des exemples pour le réaliser. J'ai obtenu le script suivant:


Code:
> #regression logistique
>
> modele=glm(occupe~pose+nichoir+essence+culture+vigne+foret+friche+eau+haie+pelouse+urbain, data=t, family=binomial)
> print(modele)

Call:  glm(formula = occupe ~ pose + nichoir + essence + culture + vigne +
    foret + friche + eau + haie + pelouse + urbain, family = binomial,
    data = t)

Coefficients:
         (Intercept)              pose2016              pose2017  
          -9.389e+00             1.475e+00             1.260e+00  
   nichoirgobemouche          essenceAulne          essenceChene  
          -1.713e+01             1.363e-01            -3.092e-01  
       essenceCypres         essenceErable          essenceFrene  
           6.360e-01             1.824e+01             2.021e-01  
essencenon_identifie       essencePeuplier            essencePin  
           1.805e+01            -5.671e-01             8.488e-01  
     essenceRobinier          essenceSaule               culture  
          -8.236e-02            -1.704e+01             1.176e-05  
               vigne                 foret                friche  
           1.118e-05             9.674e-06             8.804e-07  
                 eau                  haie               pelouse  
           2.963e-06             3.871e-06             2.756e-05  
              urbain  
           9.872e-06  

Degrees of Freedom: 99 Total (i.e. Null);  78 Residual
Null Deviance:    138.6
Residual Deviance: 110.5 AIC: 154.5
> print(summary(modele))

Call:
glm(formula = occupe ~ pose + nichoir + essence + culture + vigne +
    foret + friche + eau + haie + pelouse + urbain, family = binomial,
    data = t)

Deviance Residuals:
     Min        1Q    Median        3Q       Max  
-2.26569  -0.99986   0.00001   0.88236   1.92481  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)
(Intercept)          -9.389e+00  1.696e+01  -0.554   0.5799
pose2016              1.475e+00  7.922e-01   1.862   0.0626
pose2017              1.260e+00  7.788e-01   1.618   0.1057
nichoirgobemouche    -1.713e+01  1.970e+03  -0.009   0.9931
essenceAulne          1.363e-01  4.419e+03   0.000   1.0000
essenceChene         -3.092e-01  1.671e+00  -0.185   0.8532
essenceCypres         6.360e-01  2.041e+00   0.312   0.7553
essenceErable         1.824e+01  3.956e+03   0.005   0.9963
essenceFrene          2.021e-01  1.712e+00   0.118   0.9060
essencenon_identifie  1.805e+01  3.956e+03   0.005   0.9964
essencePeuplier      -5.671e-01  1.928e+00  -0.294   0.7687
essencePin            8.488e-01  1.702e+00   0.499   0.6180
essenceRobinier      -8.236e-02  1.913e+00  -0.043   0.9657
essenceSaule         -1.704e+01  3.956e+03  -0.004   0.9966
culture               1.176e-05  2.223e-05   0.529   0.5968
vigne                 1.118e-05  2.180e-05   0.513   0.6079
foret                 9.674e-06  2.258e-05   0.428   0.6684
friche                8.804e-07  2.695e-05   0.033   0.9739
eau                   2.963e-06  2.543e-05   0.116   0.9073
haie                  3.871e-06  2.559e-05   0.151   0.8798
pelouse               2.756e-05  2.219e-05   1.242   0.2144
urbain                9.872e-06  2.235e-05   0.442   0.6587

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 138.63  on 99  degrees of freedom
Residual deviance: 110.51  on 78  degrees of freedom
AIC: 154.51

Number of Fisher Scoring iterations: 16

> p=predict(modele,type="response")
> class(modele)
[1] "glm" "lm"
> attributes(modele)
$names
 [1] "coefficients"      "residuals"         "fitted.values"    
 [4] "effects"           "R"                 "rank"            
 [7] "qr"                "family"            "linear.predictors"
[10] "deviance"          "aic"               "null.deviance"    
[13] "iter"              "weights"           "prior.weights"    
[16] "df.residual"       "df.null"           "y"                
[19] "converged"         "boundary"          "model"            
[22] "call"              "formula"           "terms"            
[25] "data"              "offset"            "control"          
[28] "method"            "contrasts"         "xlevels"          

$class
[1] "glm" "lm"

> chi2=modele$null.deviance - modele$deviance
> chi2
[1] 28.11459
> ddl=modele$df.null - modele$df.residual
> ddl
[1] 21
> pvalue=pchisq(chi2,ddl,lower.tail = F)
> pvalue
[1] 0.1369312
> ls()
 [1] "chi2"           "culture"        "ddl"            "eau"          
 [5] "err"            "essence"        "foret"          "friche"        
 [9] "glm"            "haie"           "mc"             "modele"        
[13] "modele.back"    "modele.forward" "modele.step"    "modele.stepw"  
[17] "modele.trivial" "nichoir"        "occupe"         "p"            
[21] "pelouse"        "pose"           "pred.moda"      "pred.proba"    
[25] "pvalue"         "reg"            "t"              "urbain"        
[29] "vigne"        
>
> pred.proba= predict(modele,newdata=t, type="response")
> pred.proba
           1            2            3            4            5
7.384810e-01 7.163054e-01 7.144246e-01 6.581104e-01 5.412045e-01
           6            7            8            9           10
3.019341e-01 2.477738e-01 3.593926e-01 5.442767e-01 6.134556e-01
          11           12           13           14           15
6.847416e-01 7.779130e-01 7.853442e-01 7.893950e-01 7.806005e-01
          16           17           18           19           20
9.278166e-01 8.411467e-01 7.757747e-01 7.035765e-01 7.993461e-01
          21           22           23           24           25
7.967043e-01 8.661627e-01 3.438110e-01 3.435579e-01 2.737438e-01
          26           27           28           29           30
1.000000e+00 3.152584e-01 2.350463e-08 2.536448e-08 5.207700e-01
          31           32           33           34           35
9.232104e-01 5.424428e-01 6.322602e-01 2.350463e-08 1.912494e-08
          36           37           38           39           40
2.954972e-01 1.912849e-08 3.262621e-01 3.150934e-01 3.120459e-08
          41           42           43           44           45
3.150261e-01 3.221958e-01 7.617667e-01 7.998330e-01 7.953887e-01
          46           47           48           49           50
6.125409e-01 3.866756e-01 3.932322e-01 5.240741e-01 2.735210e-01
          51           52           53           54           55
5.371963e-01 4.652132e-01 4.630229e-01 4.819648e-01 6.813364e-01
          56           57           58           59           60
4.099869e-01 6.857180e-01 6.820723e-01 6.785593e-01 6.744954e-01
          61           62           63           64           65
6.681321e-01 6.817345e-01 4.433281e-01 5.687021e-01 7.236564e-01
          66           67           68           69           70
3.991931e-01 4.394948e-01 4.154152e-01 6.194143e-01 4.828879e-01
          71           72           73           74           75
4.969552e-01 4.064456e-01 4.783118e-01 4.742883e-01 4.731478e-01
          76           77           78           79           80
7.405587e-01 4.709171e-01 5.072183e-01 6.144229e-01 4.258473e-01
          81           82           83           84           85
3.943886e-01 3.938319e-01 3.938319e-01 3.960044e-01 1.568531e-01
          86           87           88           89           90
1.692544e-01 6.694533e-01 6.680294e-01 1.910203e-01 1.934424e-01
          91           92           93           94           95
3.635878e-02 3.583720e-02 1.657003e-01 3.833232e-01 6.275010e-01
          96           97           98           99          100
5.136099e-01 7.364370e-01 1.000000e+00 4.297343e-01 1.757098e-01
> pred.moda=factor(ifelse(pred.proba>0.5, "occupe", "non_occupe"))
> pred.moda
         1          2          3          4          5          6
    occupe     occupe     occupe     occupe     occupe non_occupe
         7          8          9         10         11         12
non_occupe non_occupe     occupe     occupe     occupe     occupe
        13         14         15         16         17         18
    occupe     occupe     occupe     occupe     occupe     occupe
        19         20         21         22         23         24
    occupe     occupe     occupe     occupe non_occupe non_occupe
        25         26         27         28         29         30
non_occupe     occupe non_occupe non_occupe non_occupe     occupe
        31         32         33         34         35         36
    occupe     occupe     occupe non_occupe non_occupe non_occupe
        37         38         39         40         41         42
non_occupe non_occupe non_occupe non_occupe non_occupe non_occupe
        43         44         45         46         47         48
    occupe     occupe     occupe     occupe non_occupe non_occupe
        49         50         51         52         53         54
    occupe non_occupe     occupe non_occupe non_occupe non_occupe
        55         56         57         58         59         60
    occupe non_occupe     occupe     occupe     occupe     occupe
        61         62         63         64         65         66
    occupe     occupe non_occupe     occupe     occupe non_occupe
        67         68         69         70         71         72
non_occupe non_occupe     occupe non_occupe non_occupe non_occupe
        73         74         75         76         77         78
non_occupe non_occupe non_occupe     occupe non_occupe     occupe
        79         80         81         82         83         84
    occupe non_occupe non_occupe non_occupe non_occupe non_occupe
        85         86         87         88         89         90
non_occupe non_occupe     occupe     occupe non_occupe non_occupe
        91         92         93         94         95         96
non_occupe non_occupe non_occupe non_occupe     occupe     occupe
        97         98         99        100
    occupe     occupe non_occupe non_occupe
Levels: non_occupe occupe
> ls()
 [1] "chi2"           "culture"        "ddl"            "eau"          
 [5] "err"            "essence"        "foret"          "friche"        
 [9] "glm"            "haie"           "mc"             "modele"        
[13] "modele.back"    "modele.forward" "modele.step"    "modele.stepw"  
[17] "modele.trivial" "nichoir"        "occupe"         "p"            
[21] "pelouse"        "pose"           "pred.moda"      "pred.proba"    
[25] "pvalue"         "reg"            "t"              "urbain"        
[29] "vigne"        
> mc=table(t$occupe,pred.moda)
> class(mc)
[1] "table"
> mc
            pred.moda
             non_occupe occupe
  non_occupe         37     13
  occupe             14     36
>
> err=(mc[2,1]+mc[1.2])/sum(mc)
> err
[1] 0.51
> ls()
 [1] "chi2"           "culture"        "ddl"            "eau"          
 [5] "err"            "essence"        "foret"          "friche"        
 [9] "glm"            "haie"           "mc"             "modele"        
[13] "modele.back"    "modele.forward" "modele.step"    "modele.stepw"  
[17] "modele.trivial" "nichoir"        "occupe"         "p"            
[21] "pelouse"        "pose"           "pred.moda"      "pred.proba"    
[25] "pvalue"         "reg"            "t"              "urbain"        
[29] "vigne"        
> library(MASS)
> modele.back=stepAIC(modele,scope=list(lower="occupe~1", upper="occupe~pose+nichoir+essence+culture+vigne+haie+pelouse+friche+eau+urbain+foret"),direction="backward")
Start:  AIC=154.51
occupe ~ pose + nichoir + essence + culture + vigne + foret +
    friche + eau + haie + pelouse + urbain

          Df Deviance    AIC
- essence 10   119.48 143.48
- friche   1   110.52 152.52
- eau      1   110.53 152.53
- haie     1   110.54 152.54
- foret    1   110.75 152.75
- urbain   1   110.78 152.78
- vigne    1   110.90 152.90
- culture  1   110.92 152.92
- pose     2   114.46 154.46
<none>         110.52 154.51
- nichoir  1   113.77 155.77
- pelouse  1   113.85 155.85

Step:  AIC=143.48
occupe ~ pose + nichoir + culture + vigne + foret + friche +
    eau + haie + pelouse + urbain

          Df Deviance    AIC
- friche   1   119.48 141.48
- haie     1   119.52 141.52
- eau      1   119.52 141.52
- foret    1   120.23 142.24
- urbain   1   120.58 142.58
- vigne    1   120.65 142.65
- pose     2   122.65 142.65
- culture  1   120.91 142.91
<none>         119.48 143.48
- pelouse  1   123.56 145.56
- nichoir  1   124.03 146.03

Step:  AIC=141.48
occupe ~ pose + nichoir + culture + vigne + foret + eau + haie +
    pelouse + urbain

          Df Deviance    AIC
- eau      1   119.54 139.54
- haie     1   119.54 139.54
- foret    1   120.67 140.67
- pose     2   122.83 140.83
- urbain   1   121.08 141.08
- vigne    1   121.45 141.46
<none>         119.48 141.48
- culture  1   121.66 141.66
- nichoir  1   124.03 144.03
- pelouse  1   124.89 144.88

Step:  AIC=139.54
occupe ~ pose + nichoir + culture + vigne + foret + haie + pelouse +
    urbain

          Df Deviance    AIC
- haie     1   119.56 137.56
- pose     2   122.83 138.83
- foret    1   121.17 139.17
<none>         119.54 139.54
- urbain   1   122.15 140.15
- vigne    1   123.22 141.22
- culture  1   123.51 141.51
- nichoir  1   124.06 142.06
- pelouse  1   128.38 146.38

Step:  AIC=137.56
occupe ~ pose + nichoir + culture + vigne + foret + pelouse +
    urbain

          Df Deviance    AIC
- foret    1   121.18 137.18
<none>         119.56 137.56
- pose     2   123.58 137.58
- urbain   1   122.40 138.40
- vigne    1   123.56 139.56
- culture  1   123.72 139.72
- nichoir  1   124.16 140.16
- pelouse  1   128.47 144.47

Step:  AIC=137.18
occupe ~ pose + nichoir + culture + vigne + pelouse + urbain

          Df Deviance    AIC
- urbain   1   122.42 136.42
- pose     2   124.84 136.84
<none>         121.18 137.18
- culture  1   124.52 138.52
- vigne    1   124.61 138.61
- nichoir  1   126.24 140.24
- pelouse  1   129.55 143.55

Step:  AIC=136.42
occupe ~ pose + nichoir + culture + vigne + pelouse

          Df Deviance    AIC
- pose     2   125.79 135.79
<none>         122.42 136.42
- culture  1   124.55 136.55
- vigne    1   124.79 136.79
- nichoir  1   127.50 139.50
- pelouse  1   129.66 141.66

Step:  AIC=135.79
occupe ~ nichoir + culture + vigne + pelouse

          Df Deviance    AIC
- vigne    1   127.38 135.38
<none>         125.79 135.79
- culture  1   127.97 135.97
- nichoir  1   130.45 138.45
- pelouse  1   130.46 138.46

Step:  AIC=135.38
occupe ~ nichoir + culture + pelouse

          Df Deviance    AIC
- culture  1   128.09 134.09
<none>         127.38 135.38
- pelouse  1   130.56 136.56
- nichoir  1   133.07 139.07

Step:  AIC=134.09
occupe ~ nichoir + pelouse

          Df Deviance    AIC
<none>         128.09 134.09
- pelouse  1   131.44 135.44
- nichoir  1   134.14 138.14
> modele.back

Call:  glm(formula = occupe ~ nichoir + pelouse, family = binomial,
    data = t)

Coefficients:
      (Intercept)  nichoirgobemouche            pelouse  
       -1.202e-01         -1.645e+01          8.020e-06  

Degrees of Freedom: 99 Total (i.e. Null);  97 Residual
Null Deviance:    138.6
Residual Deviance: 128.1 AIC: 134.1
>
>
> modele.trivial=glm(occupe~1,data=t,family=binomial)
> modele.forward=stepAIC(modele.trivial,scope=list(lower="occupe~1", upper="occupe~pose+nichoir+essence+culture+vigne+foret+haie+pelouse+friche+eau+urbain"),direction="forward")
Start:  AIC=140.63
occupe ~ 1

          Df Deviance    AIC
+ nichoir  1   131.44 135.44
+ eau      1   133.63 137.63
+ pelouse  1   134.14 138.14
<none>         138.63 140.63
+ culture  1   137.27 141.27
+ urbain   1   137.86 141.86
+ foret    1   137.94 141.94
+ friche   1   138.42 142.42
+ haie     1   138.52 142.52
+ vigne    1   138.54 142.54
+ pose     2   137.87 143.87
+ essence 10   128.36 150.36

Step:  AIC=135.43
occupe ~ nichoir

          Df Deviance    AIC
+ pelouse  1   128.09 134.09
+ eau      1   128.99 134.99
<none>         131.44 135.44
+ culture  1   130.56 136.56
+ foret    1   131.04 137.04
+ urbain   1   131.21 137.21
+ friche   1   131.29 137.29
+ vigne    1   131.30 137.30
+ haie     1   131.38 137.38
+ pose     2   130.42 138.42
+ essence 10   123.12 147.12

Step:  AIC=134.09
occupe ~ nichoir + pelouse

          Df Deviance    AIC
+ eau      1   125.83 133.83
<none>         128.09 134.09
+ pose     2   125.12 135.12
+ foret    1   127.38 135.38
+ culture  1   127.38 135.38
+ friche   1   127.87 135.87
+ urbain   1   127.93 135.93
+ vigne    1   127.97 135.97
+ haie     1   128.08 136.08
+ essence 10   116.57 142.57

Step:  AIC=133.83
occupe ~ nichoir + pelouse + eau

          Df Deviance    AIC
<none>         125.83 133.83
+ foret    1   125.12 135.12
+ culture  1   125.33 135.33
+ pose     2   123.48 135.48
+ haie     1   125.69 135.69
+ friche   1   125.73 135.73
+ urbain   1   125.76 135.76
+ vigne    1   125.80 135.80
+ essence 10   115.97 143.97
> modele.forward

Call:  glm(formula = occupe ~ nichoir + pelouse + eau, family = binomial,
    data = t)

Coefficients:
      (Intercept)  nichoirgobemouche            pelouse                eau  
        8.893e-01         -1.599e+01          8.116e-06         -1.698e-05  

Degrees of Freedom: 99 Total (i.e. Null);  96 Residual
Null Deviance:    138.6
Residual Deviance: 125.8 AIC: 133.8

Si j'ai bien compris après sélection des meilleurs variables par AIC, mes variables "pelouse" et "nichoir" sont celles qui expliquera au mieux mon occupation ? Et je dois donc refaire une régression logistique à partir de ces variables ?

Mais n'étant pas une grande connaisseuse, je suis perdue dans la masse d'information .. Je n'arrive pas à comprendre ou sont mes résultats et comment les interpréter.
Il y a beaucoup à lire mais cela m'éclairerait énormément, si quelqu'un me venait en aide.

Vraiment merci d'avance.

Marion

MarionL

Nombre de messages : 5
Date d'inscription : 18/08/2017

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Interprétation régression logistique binomiale

Message par Eric Wajnberg le Mar 22 Aoû 2017 - 10:08

Hello,

Oui, c'est moi qui vous ais conseillé une régression logistique.

On progresse.

Il y a deux choses que vous devriez faire à présent :

1) Lancer la commande anova(modele, test="Chisq"). Ceci vous donnera des tests de rapport de vraisemblance par facteur, et répondra à votre question de savoir quel facteur est significatif ou pas, comme une ANOVA.

2) Dans le summary que vous demandez, vous constatez "(Dispersion parameter for binomial family taken to be 1)". C'est imposé par l'ajustement, mais c'est peut-être faux. Il faudrait ré-ajuster le modèle avec "family = quasibinomial" plutôt que "family = binomial". Dans ce cas, le paramètre de dispersion n'est plus fixé à 1, mais ajusté à partir des données. Il faut s'assurer que ce coefficient reste proche de (ou inférieur à) 1.

Ensuite, il y a effectivement la recherche du modèle le plus parcimonieux, etc, et un critère d'AIC peut faire l'affaire, si nécessaire. Mais ce n'est pas spécifique à la régression logistique.

HTH, Eric.
avatar
Eric Wajnberg

Nombre de messages : 694
Date d'inscription : 14/09/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Interprétation régression logistique binomiale

Message par MarionL le Mar 22 Aoû 2017 - 11:48

Merci pour la réponse !

J'ai donc effectuer une nouvelle régression avec le réajustement que vous m'avez conseillé et j'ai réaliser l'ANOVA par la suite. J'ai obtenu le script suivant :
Code:
> modele=glm(occupe~pose+nichoir+essence+culture+vigne+foret+friche+eau+haie+pelouse+urbain, data=t, family=quasibinomial)
> print(modele)

Call:  glm(formula = occupe ~ pose + nichoir + essence + culture + vigne +
    foret + friche + eau + haie + pelouse + urbain, family = quasibinomial,
    data = t)

Coefficients:
        (Intercept)              pose2016              pose2017 
          -9.389e+00            1.475e+00            1.260e+00 
  nichoirgobemouche          essenceAulne          essenceChene 
          -1.713e+01            1.363e-01            -3.092e-01 
      essenceCypres        essenceErable          essenceFrene 
          6.360e-01            1.824e+01            2.021e-01 
essencenon_identifie      essencePeuplier            essencePin 
          1.805e+01            -5.671e-01            8.488e-01 
    essenceRobinier          essenceSaule              culture 
          -8.236e-02            -1.704e+01            1.176e-05 
              vigne                foret                friche 
          1.118e-05            9.674e-06            8.804e-07 
                eau                  haie              pelouse 
          2.963e-06            3.871e-06            2.756e-05 
              urbain 
          9.872e-06 

Degrees of Freedom: 99 Total (i.e. Null);  78 Residual
Null Deviance:       138.6
Residual Deviance: 110.5    AIC: NA
> print(summary(modele))

Call:
glm(formula = occupe ~ pose + nichoir + essence + culture + vigne +
    foret + friche + eau + haie + pelouse + urbain, family = quasibinomial,
    data = t)

Deviance Residuals:
    Min        1Q    Median        3Q      Max 
-2.26569  -0.99986  0.00001  0.88236  1.92481 

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)
(Intercept)          -9.389e+00  1.886e+01  -0.498    0.620
pose2016              1.475e+00  8.810e-01  1.675    0.098
pose2017              1.260e+00  8.661e-01  1.455    0.150
nichoirgobemouche    -1.713e+01  2.190e+03  -0.008    0.994
essenceAulne          1.363e-01  4.915e+03  0.000    1.000
essenceChene        -3.092e-01  1.859e+00  -0.166    0.868
essenceCypres        6.360e-01  2.269e+00  0.280    0.780
essenceErable        1.824e+01  4.400e+03  0.004    0.997
essenceFrene          2.021e-01  1.903e+00  0.106    0.916
essencenon_identifie  1.805e+01  4.400e+03  0.004    0.997
essencePeuplier      -5.671e-01  2.145e+00  -0.264    0.792
essencePin            8.488e-01  1.893e+00  0.448    0.655
essenceRobinier      -8.236e-02  2.128e+00  -0.039    0.969
essenceSaule        -1.704e+01  4.400e+03  -0.004    0.997
culture              1.176e-05  2.472e-05  0.476    0.636
vigne                1.118e-05  2.424e-05  0.461    0.646
foret                9.674e-06  2.511e-05  0.385    0.701
friche                8.804e-07  2.997e-05  0.029    0.977
eau                  2.963e-06  2.828e-05  0.105    0.917
haie                  3.871e-06  2.846e-05  0.136    0.892
pelouse              2.756e-05  2.468e-05  1.117    0.268
urbain                9.872e-06  2.486e-05  0.397    0.692

(Dispersion parameter for quasibinomial family taken to be 1.236706)

    Null deviance: 138.63  on 99  degrees of freedom
Residual deviance: 110.51  on 78  degrees of freedom
AIC: NA

Number of Fisher Scoring iterations: 16

>
> p=predict(modele,type="response")
> class(modele)
[1] "glm" "lm"
> attributes(modele)
$names
 [1] "coefficients"      "residuals"        "fitted.values"   
 [4] "effects"          "R"                "rank"           
 [7] "qr"                "family"            "linear.predictors"
[10] "deviance"          "aic"              "null.deviance"   
[13] "iter"              "weights"          "prior.weights"   
[16] "df.residual"      "df.null"          "y"               
[19] "converged"        "boundary"          "model"           
[22] "call"              "formula"          "terms"           
[25] "data"              "offset"            "control"         
[28] "method"            "contrasts"        "xlevels"         

$class
[1] "glm" "lm"

> chi2=modele$null.deviance - modele$deviance
> chi2
[1] 28.11459
> ddl=modele$df.null - modele$df.residual
> ddl
[1] 21
> pvalue=pchisq(chi2,ddl,lower.tail = F)
> pvalue
[1] 0.1369312
> ls()
 [1] "chi2"          "culture"        "ddl"         
 [4] "eau"            "err"            "essence"     
 [7] "foret"          "friche"        "glm"         
[10] "haie"          "mc"            "modele"       
[13] "modele.back"    "modele.forward" "modele.step" 
[16] "modele.stepw"  "modele.trivial" "nichoir"     
[19] "occupe"        "p"              "pelouse"     
[22] "pose"          "pred.moda"      "pred.proba"   
[25] "pvalue"        "reg"            "t"           
[28] "urbain"        "vigne"       
>
> pred.proba= predict(modele,newdata=t, type="response")
> pred.proba
          1            2            3            4            5
7.384810e-01 7.163054e-01 7.144246e-01 6.581104e-01 5.412045e-01
          6            7            8            9          10
3.019341e-01 2.477738e-01 3.593926e-01 5.442767e-01 6.134556e-01
          11          12          13          14          15
6.847416e-01 7.779130e-01 7.853442e-01 7.893950e-01 7.806005e-01
          16          17          18          19          20
9.278166e-01 8.411467e-01 7.757747e-01 7.035765e-01 7.993461e-01
          21          22          23          24          25
7.967043e-01 8.661627e-01 3.438110e-01 3.435579e-01 2.737438e-01
          26          27          28          29          30
1.000000e+00 3.152584e-01 2.350463e-08 2.536448e-08 5.207700e-01
          31          32          33          34          35
9.232104e-01 5.424428e-01 6.322602e-01 2.350463e-08 1.912494e-08
          36          37          38          39          40
2.954972e-01 1.912849e-08 3.262621e-01 3.150934e-01 3.120459e-08
          41          42          43          44          45
3.150261e-01 3.221958e-01 7.617667e-01 7.998330e-01 7.953887e-01
          46          47          48          49          50
6.125409e-01 3.866756e-01 3.932322e-01 5.240741e-01 2.735210e-01
          51          52          53          54          55
5.371963e-01 4.652132e-01 4.630229e-01 4.819648e-01 6.813364e-01
          56          57          58          59          60
4.099869e-01 6.857180e-01 6.820723e-01 6.785593e-01 6.744954e-01
          61          62          63          64          65
6.681321e-01 6.817345e-01 4.433281e-01 5.687021e-01 7.236564e-01
          66          67          68          69          70
3.991931e-01 4.394948e-01 4.154152e-01 6.194143e-01 4.828879e-01
          71          72          73          74          75
4.969552e-01 4.064456e-01 4.783118e-01 4.742883e-01 4.731478e-01
          76          77          78          79          80
7.405587e-01 4.709171e-01 5.072183e-01 6.144229e-01 4.258473e-01
          81          82          83          84          85
3.943886e-01 3.938319e-01 3.938319e-01 3.960044e-01 1.568531e-01
          86          87          88          89          90
1.692544e-01 6.694533e-01 6.680294e-01 1.910203e-01 1.934424e-01
          91          92          93          94          95
3.635878e-02 3.583720e-02 1.657003e-01 3.833232e-01 6.275010e-01
          96          97          98          99          100
5.136099e-01 7.364370e-01 1.000000e+00 4.297343e-01 1.757098e-01
> pred.moda=factor(ifelse(pred.proba>0.5, "occupe", "non_occupe"))
> pred.moda
        1          2          3          4          5          6
    occupe    occupe    occupe    occupe    occupe non_occupe
        7          8          9        10        11        12
non_occupe non_occupe    occupe    occupe    occupe    occupe
        13        14        15        16        17        18
    occupe    occupe    occupe    occupe    occupe    occupe
        19        20        21        22        23        24
    occupe    occupe    occupe    occupe non_occupe non_occupe
        25        26        27        28        29        30
non_occupe    occupe non_occupe non_occupe non_occupe    occupe
        31        32        33        34        35        36
    occupe    occupe    occupe non_occupe non_occupe non_occupe
        37        38        39        40        41        42
non_occupe non_occupe non_occupe non_occupe non_occupe non_occupe
        43        44        45        46        47        48
    occupe    occupe    occupe    occupe non_occupe non_occupe
        49        50        51        52        53        54
    occupe non_occupe    occupe non_occupe non_occupe non_occupe
        55        56        57        58        59        60
    occupe non_occupe    occupe    occupe    occupe    occupe
        61        62        63        64        65        66
    occupe    occupe non_occupe    occupe    occupe non_occupe
        67        68        69        70        71        72
non_occupe non_occupe    occupe non_occupe non_occupe non_occupe
        73        74        75        76        77        78
non_occupe non_occupe non_occupe    occupe non_occupe    occupe
        79        80        81        82        83        84
    occupe non_occupe non_occupe non_occupe non_occupe non_occupe
        85        86        87        88        89        90
non_occupe non_occupe    occupe    occupe non_occupe non_occupe
        91        92        93        94        95        96
non_occupe non_occupe non_occupe non_occupe    occupe    occupe
        97        98        99        100
    occupe    occupe non_occupe non_occupe
Levels: non_occupe occupe
> ls()
 [1] "chi2"          "culture"        "ddl"         
 [4] "eau"            "err"            "essence"     
 [7] "foret"          "friche"        "glm"         
[10] "haie"          "mc"            "modele"       
[13] "modele.back"    "modele.forward" "modele.step" 
[16] "modele.stepw"  "modele.trivial" "nichoir"     
[19] "occupe"        "p"              "pelouse"     
[22] "pose"          "pred.moda"      "pred.proba"   
[25] "pvalue"        "reg"            "t"           
[28] "urbain"        "vigne"       
> mc=table(t$occupe,pred.moda)
> class(mc)
[1] "table"
> mc
            pred.moda
            non_occupe occupe
  non_occupe        37    13
  occupe            14    36
>
> err=(mc[2,1]+mc[1.2])/sum(mc)
> err
[1] 0.51
> ls()
 [1] "chi2"          "culture"        "ddl"         
 [4] "eau"            "err"            "essence"     
 [7] "foret"          "friche"        "glm"         
[10] "haie"          "mc"            "modele"       
[13] "modele.back"    "modele.forward" "modele.step" 
[16] "modele.stepw"  "modele.trivial" "nichoir"     
[19] "occupe"        "p"              "pelouse"     
[22] "pose"          "pred.moda"      "pred.proba"   
[25] "pvalue"        "reg"            "t"           
[28] "urbain"        "vigne"       
> library(MASS)
> modele.back=stepAIC(modele,scope=list(lower="occupe~1", upper="occupe~pose+nichoir+essence+culture+vigne+haie+pelouse+friche+eau+urbain+foret"),direction="backward")
Error in stepAIC(modele, scope = list(lower = "occupe~1", upper = "occupe~pose+nichoir+essence+culture+vigne+haie+pelouse+friche+eau+urbain+foret"),  :
  AIC n'est pas défini pour ce modèle, 'stepAIC' ne peut poursuivre
> modele.back

Call:  glm(formula = occupe ~ nichoir + pelouse, family = binomial,
    data = t)

Coefficients:
      (Intercept)  nichoirgobemouche            pelouse 
      -1.202e-01        -1.645e+01          8.020e-06 

Degrees of Freedom: 99 Total (i.e. Null);  97 Residual
Null Deviance:       138.6
Residual Deviance: 128.1    AIC: 134.1
>
>
> modele.trivial=glm(occupe~1,data=t,family=binomial)
> modele.forward=stepAIC(modele.trivial,scope=list(lower="occupe~1", upper="occupe~pose+nichoir+essence+culture+vigne+foret+haie+pelouse+friche+eau+urbain"),direction="forward")
Start:  AIC=140.63
occupe ~ 1

          Df Deviance    AIC
+ nichoir  1  131.44 135.44
+ eau      1  133.63 137.63
+ pelouse  1  134.14 138.14
<none>        138.63 140.63
+ culture  1  137.27 141.27
+ urbain  1  137.86 141.86
+ foret    1  137.94 141.94
+ friche  1  138.42 142.42
+ haie    1  138.52 142.52
+ vigne    1  138.54 142.54
+ pose    2  137.87 143.87
+ essence 10  128.36 150.36

Step:  AIC=135.43
occupe ~ nichoir

          Df Deviance    AIC
+ pelouse  1  128.09 134.09
+ eau      1  128.99 134.99
<none>        131.44 135.44
+ culture  1  130.56 136.56
+ foret    1  131.04 137.04
+ urbain  1  131.21 137.21
+ friche  1  131.29 137.29
+ vigne    1  131.30 137.30
+ haie    1  131.38 137.38
+ pose    2  130.42 138.42
+ essence 10  123.12 147.12

Step:  AIC=134.09
occupe ~ nichoir + pelouse

          Df Deviance    AIC
+ eau      1  125.83 133.83
<none>        128.09 134.09
+ pose    2  125.12 135.12
+ foret    1  127.38 135.38
+ culture  1  127.38 135.38
+ friche  1  127.87 135.87
+ urbain  1  127.93 135.93
+ vigne    1  127.97 135.97
+ haie    1  128.08 136.08
+ essence 10  116.57 142.57

Step:  AIC=133.83
occupe ~ nichoir + pelouse + eau

          Df Deviance    AIC
<none>        125.83 133.83
+ foret    1  125.12 135.12
+ culture  1  125.33 135.33
+ pose    2  123.48 135.48
+ haie    1  125.69 135.69
+ friche  1  125.73 135.73
+ urbain  1  125.76 135.76
+ vigne    1  125.80 135.80
+ essence 10  115.97 143.97
> modele.forward

Call:  glm(formula = occupe ~ nichoir + pelouse + eau, family = binomial,
    data = t)

Coefficients:
      (Intercept)  nichoirgobemouche            pelouse 
        8.893e-01        -1.599e+01          8.116e-06 
              eau 
      -1.698e-05 

Degrees of Freedom: 99 Total (i.e. Null);  96 Residual
Null Deviance:       138.6
Residual Deviance: 125.8    AIC: 133.8
> modele.stepw=glm(occupe~1,data=t,family=binomial)
> modele.step=stepAIC(modele.stepw,scope=list(lower="occupe~1", upper="occupe~pose+nichoir+essence+culture+vigne+foret+haie+pelouse+friche+eau+urbain"),direction="both")
Start:  AIC=140.63
occupe ~ 1

          Df Deviance    AIC
+ nichoir  1  131.44 135.44
+ eau      1  133.63 137.63
+ pelouse  1  134.14 138.14
<none>        138.63 140.63
+ culture  1  137.27 141.27
+ urbain  1  137.86 141.86
+ foret    1  137.94 141.94
+ friche  1  138.42 142.42
+ haie    1  138.52 142.52
+ vigne    1  138.54 142.54
+ pose    2  137.87 143.87
+ essence 10  128.36 150.36

Step:  AIC=135.43
occupe ~ nichoir

          Df Deviance    AIC
+ pelouse  1  128.09 134.09
+ eau      1  128.99 134.99
<none>        131.44 135.44
+ culture  1  130.56 136.56
+ foret    1  131.04 137.04
+ urbain  1  131.21 137.21
+ friche  1  131.29 137.29
+ vigne    1  131.30 137.30
+ haie    1  131.38 137.38
+ pose    2  130.42 138.42
- nichoir  1  138.63 140.63
+ essence 10  123.12 147.12

Step:  AIC=134.09
occupe ~ nichoir + pelouse

          Df Deviance    AIC
+ eau      1  125.83 133.83
<none>        128.09 134.09
+ pose    2  125.12 135.12
+ foret    1  127.38 135.38
+ culture  1  127.38 135.38
- pelouse  1  131.44 135.44
+ friche  1  127.87 135.87
+ urbain  1  127.93 135.93
+ vigne    1  127.97 135.97
+ haie    1  128.08 136.08
- nichoir  1  134.14 138.14
+ essence 10  116.57 142.57

Step:  AIC=133.83
occupe ~ nichoir + pelouse + eau

          Df Deviance    AIC
<none>        125.83 133.83
- eau      1  128.09 134.09
- pelouse  1  128.99 134.99
+ foret    1  125.12 135.12
+ culture  1  125.33 135.33
+ pose    2  123.48 135.48
+ haie    1  125.69 135.69
+ friche  1  125.73 135.73
+ urbain  1  125.76 135.76
+ vigne    1  125.80 135.80
- nichoir  1  129.92 135.92
+ essence 10  115.97 143.97
>
> anova(modele, test = "Chisq")
Analysis of Deviance Table

Model: quasibinomial, link: logit

Response: occupe

Terms added sequentially (first to last)


        Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL                      99    138.63       
pose    2  0.7573        97    137.87  0.73627
nichoir  1  7.4518        96    130.42  0.01410
essence 10  8.6237        86    121.80  0.72798
culture  1  0.1801        85    121.62  0.70274
vigne    1  0.0061        84    121.61  0.94398
foret    1  0.2295        83    121.38  0.66663
friche  1  0.8177        82    120.56  0.41614
eau      1  2.2168        81    118.35  0.18062
haie    1  0.1000        80    118.25  0.77613
pelouse  1  7.4698        79    110.78  0.01398
urbain  1  0.2618        78    110.52  0.64546

Au vu des résultats, je peux donc conclure que le test est significatif (H0 est rejeté) pour les facteur pelouse et nichoir. Donc ce sont ces deux facteurs qui peuvent expliquer l'occupation de mes nichoirs si j'ai bien compris ?

Est-il utile de réaliser le même test avec le modèle parcimonieux ? Ou est-ce que j'ai répondu à ma question de base ?

MarionL

Nombre de messages : 5
Date d'inscription : 18/08/2017

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Interprétation régression logistique binomiale

Message par Eric Wajnberg le Mar 22 Aoû 2017 - 12:27

Avec family=quasibinomial, vous obtenez un paramètre de dispersion de 1.236706, ce qui est propre (proche de 1). Vos données semblent effectivement coller avec une loi binomiale.

Un point technique cependant, dans le cas de family=quasibinomial, la théorie recommande un test F plutôt qu'un test de chi2, i.e., avec anova(modele, test="F"). (voir la doc on-line de la fonction anova.glm). Mais ça ne changera pas grand-chose dans votre cas.

Pour le reste, oui, les facteurs pelouse et nichoir sont les seuls qui sont significatifs, apparement. A présent :

1) La recherche du modèle le plus parcimonieux est un choix ou non de votre part, pas une obligation. La logique ici, effectivement, serait de reprendre le modèle avec ces deux seuls facteurs pris en compte (et la même démarche de test), mais dans ce cas, des facteurs qui n'étaient pas significatifs peuvent le devenir, si  vous tester l'effet de leur ajout, etc. Il y là donc une procédure itérative à réaliser, avec une série d'ajouts et de rejets, jusqu'à ce que ceci se stabilise. Je fais généralement ça à la main (avec des fonctions persos), mais il y a des packages qui font ça sous R (par exemple le package "MuMIn"). A vous de voir.

2) Vous n'avez rentré que les effets principaux dans votre modèle, mais vous pourriez être intéressée par les interactions également, notamment, évidement, par l'interaction pelouse x nichoir (entre d'autres possibles). Vous pouvez aussi tester les interactions avec la même démarche que ce que vous avez fait.

HTH, Eric.
avatar
Eric Wajnberg

Nombre de messages : 694
Date d'inscription : 14/09/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Interprétation régression logistique binomiale

Message par MarionL le Mar 22 Aoû 2017 - 12:32

Merci pour tous vos conseils. Vous m'avez grandement aidé.

Je vais voir maintenant avec mes responsables si je pousse les tests plus loin avec ce que vous m'avez conseillé.

En tout cas, encore merci !

Marion

MarionL

Nombre de messages : 5
Date d'inscription : 18/08/2017

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Interprétation régression logistique binomiale

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum