r中的高斯平滑

时间:2015-03-05 23:26:35

标签: r gaussian smooth

我正在使用ggplot来绘制下面的数据,我正在尝试使用更平滑的方法来捕捉曲线的高斯式特性。我已经尝试过标准的黄土和样条平滑器,但它们会导致前线中没有大幅下降(我尝试附加stat_smooth()结果的图像,但我没有10个声望点,因为我'我是stackoverflow的新手。

我现在正试图通过创建一个高斯形状的公式(MyFormula)并在stat_smooth函数中使用它来强制高斯平滑,但我得到以下错误,我认为这是因为MyFormula方程是'由FrontBack分隔:

  

“model.frame.default中的错误(公式= C $ mean_Dye~max(C $ mean_Dye)+:     变量长度不同(找到'max(C $ mean_Dye)')“

对于前后线,是否有更简单的方法为这些数据拟合高斯形状(或任何其他代表性)平滑器?

MyFormula=C$mean_Dye~max(C$mean_Dye)*exp(-0.5*((C$Meters-mean(C$Meters))/sd(C$Meters))^2)     

ggplot(C, aes(x=Meters, y=mean_Dye, color=FrontBack)) + geom_point(pch=19, size = 6, alpha=1/4) + geom_errorbar(aes(ymin=mean_Dye-seDye, ymax=mean_Dye+seDye), width=0.1) + coord_cartesian(ylim=c(-100,100), xlim=c(16,50)) + stat_smooth(method="gam", formula=MyFormula, group=C$FrontBack, se=F)

 Meters     mean_Dye   seDye    FrontBack  
 17.0      -0.005      0.05        Front
 29.0       0.036      0.05        Front
 31.5       50.78      14.3        Front
 32.5       69.82      8.04        Front
 33.0       58.53      5.72        Front
 33.5       50.93      5.29        Front
 34.5       43.15      3.70        Front
 37.0       15.51      4.02        Front
 49.0       0.069      0.03        Front
 17.0       0.111      0.023        Back
 23.0       1.92       0.278        Back
 26.0       5.98       0.743        Back
 28.0       12.13      1.186        Back
 30.0       18.99      1.419        Back
 31.0       19.04      0.916        Back
 32.0       18.17      1.416        Back
 33.0       16.51      2.143        Back
 34.0       13.99      2.178        Back
 35.0       11.85      2.136        Back
 36.0       6.63       1.751        Back
 38.0       0.97       0.689        Back
 40.0       0.099      0.116        Back
 43.0       0.004      0.039        Back
 49.0       0.041      0.040        Back

1 个答案:

答案 0 :(得分:1)

以前的帖子中发现的答案很棒。

f<-function(x, theta) {
    m<-theta[1]; s<-theta[2]; a<-theta[3]; b<-theta[4];
    a*exp(-0.5*((x-m)/s)^2) + b
}

fit<-nls(y~f(x,c(m,s,a,b)), data.frame(x,y), start=list(m=12, s=5, a=12, b=-2))