Почему мыши Полирег используют столько памяти? - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь втиснуть недостающие данные генотипа с помощью мыши из пакета R. Первый набор данных, который у меня есть, состоит из матрицы генотипов размером 1851x47992, состоящей из 0, 1 и 2 и NA (большинство записей - 0), и вектора фенотипа из 0 и 1 длиной 1851. Поскольку генотипы состоят из 3 дискретных категории, я решил использовать метод polyreg.

Вот код, который я использовал, чтобы попытаться начать вменение (отсутствующие данные сохраняются в файле как -1; мне пришлось изменить их на NA):

genotype <- as.matrix(read.table('genotype file address'))
phenotype <- unlist(read.table('phenotype file address'))
data3 <- data.frame(genotype,phenotype)
data3[data3==-1] <- NA
library(mice)
imp <- mice(data3,method="polyreg")

К сожалению, я получаю сообщение об ошибке «невозможно выделить вектор размером 17,2 ГБ», даже если файл генотипа составляет всего 169 МБ, а файл фенотипа - только 5,42 КБ

Я собирался спросить о самой ошибке; но я нашел несколько вопросов, уже объясняющих, что это означает, что в памяти недостаточно места для хранения вычислений. Поэтому вместо этого я хотел бы спросить: 1) Зачем этому мышам-полирегам требуется на 2 порядка больше памяти, чем размер базовых данных, 2) Могу ли я воспользоваться тем, что большинство записей в генотипе равно 0 чтобы уменьшить это?

Спасибо

1 Ответ

0 голосов
/ 22 марта 2020

При вменении информация из других столбцов используется для прогнозирования данных в столбцах с отсутствующими данными, например:

data3 = data.frame(matrix(runif(1000),ncol=10))

Одним из шагов в mice является создание ПредикаторMatrix, и это где он терпит неудачу, используя пример выше:

make.predictorMatrix(data3,make.blocks(data3))
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
X1   0  1  1  1  1  1  1  1  1   1
X2   1  0  1  1  1  1  1  1  1   1
X3   1  1  0  1  1  1  1  1  1   1
X4   1  1  1  0  1  1  1  1  1   1
X5   1  1  1  1  0  1  1  1  1   1
X6   1  1  1  1  1  0  1  1  1   1
X7   1  1  1  1  1  1  0  1  1   1
X8   1  1  1  1  1  1  1  0  1   1
X9   1  1  1  1  1  1  1  1  0   1
X10  1  1  1  1  1  1  1  1  1   0

Так что, если у вас есть входные данные, которые имеют 47992 столбцов, вам понадобится матрица, которая 47992 * 47992, которая собирается взять это много памяти.

Если я правильно помню свою генетику 101, чем дальше ваши маркеры отстоят друг от друга, тем меньше у вас корреляции, так что, возможно, это один из способов обрезки ваших столбцов.

Другой можно использовать snpStats , но при быстром чтении его виньетки кажется, что вы все равно должны указать какие-то правила.

...