2014-10-26 4 views
2

Я знаю, что в Google существует много информации об этой проблеме, но я не мог ее решить. У меня есть кадр данных:cramer.test: NAs, введенные принуждением

> str(myData) 
'data.frame': 1199456 obs. of 7 variables: 
$ A: num 3064 82307 4431998 1354 193871 ... 
$ B: num 6067 403916 2709997 2743 203434 ... 
$ C: num 299 11752 33282 170 2748 ... 
$ D: num 105 6676 7065 20 1593 ... 
$ E: num 8 572 236 3 170 ... 
$ F: num 0 21 95 0 13 ... 
$ G: num 583 18512 961328 348 42728 ... 

Тогда я преобразовать его в матрицу, чтобы применить тест Крамера-Мизеса из «Крамер» библиотеки:

> myData = as.matrix(myData) 
> str(myData) 
num [1:1199456, 1:7] 3064 82307 4431998 1354 193871 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:1199456] "8" "32" "48" "49" ... 
    ..$ : chr [1:7] "A" "B" "C" "D" ... 

После этого, если я применяю А "cramer.test (MyData [x1: y1,], MyData [х2: у2,])" я получаю следующее сообщение об ошибке:

Error in rep(0, (RVAL$m + RVAL$n)^2) : invalid 'times' argument 
In addition: Warning message: 
In matrix(rep(0, (RVAL$m + RVAL$n)^2), ncol = (RVAL$m + RVAL$n)) : 
NAs introduced by coercion 

Я также попытался преобразовать фрейм данных в матрицу, как это, но ошибка совпадает:

> myData = as.matrix(sapply(myData, as.numeric)) 
> str(myData) 
num [1:1199456, 1:7] 3064 82307 4431998 1354 193871 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:7] "A" "B" "C" "D" ... 
+0

Что такое x1, y1, x2, y2? –

+0

это цифры – ibci

ответ

3

Ваша проблема заключается в том, что набор данных слишком велик для алгоритма, который cramer.test использует (по крайней мере так, как это кодированный). Код пытается создать таблицу поиска в соответствии с

lookup <- matrix(rep(0, (RVAL$m + RVAL$n)^2), 
    ncol = (RVAL$m + RVAL$n)) 

, где RVAL$m и RVAL$n являются количество рядов двух образцов. Стандарт maximum length of an R vector составляет 2^31-1 на 32-битной платформе: поскольку ваши образцы имеют равное количество строк N, вы будете пытаться создать вектор длины (2*N^2), который в вашем случае равен 5.754779e + 12 - вероятно, слишком большой, даже если R позволит вам создать вектор.

Возможно, вам придется искать другую реализацию теста или другой тест.