为什么 mice polyreg 使用这么多内存?
Why does mice polyreg use so much memory?
我正在尝试使用 R 包小鼠来估算缺失的基因型数据。我拥有的第一个数据集包含一个大小为 1851x47992 的基因型矩阵,其中包含 0、1、2 和 NA(大多数条目为 0),以及长度为 1851 的 0 和 1 的表型向量。由于基因型由 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")
不幸的是,我收到错误消息 "cannot allocate vector of size 17.2 Gb",尽管基因型文件只有 169MB,而表型文件只有 5.42KB
我正要询问错误本身;但我发现有几个问题已经在解释这意味着内存中没有足够的空间来存储计算。所以我想问:1)为什么这个 mice-polyreg 需要比基础数据的大小多 2 个数量级的内存,2)我可以利用基因型中的大多数条目都是 0 的事实吗减少这个?
谢谢
当您估算时,来自其他列的信息用于预测具有缺失数据的列中的信息,例如:
data3 = data.frame(matrix(runif(1000),ncol=10))
mice
中的一个步骤是制作一个 predictorMatrix,这是它失败的地方,使用上面的例子:
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,但快速阅读它的小插图似乎无论如何都必须指定一些规则。
我正在尝试使用 R 包小鼠来估算缺失的基因型数据。我拥有的第一个数据集包含一个大小为 1851x47992 的基因型矩阵,其中包含 0、1、2 和 NA(大多数条目为 0),以及长度为 1851 的 0 和 1 的表型向量。由于基因型由 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")
不幸的是,我收到错误消息 "cannot allocate vector of size 17.2 Gb",尽管基因型文件只有 169MB,而表型文件只有 5.42KB
我正要询问错误本身;但我发现有几个问题已经在解释这意味着内存中没有足够的空间来存储计算。所以我想问:1)为什么这个 mice-polyreg 需要比基础数据的大小多 2 个数量级的内存,2)我可以利用基因型中的大多数条目都是 0 的事实吗减少这个?
谢谢
当您估算时,来自其他列的信息用于预测具有缺失数据的列中的信息,例如:
data3 = data.frame(matrix(runif(1000),ncol=10))
mice
中的一个步骤是制作一个 predictorMatrix,这是它失败的地方,使用上面的例子:
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,但快速阅读它的小插图似乎无论如何都必须指定一些规则。