利用ccle数据库构造分类器区分耐药与不耐药样本
文章目录
- 下载数据
- ccle数据下载
- 读入数据(以CCLE的数据为例)
- 提取自己想要的数据
- 制作标签
- 进行T检验
- 将数据保存到本地
- 将数据处理成weka输入的文件格式
- 训练集
- 测试集
- 将CSV文件转化为arff文件
- 构建模型和测试模型
- 构建模型
- 测试模型
下载数据
ccle数据下载
进入ccle网站
点击data,然后选择自己需要的数据类型然后选择下载,这里我选择了counts数据
下载得到的数据:
下载的数据的第一行(版本信息)和第二行(基因数和样本数)记得去掉后才能读入到R中
往下拉下载药物信息,用来对应细胞系的药物响应信息
下载的数据:
ccle网站默认IC50值是8以下的为不耐药,为8的认为是耐药。
读入数据(以CCLE的数据为例)
## 读取数据
options(stringsAsFactors = F,check.name = F)
Counts <- read.delim("E:/daiMa/R/Drug resistance/CCLE_RNAseq_genes_counts_20180929.gct", row.names=1)
DrugData <- read.csv("E:/daiMa/R/Drug resistance/CCLE_NP24.2009_Drug_data_2015.02.24.csv")
提取自己想要的数据
## 从Counts中取出肝癌数据
library(stringr)
sampleName <- colnames(Counts)
loc <- str_subset(sampleName,"LIVER")
length(loc)
LiverCounts <- Counts[,loc]loc2 <- match(loc,DrugData[,1])
## 去掉没有药物信息的样本的counts数据
na_loc <- which(is.na(loc2))
LiverCounts <- LiverCounts[,-na_loc]## 查看使用的药物是否是统一的
drug <- DrugData[loc2,3]
unique(drug)##如果药物是统一的,那就不需要进行筛选,直接进入下一步,如果不统一,就选择自己想要的药物进行筛选
## 从drugDATA中取出IC50信息
loc2 <- na.omit(loc2)
LiverIC50 <- DrugData[loc2,c(1,11)]## 去重
geneId <- as.factor(Counts[,1])
counts_delrep <- apply(LiverCounts,2,function(x) tapply(x, geneId, mean)) Exp <- counts_delrep
## 去掉全0行,否则下面的F检验和T检验会报错
Exp <- Exp[which(rowSums(Exp)>0),]
Exp1 <- Exp[,label$label==1]
Exp0 <- Exp[,label$label==0]
制作标签
## 根据IC50值制作标签
## CCLE上的数据IC50值等于8的就是耐药,小于等于8的是药敏
label <- data.frame(name = LiverIC50[,1],label = as.numeric(LiverIC50$IC50..uM. == 8))
进行T检验
## 进行t检验
geneid <- row.names(Exp)
t_result=matrix(,length(geneid),3)
for (i in 1:nrow(Exp)) {Var.test_p<-var.test(Exp1[i,],Exp0[i,])$p.valueif (Var.test_p>0.05) T_test=t.test(Exp1[i,],Exp0[i,],alternative="two.sided",paired=F,var.equal=T) else T_test=t.test(Exp1[i,],Exp0[i,],alternative="two.sided",paired=F,var.equal=F) t_result[i,1:3]=c(geneid[i],T_test$statistic,T_test$p.value)
}
colnames(t_result)=c("geneid","t_value","p_value")
head(t_result)## 找出差异基因
dexpGene <- t_result[t_result[,3]<0.05,1]## 取出差异基因的表达谱
newCounts <- Exp[dexpGene,]
newCounts <- t(newCounts)
将数据保存到本地
## 将数据保存到本地
write.csv(newCounts,"LiverCounts.csv")
write.csv(LiverIC50,"LiverIc50.csv")
write.csv(label,"label.csv")
将数据处理成weka输入的文件格式
训练集
随机选几个作为训练集,耐药组和药敏组的数量尽量均匀一些,这样子做出来的分类器才不会过拟合
weka输入的训练集要求输入的数据:行是样本,列是基因,最后一列是label,不需要样本名
我们选择使用wps打开我们刚刚保存的数据对数据进行处理
测试集
同样的我们也选择一些样本作为测试集,不同的是label那一列都用?(英文)代替,记得保存一份有标签的备份,最后得出结果的时候可以判断模型的效果
将CSV文件转化为arff文件
使用weka打开我们的train.csv.arff和test.csv.arff文件
首先点击Explorer- openfile,选择我们的文件,然后再点击save,点击确定,weka就自动将文件转化为arff文件了
用notepad++打开train.csv.arff和test.csv.arff文件,下拉到label这一行,将numeric改成{0,1}(英文)
如果前面的处理都正确的话,再次用weka打开train.csv.arff应该如下所示:
构建模型和测试模型
虽然weka可以使用图形窗口进行构建模型,但是更灵活的方式还是使用命令行窗口,下面以随机森林为例:
(其他训练模型或者weka的详细使用可以查看我的另外一篇文章:weka的命令行使用方法)
构建模型
- 首先在自己的数据目录下打开cmd窗口
- 运行以下命令:
java -Xmx1024m -classpath .;D:\Weka\Weka-3-8-4\weka.jar weka.classifiers.trees.RandomForest -t train.csv.arff -d colonRandomForest.model > colonRandomForest.out -x 8
- 其中**D:\Weka\Weka-3-8-4\ **是你weka的安装目录
- weka.classifiers.trees.RandomForest是选择的模型类型
- -t 是训练集
- -d 是输出的模型的名称,>后面跟的是模型交叉验证的结果(.out文件)
- -x 是设置几倍交叉验证,一般跟着的训练集样本量-1
测试模型
java -Xmx1024m -classpath .;D:\Weka\Weka-3-8-4\weka.jar weka.classifiers.trees.RandomForest -l colonRandomForest.model -T test.csv.arff -p 0 > PredictionResultRandomForest.txt
- 其中**D:\Weka\Weka-3-8-4\ **是你weka的安装目录
- weka.classifiers.trees.RandomForest是构建模型的时候选择的模型类型
- -l 是构造模型是输出的模型文件
- -T 是测试集
- -p 0这个参数是是否给出每个样本分类的标签,和分为该类的可能性
分析结果:
和我们构建的测试结果比对,发现所有分的结果都分对了。说明分类器的效果还是不错的。
我们尝试着把这个模型用在我们刚刚没有匹配到的药物信息的表达谱上试试,得到的分类结果。
具体的weka使用方法以及结果解读可以查看我之前写的博客:weka的命令行构建分类器
利用ccle数据库构造分类器区分耐药与不耐药样本相关推荐
- 编写一个python程序,利用scapy数据库构造一个icmp数据包,使其能实现ip扫描
下面是一个使用 scapy 库来构造 ICMP 数据包并进行 IP 扫描的 Python 程序的示例: from scapy.all import *# 设置源 IP 地址和目的 IP 地址 src_ ...
- svm分类器_使用放射学机器学习分类器区分胶质母细胞瘤与孤立性脑转移瘤
使用放射学机器学习分类器区分胶质母细胞瘤与孤立性脑转移瘤 脑转移瘤(MET)和胶质母细胞瘤(GBM)是成人中最常见的恶性脑肿瘤.因此,MET和GBM的准确术前区分对于个体化治疗至关重要.在这项研究中, ...
- php输出多维json,json多维数组怎么利用php进行构造
json多维数组怎么利用php进行构造 发布时间:2020-12-09 16:03:49 来源:亿速云 阅读:62 作者:Leah 本篇文章为大家展示了json多维数组怎么利用php进行构造,内容简明 ...
- 利用GBDT模型构造新特征具体方法
利用GBDT模型构造新特征具体方法 数据挖掘入门与实战 公众号: datadw 实际问题中,可直接用于机器学**模型的特征往往并不多.能否从"混乱"的原始log中挖掘到有用的 ...
- matlab ann-bp分类器,利用matlab真的BP-ANN分类器设计.doc
利用matlab真的BP-ANN分类器设计,ann分类器,bp神经网络分类器,bp分类器,贝叶斯分类器matlab,svm分类器matlab程序,matlab分类器,matlab分类器工具箱,soft ...
- 分享一个CCLE细胞系数据(CCLE数据库不能用了吗?)
癌细胞系百科全书项目 - Broad 研究所与诺华生物医学研究所之间的合作 2006 年,Sellers (Novartis).Garraway (Broad Institute) 和 Schlege ...
- 利用SQLite数据库进行用户名、密码的注册和登录验证
利用SQLite数据库进行存储用户名.密码等等其他信息 首先是activity_main布局界面 <RelativeLayout xmlns:android="http://schem ...
- 数据库构造器之查询构造器构建
近来使用笔者研发的框架中,有一处功能颇为棘手. 由于框架内部监控功能中,需存储当前操作用户主键功能. 然,获取用户主键的模块中,需根据"loginToken"获取"账号主 ...
- 如何利用OMIM数据库获取肿瘤相关所有突变基因?
如何利用OMIM数据库获取肿瘤相关所有突变基因? OMIM是人类孟德尔遗传数据库(线上版)(0nline Mendelian Inheritance in Man)的简称.这是一个持续更新的关于人类基 ...
最新文章
- [自带避雷针]DropShadowEffect导致内存暴涨
- 使用 Weinre 调试移动网站及 PhoneGap 应用
- CSDN Github Markdown编辑常用功能符号补充
- 在panel中显示一个新的form
- 【视频】vue组件之slot插槽
- VTK:动轴用法实战
- Spring Boot 细节挖掘(全局异常处理)
- php的date比较时间差,php date 时间差
- C++ operator关键字(重载操作符)(转)
- JS -- http、https地址自动检测并添加为链接
- 分享,用sql快速创建MODEL,快速提高工作效率哦
- 9个实用PHP函数和功能
- linux sh 按键精灵,按键精灵脚本代码教程
- msp430中如何连续对位进行取反_【万泉河】论PLC编程中的高内聚与低耦合
- 逆战ds服务器怎么修复,IBMDS3512存储硬盘坏了正确的更换方法应该是怎么
- 2021年中国道路交通事故情况分析(附机动车保有量、交通事故发生数量、死亡人数、受伤人数、直接经济损失)[图]
- 我对于微信文章的感悟
- RuntimeWarning: divide by zero encountered in log错误解决
- 北京航空航天大学计算机考研难度,北京航空航天大学考研难吗?一般要什么水平才可以进入?...
- 常见的数据分析工具有哪些?
热门文章
- 微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克、炮弹爆炸
- CentOS 7 YUM安装MariaDB 10.1
- Invalid hook call. Hooks can only be called inside of the body of a function
- maven项目-加载不到spring文件,BeanFactory not initialized or already closed - call 'refresh' bef
- html给页面添加艺术型边框,如何为2016word的页面设置艺术型页面边框
- [UIView numberofRowsInSection]unrecognized selector sent to instance 0x1808bef0 错误
- mac +xcode 下WebDriverAgent环境配置
- 走进tensorflow第九步——WARNING(警告)也值得关注
- 人工智能-统计机器学习-线性回归
- Hive数据仓库中历史拉链表实践