web-dev-qa-db-fra.com

Les contrastes peuvent être appliqués uniquement au facteur

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

10
john_w

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.

12
john_w

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.

4
Scott

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)
1
Ricardo Saporta