如何使用 R 进行基因表达数据集分析
Posted
技术标签:
【中文标题】如何使用 R 进行基因表达数据集分析【英文标题】:How to do Gene Expression dataset analysis with R [closed] 【发布时间】:2018-10-31 01:48:42 【问题描述】:我们的数据集包含超过 100 个样本收集的 50K+ 基因表达。此 csv 文件的大小仅为 70MB。在 R local 上运行会出现错误:下面第 6 行的“无法分配大小为 22gb 的向量”。这是编写的代码:
data=as.matrix(read.table("geneExp.csv.csv", row.names = 1, header =T, sep = ','))
logdata=log2(data)
t_logdata=t(logdata)
output=/* the output label vectors 0 or 1 */
library(MASS)
lda.fit=lda(output~., data=as.data.frame(t_logdata), CV=TRUE)
summary(lda.fit)
LDA 也被尝试作为一种降维方法,仅用于实验目的。这是数据的快照: - 行是基因,列是样本。 我们找不到一篇全面的在线帖子,涵盖了编写 R 代码(例如使用 cloudml_train(file="train.R") 提交的那个)在云上运行它。我们已经尝试使用来自 rstudio 的 cloudml,但它退出时出现错误。也许这段代码不适合在 cloudml 上运行?是否应该将其更改为 tensorflow 代码?在云上运行 LDA 模型的示例会有所帮助。谢谢。
【问题讨论】:
"Cannot allocate vector of size" 意味着机器没有足够的内存来做你想做的事。您的数据集似乎没有那么大,但我不确定lda
需要哪些资源。此外,您的代码正在将 data
从数据帧(read.table
的输出)转换为矩阵,然后再转换回数据帧。这是浪费和不必要的。
谷歌搜索“线性判别分析 R 内存”会出现 this package。我不知道它是否有用,但 SO 是针对特定编程问题的问题 - 不是针对教程材料指针的请求...
@BenBolker 当然,很抱歉。我已经相应地编辑了问题。
@neilfws 谢谢。是的,数据集只有几 MB。感谢代码审查评论。
这有帮助,但恐怕这个问题仍然很模糊/广泛。如果您尝试过Cloud ML 并遇到了麻烦,为什么不使用具体的细节来编辑您的问题呢? This paper 有一些关于 LDA 内存强度的信息。
【参考方案1】:
不是一个完整的答案,而是一个探索建议(并且太长/格式太长,无法发表评论)。我拼凑了一个在一个简单的合成数据集上运行 LDA 的函数,只是为了了解可以做什么(我在一台旧的 MacBook Pro 上具有
f <- function(nr=200,nc=1e3,seed=101)
set.seed(seed)
grouping <- rbinom(nr,size=1,prob=0.2)
x <- matrix(rnorm(nr*nc),nrow=nr)
m <- MASS::lda(x=x,grouping=grouping)
return(m)
system.time(m0 <- f()) ## 1 second
system.time(m0 <- f(5e3)) ## 30 seconds
system.time(m0 <- f(8e3)) ## 48 seconds
system.time(m0 <- f(25e3)) ## 163 seconds
所以我可以轻松获得多达 200 行 x 25000 列(top
报告的最大示例仅占用 25% 的内存使用率,即大约 1G),尽管事情开始变得比我想要的要慢一些。
Wickham 的 Advanced R book 有一些关于内存分析的内容...
【讨论】:
以上是关于如何使用 R 进行基因表达数据集分析的主要内容,如果未能解决你的问题,请参考以下文章
拓端tecdat|R语言高维数据惩罚回归方法:主成分回归PCR岭回归lasso弹性网络elastic net分析基因数据