Как установить параметр "длина" в распределении Вейбулла. Я пытаюсь смоделировать кривую реакции маркетинговой кампании по почте

Я пытаюсь изогнуть кривую, чтобы смоделировать ответы от прямой почтовой рассылки с течением времени. Используя R, я смог получить форму и коэффициент масштабирования, используя функцию fitdistr(). Затем я использую форму и масштаб в качестве параметров в функции weibull(). Однако наши кампании обычно длятся 63 дня (8 недель), и "длина" подобранной кривой Вейбулла преждевременно обрезается. Есть ли способ установить "длину"?

... ИЛИ есть ли лучший способ смоделировать ответы маркетинговой кампании Direct Mail???

Спасибо!

set.seed(5)
install.packages("MASS")
library("MASS")
responses <-c(4,5,1,12,24,16,16,15,5,18,7,12,5,13,6,2,9,2,5,1,4,4,5,3,3,4,7,3,9,2,2,4,3,2,5,4,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,3,2,1,1,1,1,1,1,1,1,1)                                                                                        

f <- fitdistr(responses,'weibull')

f #check the shape and scale

#plug in the shape and scale. 284 is the number of total responders that we're trying to fit the curve to. 
weibulldraws <- as.data.frame(table(round(.5 +   rweibull(284,1.0753863,4.6579543))))
weibulldraws

1 ответ

Решение

Когда вы табулируете вектор с table()в результате появляются только те значения, которые встречаются в векторе; если вы хотите включить другие значения, вам нужно создать фактор с этими значениями, включенными в качестве уровней. Таким образом, если вы хотите включить все нули в конце, перед тем, как суммировать, превратите свой результат в коэффициент с соответствующими уровнями:

set.seed(5)
wshape <- 1.0753863
wscale <- 4.6579543
n <- 284
rvals <- round(rweibull(n,wshape,wscale)+0.5)
frvals <- factor(rvals,levels=0:63)
weibulldraws <- as.data.frame(table(frvals))

Если вы вместо этого хотели нарисовать теоретическую кривую, связанную с Вейбуллом (то есть кривую плотности, а не таблицу, соответствующую случайному вытягиванию из распределения), используйте curve() с dweibull() функция:

curve(n*dweibull(x,wshape,wscale),from=0,to=63)

(использование add=TRUE добавить кривую к существующему графику).

Другие вопросы по тегам