Petr, You could use nonlinear regression to fit two Guassian peaks. For example,
fit <- nls(sig ~ d + a1*exp(-0.5*((time-c1)/b1)^2) + a2*exp(-0.5*((time-c2)/b2)^2), start=list(a1=15, b1=20, c1=315, a2=4, b2=50, c2=465, d=1.5), data=temp) plot(temp, type="l") lines(temp$time, predict(fit), lty=2, col="red") Jean On Thu, Mar 21, 2013 at 8:17 AM, PIKAL Petr <petr.pi...@precheza.cz> wrote: > Hi > > I went through some extensive search to find suitable method (package, > function) to fit multiple peaks. The best I found is ALS package but it > requires rather complicated input structure probably resulting from GC-MS > experimental data and seems to be an overkill to my problem. > > I have basically simple two column data frame with columns time and sig > > dput(temp) > structure(list(time = c(33, 34, 37.33333, 44.66667, 56, 70, 85, > 99.66667, 114, 127.33333, 140, 151.66667, 163, 174, 185, 196, > 206.66667, 217.33333, 228, 238.66667, 249.33333, 260, 271, 282, > 292.66667, 303.66667, 314.33333, 325.33333, 336, 346.66667, 357.33333, > 368, 379, 389.66667, 400.33333, 411, 421.66667, 432.33333, 443, > 454, 465, 476, 487, 497.66667, 508.33333, 519, 530, 541, 551.66667, > 562.33333, 573, 584, 595, 606, 616.66667, 627.33333, 638, 649, > 659.66667, 670.33333, 681, 692, 703, 713.66667, 724.33333, 735, > 746, 757, 768, 779, 789), sig = c(1.558, 1.5549, 1.5619, 1.5614, > 1.5618, 1.6044, 1.6161, 1.6287, 1.6432, 1.6925, 1.7273, 1.6932, > 1.669, 1.6863, 1.6962, 1.7186, 1.7513, 1.8325, 1.9181, 2.01, > 2.1276, 2.2821, 2.5596, 2.9844, 4.1272, 13.421, 15.422, 14.119, > 11.491, 8.8799, 6.7774, 5.6223, 4.8775, 4.3628, 4.0517, 3.9146, > 3.8704, 3.9162, 4.0372, 4.0948, 4.2054, 4.1221, 3.9145, 3.5724, > 3.2108, 2.8311, 2.4605, 2.1985, 1.9685, 1.8158, 1.7487, 1.692, > 1.6565, 1.6374, 1.609, 1.5927, 1.5401, 1.5366, 1.5614, 1.5314, > 1.4989, 1.5053, 1.4953, 1.4824, 1.4743, 1.4468, 1.4698, 1.4671, > 1.4675, 1.4704, 1.4966)), .Names = c("time", "sig"), row.names = c(NA, > -71L), class = "data.frame") > > When it is plotted there are clearly 2 peaks visible. > > plot(temp, type="l") > > Does anybody know how to decompose those data to two (or more) gaussian > (or other) peaks? > > I can only think about nlme but before I start from scratch I try to ask > others. > > Best regards > Petr > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.