web-dev-qa-db-ja.com

コントラストは因子にのみ適用できます

Rについて質問があります。

分散の均一性をテストするために、levene.testというテストを使用しています。

これが機能するためには、少なくとも2つのレベルを持つ因子変数が必要であることを知っています。そして、私が見るものから、私は私が使用している因子変数のために少なくとも2つのレベルを持っています。しかし、どういうわけか私はのエラーを取得し続けます:

> 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

私も二項分布から変数を生成しようとします:

k<-rbinom(1304, 1, 0.5)

それを要因として使用しますが、まだ機能していません。

最後に、3つのレベルを持つ変数を作成します。

k<-sample(c(1,0,2), 1304, replace=T)

しかし、いくつかの方法はまだ動作せず、同じエラーが発生します:

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

これは、データ内の変数の型の出力です。

> 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 ...

変数kを見るとわかるように、性別にはそれぞれ3レベルと2レベルがありますが、どういうわけかそのエラーメッセージが表示されます。

> 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

なぜこれが起こっているのかについてのヒントを誰かが私に与えることができれば、それは素晴らしいことです。テストを実行するときに、変数kや性別、または異なるレベルを持つことでエラーが発生する理由がわかりません。

ありがとうございました

10
john_w

私は問題を解決したと思う。データのNA値によるものだと思います。 sayを使用してnaを削除した後

x<-na.omit(original_data)

次に、xにleveneテストを適用すると、警告メッセージが消えます。

うまくいけば、これが問題の原因です。

12
john_w

因子に1つのレベルしかない場合、このエラーが発生します。因子変数のレベルを確認するには、lapply(df, levels)を使用します。非ファクター変数については何も返しませんが、どの変数が違反者であるかを簡単に識別できます。これは、私のように何百もの変数がある場合に特に役立ちます。

4
Scott

実際に変数をfactorに変換する必要があります。 3つ(または有限)の値を持つだけでは、必ずしもそれが要因になるわけではありません。

x <- factor(x)を使用して変換します


str()の出力を見ると、各変数のタイプが表示されます。

<..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 ...

$kfactorですが、SIF1 ではありません
したがって、使用

 geno1rs11809462$SIF1 <- factor(geno1rs11809462$SIF1)
1
Ricardo Saporta