Как установить параметр "длина" в распределении Вейбулла. Я пытаюсь смоделировать кривую реакции маркетинговой кампании по почте
Я пытаюсь изогнуть кривую, чтобы смоделировать ответы от прямой почтовой рассылки с течением времени. Используя 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
добавить кривую к существующему графику).