R语言利用loess如何去除某个变量对数据的影响详解

脚本专栏 发布日期:2024/12/27 浏览次数:1

正在浏览:R语言利用loess如何去除某个变量对数据的影响详解

R语言介绍

R语言是用于统计分析,图形表示和报告的编程语言和软件环境。 R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大学创建,目前由R语言开发核心团队开发。

R语言的核心是解释计算机语言,其允许分支和循环以及使用函数的模块化编程。 R语言允许与以C,C ++,.Net,Python或FORTRAN语言编写的过程集成以提高效率。

R语言在GNU通用公共许可证下免费提供,并为各种操作系统(如Linux,Windows和Mac)提供预编译的二进制版本。
R是一个在GNU风格的副本左侧的自由软件,GNU项目的官方部分叫做GNU S.

R的演变

R语言最初是由新西兰奥克兰奥克兰大学统计系的Ross Ihaka和Robert Gentleman写的。 R语言于1993年首次亮相。
一大群人通过发送代码和错误报告对R做出了贡献。

自1997年年中以来,已经有一个核心组(“R核心团队”)可以修改R源代码归档。

R的特点

如前所述,R语言是用于统计分析,图形表示和报告的编程语言和软件环境。 以下是R语言的重要特点:

  • R语言是一种开发良好,简单有效的编程语言,包括条件,循环,用户定义的递归函数以及输入和输出设施。
  • R语言具有有效的数据处理和存储设施,
  • R语言提供了一套用于数组,列表,向量和矩阵计算的运算符。
  • R语言为数据分析提供了大型,一致和集成的工具集合。
  • R语言提供直接在计算机上或在纸张上打印的图形设施用于数据分析和显示。

作为结论,R语言是世界上最广泛使用的统计编程语言。 它是数据科学家的第一选择,并由一个充满活力和有才华的贡献者社区支持。 R语言在大学教授并部署在关键业务应用程序中。 本教程将教您R编程与适当的例子在简单和容易的步骤。

前言

"color: #ff0000">Loess局部加权多项式回归

"color: #ff0000">LOESS平滑方法

"color: #ff0000">R语言代码

 loess(formula, data, weights, subset, na.action, model = FALSE,
  span = 0.75, enp.target, degree = 2,
  parametric = FALSE, drop.square = FALSE, normalize = TRUE,
  family = c("gaussian", "symmetric"),
  method = c("loess", "model.frame"),
  control = loess.control(...), ...)

"na.action");

"htmlcode">

loess.control(surface = c("interpolate", "direct"),
   statistics = c("approximate", "exact"),
   trace.hat = c("exact", "approximate"),
   cell = 0.2, iterations = 4, ...)

"htmlcode">

predict(object, newdata = NULL, se = FALSE,
 na.action = na.pass, ...)

"color: #ff0000">实例

"color: #ff0000">数据

amplicon 测序数据,处理后得到的每个amplicon的深度,每个amplicon的GC含量,每个amplicon的长度

R语言利用loess如何去除某个变量对数据的影响详解

先用loess进行曲线的拟合

gcCount.loess <- loess(log(RC+0.01)~GC,data=RC_DT,control = loess.control(surface = "direct"),degree=2)

画出拟合出来的曲线

predictions1<- predict (gcCount.loess,RC_DT$GC)
#plot scatter and line 
plot(RC_DT$GC,log(RC_DT$RC+0.01),cex=0.1,xlab="GC Content",ylab=expression(paste("log(NRC"["lib"],"+0.01)",sep="")))
lines(RC_DT$GC,predictions1,col = "red")

R语言利用loess如何去除某个变量对数据的影响详解

取残差,去除GC含量对深度的影响

#sustract the influence of GC
resi <- log(RC_DT$RC+0.01)-predictions1
RC_DT$RC <- resi
setkey(RC_DT,GC)

此时RC_DT$RC就是normalize之后的RC

画图显示nomalize之后的RC,并将拟合的loess曲线和normalize之后的数据保存

#plot scatter and line using Norm GC data
plot(RC_DT$GC,RC_DT$RC,cex=0.1,xlab="GC Content",ylab=expression("NRC"["GC"]))
gcCount.loess <- loess(RC~GC,data=RC_DT,control = loess.control(surface = "direct"),degree=2)
save(gcCount.loess,file="/home/ywliao/project/Gengyan/gcCount.loess.Robject")
predictions2 <- predict(gcCount.loess,RC_DT$GC)
lines(RC_DT$GC,predictions2,col="red")
save(RC_DT,file="/home/ywliao/project/Gengyan/RC_DT.Rdata")

R语言利用loess如何去除某个变量对数据的影响详解

当然,也想看一下amplicon 长度len 对RC的影响,不过影响不大

R语言利用loess如何去除某个变量对数据的影响详解

全部代码如下(经过修改,可能与上面完全匹配):

library(data.table)

load("/home/ywliao/project/Gengyan/RC_DT.Rdata")
RRC_DT <- RC_DT[Type=="WBC" & !is.na(RC),]

lst <- list()
for (Samp in unique(RC_DT$Sample)){
RC_DT <- RRC_DT[Sample==Samp]
####loess GC vs RC####
gcCount.loess <- loess(log(RC+0.01)~GC,data=RC_DT,control = loess.control(surface = "direct"),degree=2)
predictions1<- predict (gcCount.loess,RC_DT$GC)
#plot scatter and line 
#plot(RC_DT$GC,log(RC_DT$RC+0.01),cex=0.1,xlab="GC Content",ylab=expression(paste("log(NRC"["lib"],"+0.01)",sep="")))
#lines(RC_DT$GC,predictions1,col = "red")
#sustract the influence of GC
resi <- log(RC_DT$RC+0.01)-predictions1
RC_DT$NRC <- resi
setkey(RC_DT,GC)
#plot scatter and line using Norm GC data
#plot(RC_DT$GC,RC_DT$NRC,cex=0.1,xlab="GC Content",ylab=expression("NRC"["GC"]))
gcCount.loess <- loess(NRC~GC,data=RC_DT,control = loess.control(surface = "direct"),degree=2)
predictions2 <- predict(gcCount.loess,RC_DT$GC)
#lines(RC_DT$GC,predictions2,col="red")
lst[[Samp]] <- RC_DT
}
NRC_DT <- rbindlist(lst)
save(RC_DT,file="/home/ywliao/project/Gengyan/NRC_DT.Rdata")

####loess len vs RC###
setkey(RC_DT,Len)
len.loess <- loess(RC_DT$NRC~RC_DT$Len, control = loess.control(surface = "direct"),degree=2)
predictions2<- predict (len.loess,RC_DT$Len)
#plot scatter and line 
plot(RC_DT$Len,RC_DT$NRC,cex=0.1,xlab="Length",ylab=expression(paste("log(RC"["GC"],"+0.01)",sep="")))
lines(RC_DT$Len,predictions2,col = "red")

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。