je pars d'un tableau contenant les informations suivantes :
Code : Tout sélectionner
> TOT[1:5]
famille ind pere mere Y
1 19 1 7 7 1
2 8 2 3 2 1
3 16 3 6 4 1
4 9 4 3 3 1
5 17 5 6 5 1
autrement dit un identifiant, un numéro de famille, un père, une mère et une variable binaire Y.
Pour obtenir ce tableau j'ai au préalable établi mes règles de correspondance entre famille et parents :
Code : Tout sélectionner
> Nfamille
[1] 27
> dam_fam
[1] 1 2 3 1 2 3 1 2 3 4 5 6 4 5 6 4 5 6 7 8 9 7 8 9 7 8 9
> sire_fam
[1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9
Dans l'exemple j'ai 27 familles, à partir de 9 pères et 9 mères.
Je génère mon tableau en tirant pour chacun de mes NIND0 individus une famille de façon aléatoire :
Code : Tout sélectionner
floor(Nfamille*runif(n=NIND0,min=0,max=1))+1
Je désire ensuite synthétiser l'information dans un tableau qui contienne une ligne par famille, avec le nombre de (Y=1) et le nombre de (Y=0).
Code : Tout sélectionner
table(TOT$Y,TOT$famille)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 21 23 24 25 26 27
0 0 1 1 1 2 0 3 1 0 1 2 1 0 2 0 0 1 0 0 1 1 1 0 0 2
1 5 1 2 2 1 4 0 3 3 1 0 0 2 0 3 2 4 1 2 0 5 2 1 2 3
on voit qu'il peut y avoir des familles non représentées.
J'aimerais utiliser cette liste de familles comme vecteur d'indices.
Sauf que colnames (ou rownames si je prends la transposée) n'est pas numérique :
Code : Tout sélectionner
> colnames(table(TOT$Y,TOT$famille))
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15"
[16] "16" "17" "18" "19" "21" "23" "24" "25" "26" "27"
du coup je ne peux l'utiliser comme vecteur d'indice.
Code : Tout sélectionner
sire_fam[colnames(table(TOT$Y,TOT$famille))]
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Peut être que ce n'est pas la bonne façon de procéder ?
Cela étant, ensuite je voudrais utiliser les valeurs estimées pour les pères et les mères apres un modèle mixte
Code : Tout sélectionner
lm3<-glmer(cbind(vivant,mort)~1+(1|pere)+ (1|mere)+(1|famille),data=TOT,family=binomial)
EBV3<-ranef(lm3)
pere3<-as.vector(unlist(EBV3$pere))
Selon la taille du dispositif il n'est pas dit que tous les pères seront représentés et donc estimés. C'est pourquoi je désire pouvoir utiliser le nom des variables et non simplement l'ordre.
En effet, si j'ai 80 pères estimés sur 80 possibles, je sais dire que pere3[25] correspond au père n°25. Si je n'en n'ai que 75 représentés dans mon échantillon simulé, il me faut un moyen pour attribuer la bonne valeur au bon père.
Suis-je clair ?
Merci