库(“knitr”)库(“Biobase”)库(“Hiiragi2013”​​)库(“GLMNet”)库(“MLR”)库(“GGPLOT2”)

你将在这个实验室学到什么

我们将根据其微阵列表达数据从单个细胞进行转录组(cDNA)样本的二进制分类分为两组。我们了解如何使用交叉验证来获得对错误分类错误的合理估计(没有过度装备偏见)。此外,我们了解如何使用交叉验证来优化分类算法所取决于的调整参数。这两个交叉验证循环具有独立的目标,并以嵌套方式执行:内部,基于CV的优化参数,外部,基于CV的分类器性能的估计。

有许多不同的分类算法,基于不同的数学思想,以及更多或更少适合不同类型的数据和应用。它们进入不同的R包,通常有自己的IDESyncratic如何输入数据和参数,以及它们如何返回结果。

我们使用MLR.包,它为许多算法提供了统一的包装器,因此我们可以在不断地改变我们的代码的情况下将它们交换并尝试不同的包装。MLR.还提供了强大的元语言来描述和执行(可能是嵌套的)交叉验证方案。

从中加载示例数据Hiiragi2013

这些是E3.25、E3.5和E4.5期小鼠胚胎单细胞的微阵列表达谱。参见Y. Ohnishi, W. Huber等人,细胞与细胞之间的表达变异紧接着信号强化逐步分离早期小鼠谱系。《自然细胞生物学》,16:27(2014)。

数据(“x”,package =“hiiragi2013”​​)x
## exprs ##协议数据## sampleNames: 1 E3.25 2 E3.25…101 E4.5 (FGF4-KO) (101 total) ## varLabels: ScanDate ## varMetadata: labelDescription ##表型数据## samplename: 1 E3.25 2 E3.25…101 E4.5 (FGF4-KO) (101 total) ## varLabels: File.name胚胎。一天…sampleColour(8总计)## varMetadata: labelDescription ## featureData ## featurename: 1415670_at 1415671_at…ffx - trpnx - m_at (45101 total) ## fvarLabels: symbol genename ensembl ## fvarMetadata: labelDescription ## experimentData: use 'experimentData(object)' ##注释:mouse4302
表(x sampleGroup美元)
## ## e3.25 e3.25 (fgf4-ko) e3.5 (epi) e3.5 (fgf4-ko) e3.5 (pe) e4.5 (epi) ## 36 17 11 8 11 4 ## e4.5 (fgf4-ko) e4.5 (pe) ## 10 4

x是一个ExpressionSet对象,通过RMA规范化从Affymetrix原始数据中获得。

按预期转换为data.frameMLR.职能。在这里,我们还可以进行独立的过滤以删除可能的无色变量。这样做的一个动机是具有非常小的变化的探针可能是受批量效应受影响最大(相对)的探针。

rowv < -  data.frame(v = rowvars(exprs(x)))ggplot(rowv,aes(x = log10(v)))+ geom_bar(binwidth = 0.05,fill =“skyblue”)

