我们获得的蛋白质组学的原始表达矩阵一般都是会有不少的缺失值,那么我们怎样去进行填充呢?接下来我将展示下蛋白质组学处理【DEP】包的使用。
01
先把格式改成DEP包需要的,需要有两列:name和ID
library(DEP)library(tidyverse)
data <- read.delim("tao/protein_matrix.txt") %>% mutate(Genes= .$protein)
# 去掉gene/蛋白名中的重复值,这里是以分号分割的:data_unique <- make_unique(data,"Genes","protein",delim = ";")colnames(data_unique)
构建DEP包的对象
# experiment_design <- data.frame(label=colnames(data_unique)[2:32], condition=c(rep("T",23),rep("N",8)) , replicate=c(1:23,1:8))
# 构建对象 data_se <- make_se(data_unique,grep("N|T",colnames(data_unique)) ,experiment_design)
绘制每个样本已鉴定蛋白质数量的条形图
plot_numbers(data_se)
绘制样品间蛋白质鉴定重叠的条形图
数据标准化
data_norm <- normalize_vsn(data_se)meanSdPlot(data_norm)
所有样本标准化前后可视化箱线图
plot_normalization(data_se,data_norm)
查看缺失值情况
plot_missval(data_norm)
plot_detect(data_norm)
可以看到缺失的蛋白是相对低丰度蛋白,
第一种方法,这个文章中用的蛮多的:
从手动定义的left-shift高斯分布随机中抽取来估算缺失数据:
data_imp_man <- impute(data_norm,fun = "man",shift = 1.8,scale = 0.3)
plot_imputation(data_norm,data_imp_man)
这个是填充完了的数据:
还有一种方法 使用knn的方法:
通过距离测量来识别数据集中空间相似或相近的 k个样本。然后,使用这些样本来估计缺失数据点的值。每个样本的缺失值使用数据集中找到的 k 邻域的平均值进行插补:
library(impute)#使用 impute填补缺失值T_data <- data[,grep("T",colnames(data))]ncol(T_data)
T_impute <- impute::impute.knn(as.matrix(T_data), #矩阵 k=20, #预设近邻数,默认10 rowmax=0.8, #当某行的缺失值占比超过50%,则用整个样本的均值填充 colmax=0.8)[[1]] %>% #当任何一列中缺失值占比80%,计算终止并报错 as.data.frame(.)
N_data <- data[,grep("N",colnames(data))]ncol(N_data)
N_impute <- impute::impute.knn(as.matrix(N_data), #矩阵 k=6, #预设近邻数,默认10 rowmax=0.8, #当某行的缺失值占比超过50%,则用整个样本的均值填充 colmax=0.8)[[1]] %>% #当任何一列中缺失值占比80%,计算终止并报错 as.data.frame(.)
data_impute <- merge(T_impute,N_impute,by = "row.names",all = FALSE )
# 结果 (data_impute_knn <- data_impute %>% mutate(protein = data$protein)
write.csv(data_impute_knn,"imputeknn.csv")
至此,数据填充完成。根据我的经验,蛋白组中数据缺失倾向于低丰度数据,所以,基本上使用最小值填充的策略就比较适合。(我一般会手动定义一个以最小值为为中心的高斯分布数据进行填充)
领取专属 10元无门槛券
私享最新 技术干货