使用集成函数查找连续概率曲线下的区域 - 查找营销活动的完成百分比?

Using the integrate function to find area under a continuous probability curve -finding % completion of a marketing campaign?

我正在尝试建立一个模型来预测直邮营销活动的响应。在下面的代码中,我能够使用之前活动的响应来创建平滑曲线(即连续概率)。现在,我需要找到这条曲线下每一天的总面积,以便我知道在给定的一天完成活动的百分比。理论上,使用 integrate 函数然后使用 diff 函数找到区域之间的差异应该可行。例如,我将能够找到第 2 天后曲线下的面积并减去第 1 天后曲线下的面积。了解每一天的额外曲线下面积将帮助我了解每一天的完成百分比。问题是我想不出一种方法来整合这条 64 天的曲线,使总密度总和为 1。

#vector of direct mail marketing responses over 63 days  
responses <- c(24.16093706,
41.59607507,
68.20083052,
85.19109064,
100.0704403,
58.6600221,
86.08475816,
88.97439581,
65.58341418,
49.25588053,
53.63602085,
47.03620672,
29.71552264,
32.85862747,
31.29118096,
23.67961069,
19.81261675,
18.69300933,
17.25738435,
12.01161679,
12.36734071,
14.32360673,
11.02390849,
9.108021409,
9.647965622,
8.815576548,
5.67225654,
5.739220185,
6.233999138,
5.527376627,
5.024065761,
5.565266355,
4.626749364,
3.480761716,
4.621902301,
4.518554271,
4.075985188,
3.204946787,
3.174020873,
2.966915873,
2.129178828,
2.673009031,
2.410429043,
2.331287075,
2.509300578,
2.13820695,
2.53433787,
1.603934405,
1.555813592,
1.834605068,
1.842905685,
1.454045577,
2.08684322,
1.318276487,
0.807666643,
1.333167088,
1.004526525,
1.180110123,
1.078079735,
1.151394678,
1.426747942,
0.699119833,
0.583347236)


set.seed(2) 
## install.packages("MASS") 
library("MASS")

shape_and_scale <- fitdistr(responses,'weibull')

shape_and_scale

#now use the curve() function, dweibull, and the shape and scale parameters to create a smooth curve 
curve results <- curve(dweibull(x,0.70730466,13.79467490),from=0, to=63)

现在我需要一种方法来整合这条曲线,以找到第 1 天、第 2 天、第 3 天等之后曲线下的面积。之后,我应该能够使用 diff 找出第 2 天和第 1 天之间的差异,等等,我可以用它来找出每天之后的活动完成百分比。在我上面的代码中,我将曲线从 0 截断到 63。有没有办法使用它?例如,如果我只是这样做: diff(pweibull(0:63,0.70730466,13.79467490)) 我没有利用我已经将曲线从 0 截断到 63 这样密度不会加到 1 的事实。

例如:

sum(diff(pweibull(0:63,0.70730466,13.79467490))) 等于 .94,这等同于:integrate(dweibull, 0, 63, shape = 0.70730466,scale = 13.79467490)

...但是这些并没有利用在第一段代码中我已经将曲线截断为 63 天的事实。我只是想对其进行积分,以便曲线下面积的总和为 1?

谢谢

我想你正在寻找

d0 <- diff(pweibull(0:63,0.70730466,13.79467490))

如果您只想将其归一化为 1,则将其除以 pweibull(63,...)sum(d0)(两者相同)。

如果您想要一个包含 63 岁以上所有内容的最终类别,请使用

d1 <- diff(pweibull(c(0:63,Inf),0.70730466,13.79467490))
sum(d1)   ## 1

后者相当于c(d0,1-sum(d0)).