^(-0.5) selectedFeatures <- (rowV$v > selectionThreshold) embryoSingleCells <- data.frame(t(exprs(x)[selectedFeatures,]), check.names = TRUE)
$tg <- factor(ifelse(x$胚胎。day == "E3.25", "E3.25", "other")
## TG ## E3.25其他## 53 48

设置机器学习问题

MLR.需要我们创建一系列对象来告诉它我们想要它做什么。首先,我们需要定义任务:

任务< -  makeClassiftask(id =“hiiragi”,data = embrylinglecells,target =“tg”)

定义学习者:

lrn = makelearner(“classif.glmnet”,predict.type =“prob”)

定义重采样策略:

rdesc < -  makeresampledesc(方法=“cv”,stratify = true,erers = 12)

做重新采样:

R <- ressample (learner = lrn, task = task, resampling = rdesc)

这段代码运行一段时间。现在我们准备探究结果。得到平均误分类错误:

r
##任务:Hiiragi ##学习者:分类。glmnet # # mmce。阿格:0.01 ## mmce。平均值:0.01 ## mmce。sd: 0.04
头(R $ pred $数据)
## id true probe . e3.25 probe . e3.25其他响应iter # # 7 E3.25 7 E3.25 0.9856487 - 0.014351322 E3.25 1测试# # 21 E3.25 21 E3.25 0.9814871 - 0.018512933 E3.25 1测试# # 27 E3.25 27 E3.25 0.9097841 - 0.090215895 E3.25测试# # 75 E3.25 (FGF4-KO) 75 E3.25 0.9975721 - 0.002427891 E3.25 1测试# # 45 E3.5 (EPI) 45其他0.1674613 - 0.832538724 1测试# # 49 E3.5 (PE) 490.2944465 0.705553509其他1个测试
使用(r $ pred $数据,表(真相,响应))
##响应##真实e3.25其他## E3.25 53 0 ##其他1 47
ggplot(r$pred$data, aes(x = true, y = probe . e3.25, color = response)) + geom_point()

包装学习:内部交叉验证以设置调优参数

学习者glmnet.取决于两个参数:规范化惩罚\λ(\ \),参数\α(\ \)α控件的各自权重\(l_1 \)\(l_2 \)regularisation条款。到目前为止,我们使用了默认值,但也许我们可以做得更好。

上述数据预处理管道中的另一个参数是选择选择,我们通过盯着直方图制作的。但我们也可以以最佳的方式选择此项(并避免通过交叉验证执行此操作的过度装备)。

在函数glmnet.predict,所选价值\λ(\ \)用于预测的用于预测年代,这也是它在MLR.包装。

在下面的代码中,我们说明我们想要调整年代在6个步骤中0.001和0.1之间,并且我们希望使用10倍交叉验证的内循环进行调谐。请注意,此后一个参数设置与对象无关rdesc我们在上面创建的,描述了外交交叉验证。

tuninglrn < -  maketunewrapper(lrn,重试= makeresampledesc(“cv”,erers = 10,stratify = true),par.set = makeparamset(makenumericparam(“s”,downly = 0.001,upper = 0.1)),Control = maketuneControlgrid(分辨率= 6))
R2 < - 重组(Learner = Tuninglrn,Task =任务,重新采样= RDESC)

这段代码运行一段时间。

R2.
## Resample Result ##任务:Hiiragi ##学习者:classif.glmnet.tuned ## mmce。阿格:0.01 ## mmce。平均值:0.01 ## mmce。sd: 0.04
(r2$pred$data, table(true, response))
##响应##真实e3.25其他## E3.25 53 0 ##其他1 47
ggplot(r2 $ pred $ data,aes(x = trut,y = prob.e3.25,color =响应))+ geom_point()

练习

会话信息

sessionInfo ()
在开发(不稳定)下(2015-05-20 R68389)##平台:X86_64-Apple-Darwin14.3.0 / x86_64(64位)##正在运行:OS x 10.10.3(Yosemite)########locale:## [1] c ## ##附加基础包:## [1] stats4并行统计图形grdevices utils数据集方法base ## ##其他附加包:## [1] Biocstyle_1.6.0 MLR_2.3ggplot2_1.0.1 bbmisc_1.9 ## [5] paramhelpers_1.5 glmnet_2.0-2 foreach_1.4.2 matrix_1.2-0 ## [9] hiiragi2013_1.4.0 xtable_1.7-4 rcolorbrewer_1.1-2 mouse4302.db_3.2## [13] org.mm.eg.db_3.1.2 rsqlite_1.0.0 dbi_0.3.1 mass_7.3-40 ## [17] keggrest_1.8.0 gtools_3.4.2 gplots_2.17.0 geneplotter_1.46.0 ## [21] Annotate_1.46.0XML_3.98-1.1 AnnotationDBI_1.30.1 GenomeinfodB_1.4.0 ## [25]讽刺_2.2.1 s4vectors_0.6.0 lattice_0.20-31 Genefilter_1.50.0 ## [29] Cluster_2.0.1 Clue_0.3-49 Boot_1.3-16 Affy_1。46.0 ## [33] biobase_2.28.0 biocgenerics_0.14.0 knitr_1.10.5 ## ##通过命名空间加载(而未附加):## [1] RCPP_0.11.6 PNG_0.1-7 BIOSTRINES_2.36.1 DIgest_0.6.8 ## [5] plyr_1.8.2 evaluate_0.7 httr_0.6.1 biocinstaller_1.18.2 ## [9] zlibbioc_1.14.0 gdata_2.16.1 checkmate_1.5.3 preprocesscore_1.3.3.1 #13] Rmarkdown_0.6.1标签_0.3 proto_0。3-10 valline_3.3.0 ## [17] Stringr_1.0.0 munsell_0.4.2 htmltools_0.2.6 codetools_0.2-11 ## [21] bitops_1.0-6 grid_3.3.0 gtable_0.1.2 magrittr_1.5 ## [25] formatr_1。2 scales_0.2.4 KernSmooth_2.23-14 stringi_0.4-1 ## [29] XVector_0.8.0 reshape2_1.4.1 affyio_1.36.0 parallelMap_1.2 ## [33] latticeExtra_0.6-26 iterators_1.0.7 tools_3.3.0 survival_2.38-1 ## [37] yaml_2.1.13 colorspace_1.2-6 caTools_1.17.1