J'ai une question à propos de R.
J'utilise un test appelé levene.test pour tester une homogénéité de variance.
Je sais que vous avez besoin d'une variable de facteur avec au moins deux niveaux pour que cela fonctionne. Et d'après ce que je vois, j'ai au moins deux niveaux pour la variable de facteur que j'utilise. Mais en quelque sorte, je continue à recevoir l'erreur de:
> nocorlevene <- levene.test(geno1rs11809462$SIF1, geno1rs11809462$k, correction.method = "correction.factor")
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
J'essaie même de générer une variable à partir d'une distribution binomiale:
k<-rbinom(1304, 1, 0.5)
puis l'utiliser comme facteur, mais ne fonctionne toujours pas.
Enfin je crée une variable à 3 niveaux:
k<-sample(c(1,0,2), 1304, replace=T)
mais certains ne fonctionnent toujours pas et obtiennent la même erreur de:
nocorlevene <- levene.test (geno1rs11809462 $ SIF1, geno1rs11809462 $ k, correction.method = "zero.removal")
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
C'est la sortie du type de la variable dans les données:
> str(geno1rs11809462)
'data.frame': 1304 obs. of 16 variables:
$ id : chr "WG0012669-DNA_A03_K05743" "WG0012669-DNA_A04_K05752" "WG0012669-DNA_A05_K05761" "WG0012669-DNA_A06_K05785" ...
$ rs11809462 : Factor w/ 2 levels "2/1","2/2": 2 2 2 2 2 2 2 2 2 2 ...
..- attr(*, "names")= chr "WG0012669-DNA_A03_K05743" "WG0012669-DNA_A04_K05752" "WG0012669-DNA_A05_K05761" "WG0012669-DNA_A06_K05785" ...
$ FID : chr "9370" "9024" "14291" "4126" ...
$ AGE_CALC : num 61 47 NA 62.5 55.6 59.7 46.6 41.2 NA 46.6 ...
$ MREFSUM : num 185 325 NA 211 212 ...
$ NORSOUTH : Factor w/ 3 levels "0","1","NA": 1 1 3 1 1 1 1 1 3 1 ...
$ smoke1 : Factor w/ 3 levels "0","1","NA": 2 2 3 1 1 1 2 1 3 1 ...
$ smoke2 : Factor w/ 3 levels "0","1","NA": 1 1 3 2 2 2 1 2 3 2 ...
$ ANYCG60 : num 0 0 NA 1 0 0 0 0 NA 1 ...
$ DCCT_HBA_MEAN: num 7.39 6.93 NA 7.37 7.56 7.86 6.22 8.88 NA 8.94 ...
$ EDIC_HBA : num 7.17 7.63 NA 8.66 9.68 7.74 6.59 9.34 NA 7.86 ...
$ HBAEL : num 7.3 8.82 NA 9.1 9.3 ...
$ ELDTED_HBA : num 7.23 7.76 NA 8.36 9.21 7.92 6.64 9.64 NA 9.09 ...
$ SIF1 : num 19.6 17 NA 23.8 24.1 ...
$ sex : Factor w/ 2 levels "0","1": 1 1 2 2 2 2 1 1 1 1 ...
$ k : Factor w/ 3 levels "0","1","2": 1 1 2 3 1 3 3 3 1 2 ...
Comme vous pouvez voir la variable k, le sexe a respectivement 3 et 2 niveaux, mais je reçois toujours ce message d'erreur.
> head(geno1rs11809462)
id rs11809462 FID AGE_CALC MREFSUM NORSOUTH smoke1 smoke2 ANYCG60
1 WG0012669-DNA_A03_K05743 2/2 9370 61.0 184.5925 0 1 0 0
2 WG0012669-DNA_A04_K05752 2/2 9024 47.0 325.0047 0 1 0 0
3 WG0012669-DNA_A05_K05761 2/2 14291 NA NA NA NA NA NA
4 WG0012669-DNA_A06_K05785 2/2 4126 62.5 211.2557 0 0 1 1
5 WG0012669-DNA_A08_K05802 2/2 11280 55.6 212.2922 0 0 1 0
6 WG0012669-DNA_A09_K05811 2/2 11009 59.7 261.0116 0 0 1 0
DCCT_HBA_MEAN EDIC_HBA HBAEL ELDTED_HBA SIF1 sex k
1 7.39 7.17 7.30 7.23 19.6136 0 0
2 6.93 7.63 8.82 7.76 17.0375 0 0
3 NA NA NA NA NA 1 1
4 7.37 8.66 9.10 8.36 23.8333 1 2
5 7.56 9.68 9.30 9.21 24.1338 1 0
6 7.86 7.74 8.53 7.92 25.7272 1 2
Si quelqu'un peut me donner des indices sur la raison pour laquelle cela se produit, ce serait formidable. Je ne sais tout simplement pas pourquoi la variable k ou sexe ou ayant des niveaux différents me donne une erreur lorsque je lance le test.
merci
Je pense que j'ai peut-être résolu le problème. Je crois que cela est dû à la valeur NA dans les données. Parce qu'après avoir supprimé le na en utilisant say
x<-na.omit(original_data)
puis appliquez le test de levée sur x, le message d'avertissement disparaît.
J'espère que c'est la cause du problème.
Si votre facteur n'a qu'un seul niveau, vous obtiendrez cette erreur. Pour vérifier les niveaux de vos variables de facteur, utilisez lapply(df, levels)
. Il ne renverra rien pour les variables non factorielles, mais vous permettra facilement d'identifier quelle variable est le délinquant. Cela est particulièrement utile si, comme moi, vous avez des centaines de variables.
Vous devez réellement convertir votre variable en factor
. Le simple fait d'avoir trois (ou un nombre fini) de valeurs n'en fait pas nécessairement un facteur.
utilisez x <- factor(x)
pour convertir
Lorsque vous regardez la sortie de str()
, elle vous montre le type de chaque variable:
<..cropped..>
$ SIF1 : num 19.6 17 NA 23.8 24.1 ...
$ sex : Factor w/ 2 levels "0","1": 1 1 2 2 2 2 1 1 1 1 ...
$ k : Factor w/ 3 levels "0","1","2": 1 1 2 3 1 3 3 3 1 2 ...
remarquerez que $k
est un factor
mais SIF1
n'est pas
Ainsi, utilisez
geno1rs11809462$SIF1 <- factor(geno1rs11809462$SIF1)