Problème régression logistique

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Simon Pouil
Messages : 7
Enregistré le : 18 Fév 2018, 10:44

Problème régression logistique

Messagepar Simon Pouil » 22 Fév 2018, 13:02

Bonjour à toutes et à tous,

Je suis actuellement en post-doc et je travaille en aquaculture dans les tropiques. Sur l'espèce de poisson concernée il y a actuellement des problèmes dans la détermination du sexe. Le sexage des géniteurs comporte beaucoup d'erreurs ce qui nuit grandement au développement de la filière.

Pour répondre à cela, une expérimentation a été menée. Ainsi, des géniteurs ont été sexés avec une méthode scientifiquement fiable et une liste de critères morphologiques et comportemental a été établie sur chacun des individus.
Ainsi, pour un lot de géniteurs (sexés de façon fiable, n=37 mâles et n=192 femelles), j'ai un jeu de données regroupant 8 variables qualitatives à 2, 3 ou 5 modalités. Toutes les variables sont encodées par des lettres. J'ai opté pour une régression logistique afin d'établir la liste de critères pertinents à regarder pour les pisciculteurs afin de minimiser les erreurs de sexage. Mais comme vous allez le constater, je rencontre certaines difficultés.

1/ Description du jeu de données :

Code : Tout sélectionner

> summary(Black.Fish)
 Sex     Col.on.pec Col.under.pec Forehead Lower.jaw Form    Movement Tremor  Scale 
 F:192   BH: 56     BH:50         A :119   A : 69    B:203   B:218    A:208   B:210 
 M: 37   H :144     H :96         H : 16   H : 19    S: 26   S: 11    P: 21   S: 19 
         P : 29     P :83         L : 23   L : 16                                   
                                  VH:  8   VH: 19                                   
                                  VL: 63   VL:106                                   
> str(Black.Fish)
'data.frame':   229 obs. of  9 variables:
 $ Sex          : Factor w/ 2 levels "F","M": 1 1 1 1 1 1 1 1 1 1 ...
 $ Col.on.pec   : Factor w/ 3 levels "BH","H","P": 2 2 2 2 2 2 2 2 2 2 ...
 $ Col.under.pec: Factor w/ 3 levels "BH","H","P": 2 2 2 2 2 2 2 2 2 2 ...
 $ Forehead     : Factor w/ 5 levels "A","H","L","VH",..: 1 1 1 5 5 5 1 5 5 1 ...
 $ Lower.jaw    : Factor w/ 5 levels "A","H","L","VH",..: 5 5 5 3 3 5 5 5 3 1 ...
 $ Form         : Factor w/ 2 levels "B","S": 1 2 1 1 1 1 1 1 1 1 ...
 $ Movement     : Factor w/ 2 levels "B","S": 1 1 1 1 1 1 1 1 1 1 ...
 $ Tremor       : Factor w/ 2 levels "A","P": 1 1 1 1 1 1 1 1 1 1 ...


2/J'ai, en premier lieu, réalisé un test exact de Fisher chaque variable explicatives et ma variable réponse "Sex" :

Code : Tout sélectionner

>
> # "Col.on.pec" vs. "Sex"
> fisher.test(Black.Fish$Sex,Black.Fish$Col.on.pec)

   Fisher's Exact Test for Count Data

data:  Black.Fish$Sex and Black.Fish$Col.on.pec
p-value < 2.2e-16
alternative hypothesis: two.sided

>
> # "Col.under.pec" vs. "Sex"
> fisher.test(Black.Fish$Sex,Black.Fish$Col.under.pec)

   Fisher's Exact Test for Count Data

data:  Black.Fish$Sex and Black.Fish$Col.under.pec
p-value < 2.2e-16
alternative hypothesis: two.sided

>
> # "Forehead" vs. "Sex"
> fisher.test(Black.Fish$Sex,Black.Fish$Forehead)

   Fisher's Exact Test for Count Data

data:  Black.Fish$Sex and Black.Fish$Forehead
p-value < 2.2e-16
alternative hypothesis: two.sided

>
> # "Lower.jaw" vs. "Sex"
> fisher.test(Black.Fish$Sex,Black.Fish$Lower.jaw)

   Fisher's Exact Test for Count Data

data:  Black.Fish$Sex and Black.Fish$Lower.jaw
p-value < 2.2e-16
alternative hypothesis: two.sided

>
> # "Form" vs. "Sex"
> fisher.test(Black.Fish$Sex,Black.Fish$Form)

   Fisher's Exact Test for Count Data

data:  Black.Fish$Sex and Black.Fish$Form
p-value = 0.01054
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 0.0000000 0.7265123
sample estimates:
odds ratio
         0

>
> # "Movement" vs. "Sex"
> fisher.test(Black.Fish$Sex,Black.Fish$Movement)

   Fisher's Exact Test for Count Data

data:  Black.Fish$Sex and Black.Fish$Movement
p-value = 1
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 0.01134226 3.76550300
sample estimates:
odds ratio
  0.506775

>
> # "Tremor" vs. "Sex"
> fisher.test(Black.Fish$Sex,Black.Fish$Tremor)

   Fisher's Exact Test for Count Data

data:  Black.Fish$Sex and Black.Fish$Tremor
p-value = 7.614e-14
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
  14.94718 328.67409
sample estimates:
odds ratio
  57.36457


3/ Finalement, j'ai inclus dans mon modèles les variables explicatives retenues dépendantes du sexe par le test de Fisher :

Code : Tout sélectionner

> glm.ALL<-glm(Sex ~ Col.on.pec + Col.under.pec+Forehead+Lower.jaw+Form+Tremor+Scale, data=Black.Fish, family=binomial(logit))
Warning messages:
1: glm.fit: l'algorithme n'a pas convergé
2: glm.fit: des probabilités ont été ajustées numériquement à 0 ou 1
> summary(glm.ALL)

