博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用R和BioConductor进行基因芯片数据分析(二):缺失值填充
阅读量:4359 次
发布时间:2019-06-07

本文共 2214 字,大约阅读时间需要 7 分钟。

以下分析用到的数据可以()下载,这个数据来自关于基因对蝴蝶迁移性的研究,样本是20个蝴蝶个体,其中10个是当地固有个体(old),另外10个是新迁入的个体(new),old和new个体两两随机配对,分别用不同颜色染料(波长分别为555和647nm)标记后,在同一张基因芯片上杂交;此外,每个基因在每张芯片上都重复点样3次,因此此数据是有3个replicates及10张芯片的双通道芯片。数据是样点的信号强度值,没有经过标准化处理的。

拿到数据你会看到许多”NA”,这是因为我把缺失的空白值替换成NA了, 以便用R进行缺失值填充。

说到缺失值填充,通常有3种方法:

A. 用此基因的平均表达值填充;如果有多张重复芯片,可以取不同芯片上的平均值;对于时间序列芯片,可以通过插值法填充。此方法很简单,也比较常用,但是效果不及下面2种方法

B. 基于(即单值分解)方法的填充:简单地讲,此方法是通过描述基因表达谱的几个基本模式来对缺失值进行填充。

C. 基于(最近邻)方法的填充: 此方法是寻找和有缺失值的基因的表达谱相似的其他基因,通过这些基因的表达值(依照表达谱相似性加权)来填充缺失值。KNN法是这3种方法里效果最好的,因此对本数据的缺失值用KNN法填充。

对以上3种方法的比较,这篇paper提供了清晰的说明: Troyanskaya, O., Cantor, M., Sherlock, G., Brown, P., Hastie, T., Tibshirani, R., Botstein, D., and Altman, R. B. (2001), , Bioinformatics 17(6):520-525.  其中关于KNN的介绍如下:

The KNN-based method selects genes with expression profiles similar to the gene of interest to impute missing values. If we consider gene A that has one missing value in experiment 1, this method would find K other genes, which have a value present in experiment 1, with expression most similar to A in experiments 2–N (where N is the total number of experiments). A weighted average of values in experiment 1 from the K closest genes is then used as an estimate for the missing value in gene A.

In the weighted average, the contribution of each gene is weighted by similarity of its expression to that of gene A.

 

下面分析数据

首先要安装 R ()

然后下载安装叫做impute的package

> source("http://bioconductor.org/biocLite.R")

> biocLite("impute")

impute是专门用KNN法进行缺失值填充的R package:

设置好当前工作目录( Windows是在R的菜单栏->文件->改变工作目录…设置,Linux下用setwd()函数)

然后在R控制台输入以下代码:

library(impute)

#导入impute package 
raw<-read.table('raw_data_3_replicates.txt',header=TRUE)

rawexpr<-raw[,-1]

#移除第一列ID列 
if(exists(".Random.seed")) rm(.Random.seed)

#必须,如果没有这句话会出错,原因不知-,-请高手指教 

imputed<-impute.knn(as.matrix(rawexpr) ,k = 10, rowmax = 0.5, colmax = 0.8, maxp = 1500, rng.seed=362436069)
#impute.knn() 使用一个矩阵作为第一个参数,其他参数这里使用的是默认值 
write.table(imputed$data,file='imputed_data.txt')

#write.table() 把数据保存在当前工作目录下的文件中,文件名用file=’ ‘指定,这一步不是必须的 

imputeddata<-imputed$data
#imputed$data是在R中储存imputed后的数据的矩阵

现在在R里输入imputed,即填充好的数据矩阵,是不是NA值全都没了?

关于impute package的详细Documentation在

全部数据文件:

from :

转载于:https://www.cnblogs.com/emanlee/archive/2012/12/05/2803144.html

你可能感兴趣的文章
整数子数组求最大和添加验证
查看>>
使用kubeadm安装Kubernetes
查看>>
Principal Component Analysis 主元分析
查看>>
linux分割字符串操作
查看>>
排序笔记
查看>>
一款纯css3实现的机器人看书动画效果
查看>>
加班与效率
查看>>
MyEclipse下SpringBoot+JSP整合过程及踩坑
查看>>
重定向和管道
查看>>
实验五
查看>>
STL学习笔记(第二章 C++及其标准程序库简介)
查看>>
Operator_countByValue
查看>>
Java 日期往后推迟n天
查看>>
Web应用漏洞评估工具Paros
查看>>
Git 和 Github 使用指南
查看>>
20180925-4 单元测试
查看>>
mysql的数据存储
查看>>
[转载] Activiti Tenant Id 字段释疑
查看>>
[Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .
查看>>
SQL Server-聚焦移除Bookmark Lookup、RID Lookup、Key Lookup提高SQL查询性能
查看>>