欢迎同行一起交流讨论 微信 forensic_JS QQ1956238898
DNAcopy R包可以处理Affymetrix芯片中游数据,即LRR和BAF文件→DNAcopy→segment文件
https://cloud.tencent.com/developer/news/378422 可参考文章
DNAcopy 利用CBS算法进行数据的分割。循环二元分割算法(circular binary segmentation, CBS)是目前常用的SNParray 数据分段算法, 其优势在于利用相邻待测区间的数据均值差构建 t 统计量, 进而精确检测不同变异区域间的分段点。
Create ‘Copy Number Array’ data object
CNA(genomdat, chrom, maploc, data.type=c("logratio","binary"),
sampleid=NULL, presorted = FALSE)
-genomdat :一个矩阵,行为基因名、列为样本名
-maploc:标记在基因组上的位置
datatype:可以是logratio,也可以是LOH
-presorted:样本是否经过排序-默认是FALSE
#如果数据里面有X、Y,要先用下面的命令进行排序。
chrom <- ordered(coriell$Chromosome, levels=c(1:22,"X","Y"))
Genome Segmentation Program
segment(x, weights = NULL, alpha = 0.01, nperm = 10000, p.method =
c("hybrid", "perm"), min.width=2, kmax=25, nmin=200,
eta=0.05, sbdry=NULL, trim = 0.025, undo.splits =
c("none", "prune", "sdundo"), undo.prune=0.05,
undo.SD=3, verbose=1)
-alpha:可接受的变化点的显著差异水平
-p.method:计算p值得方法 默认是混合法
-undo.splits:撤销更改点。默认无撤销
-undo.SD:撤销点的水平
segments.p p-values for the change-points
计算变点的P值及置信区间
segments.p(x, ngrid=100, tol=1e-6, alpha=0.05, search.range=100, nperm=1000)
计算每段的中值和标准差
segments.summary(x)
smooth.CNA Smooth a ‘Copy Number Array’ data object
在使用循环二进制分割(CBS)等程序进行分析之前,检测离群值并平滑数据。
smooth.CNA(x, smooth.region=10, outlier.SD.scale=4, smooth.SD.scale=2,
trim=0.025)
-smooth.region 要考虑的点的左边和右边的点数,以检测它为离群点。(默认= 10)
-outlier.SD.scale 在平滑区域中距离最近的点的SDs数,将一个点称为离群点
-smooth.SD.scale 平滑区域中位于平滑点所在位置的SDs的数量
trim:要修剪的数据的比例,以便进行方差计算,平滑离群值,并基于SD撤消分割。
plot.DNAcopy Plot the data and results from segment of a CNA object
plot(x, plot.type=c("whole", "plateau", "samplebychrom",
"chrombysample"), xmaploc=FALSE, altcol=TRUE, sbyc.layout=
NULL, cbys.nchrom=1, cbys.layout=NULL, include.means=TRUE,
zeroline=TRUE, pt.pch=NULL, pt.cex=NULL, pt.cols=NULL,
segcol= NULL, zlcol=NULL, ylim=NULL, lwd=NULL, ...)
Arguments
RStudio--脚本汇总
library(DNAcopy) #LRR和BAF文件→DNAcopy→产生segment文件(seg.mean)
data(coriell)
#如果数据里面有X、Y,要先用下面的命令进行排序。
chrom <- ordered(coriell$Chromosome, levels=c(1:22,"X","Y"))
CNA.object <- CNA(cbind(coriell$Coriell.05296),
chrom,
coriell$Position,
data.type ="logratio",
sampleid ="c05296")
#运行后如果数据中有重复的探针出现,会有个warnings,但是不影响后续的结果。
#smooth.CNA 离散值的检测,同时对离散数据进行平滑处理。
#具体的参数我们就直接取默认值了,毕竟包开发者不会把不合理的值作为默认值。
smoothed.CNA.object <- smooth.CNA(CNA.object)
#segment 利用CBS算法进行数据的分割。循环二元分割算法(circular binary segmentation, CBS)是目前常用的SNParray 数据分段算法, 其优势在于利用相邻待测区间的数据均值差构建 t 统计量, 进而精确检测不同变异区域间的分段点。
#其中verbose参数比较有趣,是为了打印计算结果的,0不产生打印;1打印样本名称;2打印染色体信息;3打印当前的分割情况。默认状态是1。Undo.splits主要是为了确定是否设置分割的阈值。后面接着给出所设阈值的大小。
segment.smoothed.CNA.object <- segment(smoothed.CNA.object, verbose=3)
sdundo.CNA.object <- segment(smoothed.CNA.object, #应用撤销的方法去掉不必要的变化的点。
undo.splits="sdundo",
undo.SD=3,verbose=1)
#第一种方法是根据染色体和位置图对数据进行排序。红线对应的是分段的平均值。注意,点的颜色是交替的,表示不同的染色体
#其中主要的是参数plot.type。whole(w)指的绘制完整基因组;
#plateau(p)对全基因组进行排序;
#samplebychrom(s) 绘制每一个染色体图像;
#chrombysample(c)将每个染色体的所有样本展示在一起
plot(segment.smoothed.CNA.object, plot.type="p")
plot(segment.smoothed.CNA.object, plot.type="w")
plot(segment.smoothed.CNA.object, plot.type="s")
plot(segment.smoothed.CNA.object, plot.type="c")
head(segment.smoothed.CNA.object$output)
plot(sdundo.CNA.object, plot.type="w") #undo方法后生成的图变化点的确减少很多。