【问题标题】:gaussian smoother in rr中的高斯平滑器
【发布时间】:2015-05-07 12:40:24
【问题描述】:

我正在使用 ggplot 绘制以下数据,并且我正在尝试拟合一个更平滑的曲线来捕捉曲线的类高斯性质。我已经尝试过标准的黄土和样条平滑器,但它们会导致前线出现巨大的下降,但并不存在(我尝试附上 stat_smooth() 结果的图像,但我没有 10 个声望点)我是stackoverflow的新手)。

我现在正试图通过创建一个高斯形状的公式 (MyFormula) 并在 stat_smooth 函数中使用它来强制高斯平滑,但我收到以下错误,我认为这是因为 MyFormula 方程不是t 被 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

【问题讨论】:

  • f

标签: r gaussian smooth


【解决方案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))

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 2011-02-15
    • 2011-01-20
    • 2015-01-21
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多