首页 > 编程知识 正文

shell有哪几种类型的变量,linux grep命令详解

时间:2023-05-03 12:56:37 阅读:162292 作者:198

在想调查不同的sample的某个变量a之间的差异时,其他几个变量b对该变量的固有影响往往会影响不同的sample变量a的比较,此时需要将sample变量a标准化后进行比较。 标准化方法是对sample的a变量和b变量进行loess回归,拟合与变量a的变量b相关的函数f(b ),f ) b )表示a的理论在b的影响下取值,a-f ) b ) ) a相对于f ) b的残差

Loess局部加权多项式回归

LOWESS最初由Cleveland提出,后来由ClevelandDevlin和其他许多人发展。 在r中,loess函数是基于lowess函数的更复杂、更强大的函数。 主要思想是:在数据集合的每个点用低维多项式拟合数据点的子集,并估计对应于该点附近的自变量数据点的因子值。 该多项式用权重最高的jxdyd乘法进行拟合; 距离该点越远,权重越小,该点的回归函数值通过该局部多项式得到,用于加权最大jxdyd次幂回归的数据子集由最近邻法决定。

最大的优点:是,为了使一个模型适合所有数据,不需要事先设定函数。 然后,可以对同一数据进行多次不同的拟合。 先拟合一个变量,再拟合另一个变量,探索数据中可能存在的关系。 这是普通的回归拟合做不到的。

LOESS平滑方法

1 .以x0为中心确定区间,可以灵活掌握区间的宽度。 具体而言,区间的宽度取决于q=fn。 这里,q为与局部回归相关的观察值的个数,f为与参加局部回归的观察值的个数的比例,n为观察值的个数。 在实际应用中,经常选定f -数,然后根据f和n确定q的取值,一般f的取值在1/3和2/3之间。 q和f的取法一般没有固定的标准。 增大q值或f值时,平滑值的平滑度增加,对于数据中前面的细微变化模式,分辨率较低,但噪声较小,对于数据中较大的变化模式,表现良好; 的q值和f值小,曲线粗糙,分辨率高,但噪声大。 没有标准的f值。 总是调试和比较是明智的。

2 .定义区间内所有点的权重。 权重由权重函数决定。 例如,三次加权函数weight=(1-((dist/maxdist) ),dist是距离x的距离并且maxdist是区间中的距离x的最大距离。 任意点(x0,y0 )的权重是权重函数曲线的高度。 权重函数应包括三个特性: (1)权重函数上的点(x0,y0 )具有最大权重。 )2)当x远离x0 )时,权重逐渐减少。 (3)权函数以x0为中心对称。

3 .对区间内的散布点拟合曲线y=f(x )。 被拟合的直线反映直线关系,接近x0的点在直线的拟合中起主要作用,区间外的点它们的权重为零。

4. x0的平滑点是拟合直线上x0的拟合点(y0,f(x0 ) )。

5 .求所有点的光滑点,连接光滑点即可得到Loess回归曲线。

r语言代码

loess (公式,数据,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 (

公式是公式,例如y~x,可以输入1到4个变量;

data是变量所在的数据框,如果data为空,则在环境中查找;

NA.action指定na数据的处理,默认为getoption('na.action );

模型是否返回模型框;

跨度是一个alpha参数,可以控制平滑度。 相当于上述的f。 如果alpha小于1,则权重函数是立方权重,而如果alpha小于1,则使用所有点。 最大距离为alpha ^ (1/p ),p为解释变量。

anp.target,定义span的替代方法;

normalize,对多变量normalize转到同一个scale;

family如果是gaussian则使用最大jxdyd乘法,如果是symmetric则使用双重权重函数进行再次下降的m估计;

method是适应模型,或者只提取模型框架;

control进行更高级的控制,使用loess.control的参数

其他参数请自己参照手册,寻找资料

loess.control(surface=c ) interpolate,) direct )、

状态=c (approximate,) exact )、

trace.hat=c(exact,) approximate )、

cell=0.2,iterations=4,)

surface,拟合表面是从kd数进行插值还是进行精确计算;

statistics,统计数据是精确计算还是近似,精确计算很慢

trace.hat,要跟踪的平滑的矩阵精确计算或近似?建议使用超过1000个数据点逼近,

cell,如果通过kd树最大的点进行插值的近似。大于cell floor(nspancell)的点被细分。

robust fitting使用的迭代次数。

predict(object, newdata = NULL, se = FALSE,

na.action = na.pass, ...)

object,使用loess拟合出来的对象;

newdata,可选数据框,cmdxs寻找变量并进行预测;

se,是否计算标准误差;

对NA值的处理

实例

生物数据分析中,我们想查看PCR扩增出来的扩增子的测序深度之间的差异,但不同的扩增子的扩增效率受到GC含量的影响,因此我们首先应该排除掉GC含量对扩增子深度的影响。

数据

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

先用loess进行曲线的拟合

gcCount.loess

画出拟合出来的曲线

predictions1

#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")

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

#sustract the influence of GC

resi

RC_DT$RC

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

save(gcCount.loess,file="/home/ywliao/project/Gengyan/gcCount.loess.Robject")

predictions2

lines(RC_DT$GC,predictions2,col="red")

save(RC_DT,file="/home/ywliao/project/Gengyan/RC_DT.Rdata")

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

全部代码如下:

library(data.table)

load("/home/ywliao/project/Gengyan/RC_DT.Rdata")

####loess GC vs RC####

gcCount.loess

predictions1

#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

RC_DT$RC

setkey(RC_DT,GC)

#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

save(gcCount.loess,file="/home/ywliao/project/Gengyan/gcCount.loess.Robject")

predictions2

lines(RC_DT$GC,predictions2,col="red")

save(RC_DT,file="/home/ywliao/project/Gengyan/RC_DT.Rdata")

####loess len vs RC###

setkey(RC_DT,Len)

len.loess

predictions2

#plot scatter and line

plot(RC_DT$Len,RC_DT$RC,cex=0.1,xlab="Length",ylab=expression(paste("log(RC"["GC"],"+0.01)",sep="")))

lines(RC_DT$Len,predictions2,col = "red")

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。