Гистограмма R — fit: пиковый сигнал плюс фон

#r #histogram #curve-fitting

#r #гистограмма #подгонка по кривой #подгонка кривой

Вопрос:

Мне нужно сопоставить с R гистограмму, содержащую пиковый сигнал плюс плоский фон. Как эти:

Изображения Google Ссылка на:

рис. http://wwwasd.web.cern.ch/wwwasd/paw/contributions/bwp4_fit.gif

Как я могу эффективно работать в R? Я не нашел ни одной хорошей ссылки в Интернете. Я привык делать это в ROOT: http://root.cern.ch/root/html/tutorials/fit/FittingDemo.C.html но в R это не так просто…

Я кое-что сделал, используя fitdistr (МАССОВЫЙ пакет), но он работает хорошо, только если я использую одно заданное распределение (например, гауссово). Если я попытаюсь добавить к гауссову плоскому (однородному) фону, добавив параметр для относительного присутствия двух распределений:

 f = gaus(mean, sigma)   r * uniform
  

с параметрами mean, sigma и r free подгонка больше не работает.

Типичными ошибками являются:

 Error in solve.default(res$hessian) : 
  Lapack routine dgesv: system is exactly singular: U[1,1] = 0
In addition: There were 28 warnings (use warnings() to see them)
  

или просто нет конвергенции.

Наконец, я не понимаю, как R имеет дело с константами нормализации (мультипликативные параметры перед каждым добавленным распределением). Я предполагаю, что если мы подберем частоты, то все (гистограмма и кривая подгонки) уже должны быть нормализованы до единицы.. Следовательно, единственным новым параметром при добавлении плоского фона к пиковому сигналу должен быть относительный вес (r в приведенном выше примере). Так ли это?

Спасибо, Марко

Комментарии:

1. Там нет гистограммы. У вашего вставленного изображения нет смещения фона. Если вам нужна существенная помощь, вам нужно опубликовать точный код и воспроизводимый образец данных. В то же время предположение: несколько процедур подгонки завершатся неудачно из-за отсутствия шума. Возможно, что, загружая solve.default «идеальный» набор данных, вы где-то получаете единственную матрицу.

2. Изображение было просто примером, взятым из Google, для описания концепции. В любом случае код с точным набором данных может быть примерно таким: b <- runif(1000, 0, 10) s <- rnorm(n = 500, 4, 0.3) sb <- c(b, s) hist(sb, breaks = 100)