Bonjour,
le problème vient surement en partie de là :
Code : Tout sélectionner
tapply(X1$valeurfonc[filtre1][com4],X1$l_codinsee[filtre1][com4],lillie.test)
com4 est un vecteur beaucoup plus petit que celui de départ puisque tu synthétises l'information pour chaque modalité :
Code : Tout sélectionner
f <- rep(letters[1:4], c(3, 4, 4, 1))
f
[1] "a" "a" "a" "b" "b" "b" "b" "c" "c" "c" "c" "d"
tapply(x, f, length)
a b c d
3 4 4 1
com4 <- tapply(x, f, length)
com4>=4
a b c d
FALSE TRUE TRUE FALSE
Ici le vecteur de départ contient 12 valeurs mais com4 que 4 (le nombre de modalités), donc quand tu fais une sélection directement à partir de com4 tu recycles le booléen que tu obtenus mais tu ne sélectionnes pas les modalités à plus de 4 :
Ici "d" a été virée mais c'est un coup de chance, c'est parce qu'en fait tu as fait sans t'en rendre compte :
Code : Tout sélectionner
rep(com4>=4,3)
a b c d a b c d a b c d
FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE
Donc la dernière valeur de f ne sera pas gardée.
Par contre la modalité "a" n'aurait pas du être conservée et dans les faits elle l'est parce que tu n'as pas appliqué ta sélections sur les modalités :
Code : Tout sélectionner
# modalités à conserver :
cons <- names(com4)[com4>=4]
cons
[1] "b" "c"
f[f%in%cons]
[1] "b" "b" "b" "b" "c" "c" "c" "c"
Après quand tu filtres un facteur, toutes les modalités sont conservées dans les levels même si elles ne sont plus visibles dans le facteur. Il faut souvent redéfinir un facteur pour enlever les modalités qui ne nous intéresse pas des levels :
Code : Tout sélectionner
f <- factor(f)
f[f%in%cons]
[1] b b b b c c c c
Levels: a b c d # a et d font toujours partie des levels
tapply(x[f%in%cons], f[f%in%cons], sd)
a b c d
NA 1.0294942 0.8929915 NA # ici a et d apparaisse encore dans le tapply
tapply(x[f%in%cons], factor(f[f%in%cons]), sd)
b c
1.0294942 0.8929915 # a et d ont disparus
Je ne sais pas si c'est ça, mais en tout cas ce sont deux pistes à regarder.
Cordialement,
Maxime