Как изменить одну кривую Вейбулла, чтобы аппроксимировать другую кривую Вейбулла?

У меня есть один набор данных, который я хочу откалибровать по другому. Что делает это сложным, так это то, что у меня нет полного дистрибутива, у меня есть данные подсчета. Я знаю, что распределение должно быть распределением Вейбулла, поэтому я создал 2 кривые Вейбулла, но тогда я не знаю, что делать, чтобы масштабировать одну по другой.

Набор данных, который я хочу откалибровать, выглядит следующим образом: у меня есть ячейки, счетчики в каждой ячейке и понимание того, к чему относятся ячейки в реальном мире (x). Откалиброванные данные — это лазер, и я хочу посмотреть, как те же самые события, измеренные в акустическом сигнале, совпадают с лазером.

calibrated.data <- data.frame(bins=1:30, 
                              counts=c(39317, 127633, 168713, 169734, 136713, 92202, 66831, 
                                       52198, 57662, 25492, 13085, 6824, 3174, 1789, 247, 
                                       36, 2, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0), 
                              x=c(0.312, 0.437, 0.562, 0.687, 0.812, 0.937, 1.062, 1.187,
                                  1.375, 1.625, 1.875, 2.125, 2.375, 2.75, 3.25, 3.75, 4.25,
                                  4.75, 5.5, 6.5, 7.5, 8.5, 9.5, 11, 13, 15, 17, 19, 21.5, 
                                  24.5))

Данные, которые я хочу откалибровать, имеют только подсчет. Бункеры не отображают 1:1.

new.data <- data.frame(bins=c(1:32,
                       counts=c(13877, 12874, 12217, 11555, 10834, 10220, 9274, 8381, 7414, 
                                6777, 6069, 5272, 4762, 4077, 3607, 3059, 2672, 2173, 1856,
                                1475, 1139, 815, 596, 417, 264, 186, 103, 62, 40, 20, 8, 15))

Зная, что в конечном счете данные следуют за Вейбуллом, я построил кривую Вейбулла, делающую

weib.curve <- function(x, shape, scale, c){
  c * ((x/shape)^(scale-1)) * exp(-(x/shape)^scale)
}

Затем следует параметризация (мне просто нравится подгонка nls).

weib.coef.A <- with(calibrated.data,
                    coef(nls(counts ~ weib.curve(bins, shape, scale,c), 
                             start=list(shape=3.9, scale=-1.5, c=sum(counts)),
                             control=list(maxiter=100))))

weib.coef.new <- with(new.data,
                      coef(nls(counts ~ weib.curve(1:32, shape, scale,c),   
                               start=list(shape=3.9, scale=-1.5, c=sum(counts)),
                               control=list(maxiter=100))))

Итак, теперь у меня есть коэффициенты для двух кривых Вейбулла, но я не знаю, как масштабировать кривую new.data, чтобы она соответствовала калиброванным данным, чтобы я мог сопоставить новые ячейки данных с реальным x.

кривые данных

Если бы я работал с необработанными данными, я знаю, что мог бы сделать что-то вроде Изменение распределения одного набора данных для соответствия другому набору данных Но я не знаю, как это сделать с кривыми распределения.

В конечном итоге я хочу двоякого:

  1. Уравнение, которое позволяет мне моделировать откалиброванные данные (количество ~ x) на основе ввода new.data
  2. Отображение того, как бины в new.data будут равны x.

new.data — это, по сути, уплощенная версия калиброванного.data. На рисунке выше я вижу, что мне нужно увеличить амплитуду счетчиков new.data$ при сжатии контейнеров new.data$ для наложения кривых.


person Danielle Watts    schedule 02.03.2017    source источник
comment
Что такое калибровка одной кривой по другой кривой? Что вы имеете в виду?   -  person user31264    schedule 03.03.2017
comment
Вполне возможно, что я использую неправильную терминологию, и поэтому я не могу найти решение в своих поисках. У меня есть известные x и y для одной кривой и известные y1 (без x1) для другой. Поскольку ввод был одинаковым для всех, я должен был иметь возможность масштабировать y1 и вычислять x1, чтобы он соответствовал известным x и y. Я просто не знаю, как это происходит.   -  person Danielle Watts    schedule 03.03.2017
comment
Приведите простой пример того, что у вас может быть, и какой результат вы ожидаете в этом случае. Это объяснение все еще довольно неясно.   -  person user31264    schedule 03.03.2017
comment
Надеюсь, я сделал это более ясным. Мне действительно не хватает языка для этого. Я хочу изменить распределение новых.данных, чтобы оно соответствовало распределению калиброванных.данных, но мне также нужно выяснить, на что сопоставляются ячейки для x в новых.данных.   -  person Danielle Watts    schedule 03.03.2017
comment
Пакет fitdistrplus может помочь. обязательно прочитайте виньетки.   -  person greengrass62    schedule 03.03.2017