Call:
glm(formula = Sex ~ Col.on.pec + Col.under.pec + Forehead + Lower.jaw +
    Form + Tremor + Scale, family = binomial(logit), data = Black.Fish)

Deviance Residuals:
       Min          1Q      Median          3Q         Max 
-2.853e-05  -2.100e-08  -2.100e-08  -2.100e-08   3.717e-05 

Coefficients:
                 Estimate Std. Error z value Pr(>|z|)
(Intercept)    -2.468e+01  4.366e+04  -0.001    1.000
Col.on.pecH    -1.685e+01  1.019e+05   0.000    1.000
Col.on.pecP     2.748e+01  1.093e+05   0.000    1.000
Col.under.pecH -4.178e+01  6.106e+04  -0.001    0.999
Col.under.pecP  1.275e+00  4.695e+04   0.000    1.000
ForeheadH       1.323e+00  8.972e+04   0.000    1.000
ForeheadL       2.718e+01  1.135e+05   0.000    1.000
ForeheadVH     -1.070e+01  2.537e+05   0.000    1.000
ForeheadVL     -1.586e+01  1.149e+05   0.000    1.000
Lower.jawH      3.424e+01  1.974e+05   0.000    1.000
Lower.jawL      1.731e+01  1.201e+05   0.000    1.000
Lower.jawVH     4.640e+01  1.355e+05   0.000    1.000
Lower.jawVL    -1.085e+01  1.889e+05   0.000    1.000
FormS           1.955e-01  9.829e+04   0.000    1.000
TremorP         2.861e+01  1.048e+05   0.000    1.000
ScaleS          1.202e+01  2.017e+05   0.000    1.000

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2.0256e+02  on 228  degrees of freedom
Residual deviance: 7.0141e-09  on 213  degrees of freedom
AIC: 32

Number of Fisher Scoring iterations: 25


Le modèle ne converge pas, les valeurs des estimateurs sont très très mal estimées et du coup les p-values sont égales à 1 !

Il est évident que quelque chose dans ma démarche n'est pas bon. Quelqu'un serait-il à même de m'expliquer où sont mes erreurs ?
Je ne suis pas familier avec la régression logistique et malgré de nombreuses lectures beaucoup de choses m'échappent encore pour bien appréhender cette méthodologie statistique et éviter les erreurs (que j'ai commettre en nombre dans le cas présent :-)).

Je vous remercie par avance de votre aide.

Bonne fin de journée !

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: Problème régression logistique

Messagepar Eric Wajnberg » 22 Fév 2018, 16:26

Bonjour,

Vous êtes clairement en dehors de la thématique de ce forum qui n'est pas un forum de statistique, mais un forum sur R.

Rapidement, vous avez des erreurs standard énormes, ce qui est une signature (pathologique) d'une régression logistique alors que vous avez des probabilités (par modalité) à 0.0 ou 1.0, et du coup des logit qui partent à plus ou moins l'infini. Il existe plusieurs solutions. Celle recommandée par McCullagh & Nelder est d'utiliser une fonction de lien quasi-logistique. Il faut donc modifier la fonction de lien dans R. Ce qui est faisable, mais pas simple.

Mais, encore une fois, vous êtes hors sujet ici. Il faut poser votre question sur un forum de statistique.

Cordialement, Eric.

Simon Pouil
Messages : 7
Enregistré le : 18 Fév 2018, 10:44

Re: Problème régression logistique

Messagepar Simon Pouil » 23 Fév 2018, 02:14

Bonjour,

Etant donné que je ne savais pas si j'avais commis des erreurs au niveau de mon script R ou s'il s'agissait d'un problème purement statistique, il m'a paru pertinent de poser cette question sur ce forum. Ma question concerne d'ailleurs la compréhension d'une sortie R.

Je vous remercie toutefois de votre réponse.

Cordialement

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: Problème régression logistique

Messagepar Eric Wajnberg » 23 Fév 2018, 06:12

Simon Pouil a écrit : Ma question concerne d'ailleurs la compréhension d'une sortie R.

Votre question ne concerne pas la compréhension d'une sortie de R. Comme vous l'avez dit vous même, votre problème est que le modèle ne converge pas et que les valeurs sont très très mal estimées (sic). Vous auriez la même chose sur une autre logiciel.

Cordialement, Eric.

Simon Pouil
Messages : 7
Enregistré le : 18 Fév 2018, 10:44

Re: Problème régression logistique

Messagepar Simon Pouil » 23 Fév 2018, 10:12

Je vous remercie pour cette réponse.

Cordialement,

Simon

Simon Pouil
Messages : 7
Enregistré le : 18 Fév 2018, 10:44

Re: Problème régression logistique

Messagepar Simon Pouil » 23 Fév 2018, 10:49

Je vous prie de m'excuser pour le hors-sujet de ma question sur ce forum.

Votre réponse me permet toutefois d'y voir un peu plus clair.

Je reviendrai uniquement pour des questions purement relatives à R.

Bonne continuation.

Cordialement,

Simon

oussama zennati
Messages : 1
Enregistré le : 29 Oct 2018, 08:13

Re: Problème régression logistique

Messagepar oussama zennati » 06 Mai 2019, 17:59

Bonjour >monsieur Simon Pouil ,
j’espère que avez pu trouvé une solution a ce problème.
actuellement, je suis à ce stade et j'ai un régression logistique via la fonction glm qui ne converge pas. pouvez vous partager avec moi ce que vous avez utilisé pour dépasser ce problème.
par avance merci
cordialememnt


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité