Гауссовский сглаживатель в r

Я использую ggplot для построения графика приведенных ниже данных и пытаюсь подобрать более сглаженное изображение, которое улавливает гауссовский характер кривых. Я пробовал стандартные сглаживатели лесса и сплайна, но они приводят к огромным провалам на линии фронта, которых там нет (я пытался прикрепить изображение результата stat_smooth(), но у меня нет 10 очков репутации, поскольку я m новичок в 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

person Rebecca    schedule 05.03.2015    source источник
comment
f‹-функция (x, тета) { m‹-тета[1]; с‹-тэта[2]; а‹-тета[3]; б‹-тета [4]; a*exp(-0.5*((xm)/s)^2) + b } fit‹-nls(y~f(x,c(m,s,a,b)), data.frame(x,y ), начало=список(m=12, s=5, a=12, b=-2))   -  person Rebecca    schedule 21.03.2015


Ответы (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))
person Rebecca    schedule 20.03.2015