给定模式的截断法线
Truncated normal with a given mode
我想生成具有以下属性的随机截断正态分布。
- 下限= 3
- 更高的债券= 5
- 在第一位使用一组固定值(3.0,3.1,3.2,...,4.9,5.0)
- 模式=3
- 出现 5 的概率应该是出现 3 的概率的 50%。
我能够处理前 3 个步骤,但我正在努力寻找一种方法来设置 mode=3 并在上限和下限的出现上建立固定关系。
library(truncnorm)
library(ggplot2)
set.seed(123)
dist<- as.data.frame(list(truncnorm=round(rtruncnorm(10000, a=3, b=5, mean=3.3, sd=1),1)))
ggplot(dist,aes(x=truncnorm))+
geom_histogram(bins = 40)+
theme_bw()
如您所见,我可以创建具有所需边界的截断法线。
这个发行版的问题有两个。
- 首先,我希望
truncnorm==3.0
成为众数(即我的分布中出现频率最高的值,而在本例中众数为 truncnorm==3.2
- 其次,我希望 5.0 值的计数为 3.0 值的 50%。例如,如果我生成了一个包含 800 个
truncnorm=3.0
观测值的分布,则应该有大约 400 个 truncnorm=5.0
. 观测值
幸运的是,使用截断正态分布可以满足您的所有要求。
让low = 3
和high = 5
.
简单地计算均值 low
和标准差 sqrt(2)*(high-low)/(2*sqrt(ln(2))
.[=21 的正态分布的密度(在离散点,例如 3.0、3.1、...、4.9、5.0) =]
此标准差是通过以下函数与均值为 0 且标准差为 z
的正态密度成正比的函数得出的:
f(x) = exp(-(x-0)**2/(2*z**2))
因为 f(0) = 1,我们必须找到必要的标准偏差 z
使得 f(x) = 1/2
。解决方案是:
g(x) = sqrt(2)*x/(2*sqrt(ln(2))
并将high-low
代入x
得到上面给出的最终标准偏差。
我想生成具有以下属性的随机截断正态分布。
- 下限= 3
- 更高的债券= 5
- 在第一位使用一组固定值(3.0,3.1,3.2,...,4.9,5.0)
- 模式=3
- 出现 5 的概率应该是出现 3 的概率的 50%。
我能够处理前 3 个步骤,但我正在努力寻找一种方法来设置 mode=3 并在上限和下限的出现上建立固定关系。
library(truncnorm)
library(ggplot2)
set.seed(123)
dist<- as.data.frame(list(truncnorm=round(rtruncnorm(10000, a=3, b=5, mean=3.3, sd=1),1)))
ggplot(dist,aes(x=truncnorm))+
geom_histogram(bins = 40)+
theme_bw()
如您所见,我可以创建具有所需边界的截断法线。 这个发行版的问题有两个。
- 首先,我希望
truncnorm==3.0
成为众数(即我的分布中出现频率最高的值,而在本例中众数为truncnorm==3.2
- 其次,我希望 5.0 值的计数为 3.0 值的 50%。例如,如果我生成了一个包含 800 个
truncnorm=3.0
观测值的分布,则应该有大约 400 个truncnorm=5.0
. 观测值
幸运的是,使用截断正态分布可以满足您的所有要求。
让low = 3
和high = 5
.
简单地计算均值 low
和标准差 sqrt(2)*(high-low)/(2*sqrt(ln(2))
.[=21 的正态分布的密度(在离散点,例如 3.0、3.1、...、4.9、5.0) =]
此标准差是通过以下函数与均值为 0 且标准差为 z
的正态密度成正比的函数得出的:
f(x) = exp(-(x-0)**2/(2*z**2))
因为 f(0) = 1,我们必须找到必要的标准偏差 z
使得 f(x) = 1/2
。解决方案是:
g(x) = sqrt(2)*x/(2*sqrt(ln(2))
并将high-low
代入x
得到上面给出的最终标准偏差。