bonjour,
Grace a une regression logistique, on obtient p(s|F=N), p(s|F=O) et tout et tout. Ensuite, on doit choisir une catégorie de reférence, au hasard les personnes S (S pour sain). Puis on calcule un OR pour le C et un OR pour les MS, c'est ca ?
oui, ça me semble correct.
La regression polytomique fait ensuite l'hypothèse que l'OR est constant entre les colonnes et prend donc un OR "moyenné". Donc si on fait la moyenne entre les deux OR (0.4 et 0.26), on arrive a 0.33 c'est à dire pas tres loin du exp(-0.9986)=0.36 trouvé par la régression polytomique.
C'est ca, j'ai bon ?
il semble, ... c’est ce qui est utilisé dans les autres logiciels (ex. STATA, SPSS). par contre, je n'ai pas eu le temps de le démontrer ... :(
… si c’est démontrable (à vérifier ?)
Après, je pense que le reste de tes problèmes vient du choix du type de modèle.
modèle de type 1 : logit(P(Y<=i)) = a(i) + bX
modèle de type 2 : logit(P(Y<=i)) = a(i) + b(i)X
la relation entre P(Y<=i) et X est elle commune pour tout i ?
le choix est pas nécessairement évident (cf la biblio sur le sujet).
Par défaut, polr et lrm construisent des modèles de type 1.
Avec les vglm, tu peux faire les deux.
voici un exemple qui clarifiera peut-être mieux mes propos (toujours avec les données de ton exemple initial) :
Code : Tout sélectionner
> options( prompt=" ")
# pour recuperer la librairie VGAM :
# http://www.stat.auckland.ac.nz/~yee/VGAM/download.shtml
# ou
# install.packages("VGAM", repos="http://www.stat.auckland.ac.nz/~yee")
require(VGAM)
# modèle de type 1 : logit(P(Y<=i)) = a(i) + bX
invlogit <- function(x) 1/(1+exp(-x))
vglm1 <- vglm(m ~ f, data=Dn, family =cumulative(parallel=T))
coef1 <- coef(vglm1)
coef1
(Intercept):1 (Intercept):2 fO
-1.0282363 0.4633625 0.9986378
psfo <- invlogit(coef1[1]+coef1[3])
psfn <- invlogit(coef1[1])
pcfo <- invlogit(coef1[2]+coef1[3])-invlogit(coef1[1]+coef1[3])
pcfn <- invlogit(coef1[2])-invlogit(coef1[1])
pmfo <- 1-invlogit(coef1[2]+coef1[3])
pmfn <- 1-invlogit(coef1[2])
(pcfo/pcfn)/(psfo/psfn)
0.4872274
(pmfo/pmfn)/(psfo/psfn)
0.2605526
exp(-0.9986378)
0.3683809
# je te l’accorde aussi, la moyenne des deux odds-ratios est douteuse :)
( 0.4872274 + 0.2605526 )/2
[1] 0.37389
# modèle de type 2 : logit(P(Y<=i)) = a(i) + b(i)X
vglm2 <- vglm(m ~ f, data=Dn, family =cumulative(parallel=F))
coef2 <- coef(vglm2)
coef2
(Intercept):1 (Intercept):2 fO:1 fO:2
-1.0986123 0.5108256 1.0986123 0.8754687
psfo <- invlogit(coef2[1]+coef2[3])
psfn <- invlogit(coef2[1])
pcfo <- invlogit(coef2[2]+coef2[4])-invlogit(coef2[1]+coef2[3])
pcfn <- invlogit(coef2[2])-invlogit(coef2[1])
pmfo <- 1-invlogit(coef2[2]+coef2[4])
pmfn <- 1-invlogit(coef2[2])
# on remarque que l’on récupère nos “bons” odds-ratios
(pcfo/pcfn)/(psfo/psfn)
0.4
(pmfo/pmfn)/(psfo/psfn)
0.2666667
exp(-(coef2[3]+coef2[4])/2)
0.372678
# proche de la valeur observée pour le modèle 1 …
Le test de Chi2 est plus comparable au modèle de type 2 (valeurs de b différentes en fonction des catégories). Sa construction est plus en accord avec la structure de la table de contingence. On retrouve notamment le même nombre de degré de liberté, ce qui n’est pas le cas pour modèle 1 (cf exemple en dessous).
Code : Tout sélectionner
# pour récupérer la fonction « vanova » :
# voir dans http://pierre.bady.free.fr/biofun/R/UtilityVglm.R
# (attention les fonctions ne sont pas toutes à jour,
# la doc est en construction et il reste certainement des bugs)
vglm0 <- vglm(m ~ 1, data=Dn, family =cumulative)
vglm1 <- vglm(m ~ f, data=Dn, family =cumulative(parallel=T))
vglm2 <- vglm(m ~ f, data=Dn, family =cumulative(parallel=F))
vanova(list.vglm(list(vglm0,vglm1)),test="chisq")
Analysis of Deviance Table
Terms added sequentially (first to last)
df devi resdf resdevi pvalue
model.1 34 39.21515 34 39.215148 NA
model.2 33 37.95013 1 1.265015 0.2607039
dispersion: 1
vanova(list.vglm(list(vglm0,vglm2)),test="chisq")
Analysis of Deviance Table
Terms added sequentially (first to last)
df devi resdf resdevi pvalue
model.1 34 39.21515 34 39.215148 NA
model.2 32 37.90819 2 1.306960 0.5202323
dispersion: 1
en espérant avoir éclairci mes précédents posts :)
@+
Pierre
PS: au fait c'est pour faire quoi ces odds-ratios ?
... désolé ... je suis curieux de nature :)