我正在尝试使用rpois()
创建泊松仿真。我有两个小数点后利率的分布,我想找出它们是否具有泊松分布而不是正态分布。rpois()
函数返回正整数。我希望它返回两个小数位正数。我尝试了以下
set.seed(123)
trialA <- rpois(1000, 13.67) # generate 1000 numbers
mean(trialA)
13.22 # Great! Close enough to 13.67
var(trialA)
13.24 # terrific! mean and variance should be the same
head(trialA, 4)
6 7 8 14 # Oh no!! I want numbers with two decimals places...??????
# Here is my solution...but it has a problem
# 1) Scale the initial distribution by multiplying lambda by 100
trialB <- rpois(1000, 13.67 * 100)
# 2) Then, divide the result by 100 so I get a fractional component
trialB <- trialB / 100
head(trialB, 4) # check results
13.56 13.62 13.26 13.44 # terrific !
# check summary results
mean(trialB)
13.67059 # as expected..great!
var(trialB)
0.153057 # oh no!! I want it to be close to: mean(trialB) = 13.67059
如何使用
rpois()
生成具有泊松分布的正两位小数。我知道泊松分布用于计数,并且计数是正整数,但我也相信泊松分布可用于对利率建模。这些比率可能只是正整数除以标量。
最佳答案
如果缩放Poisson分布以更改其均值,结果将不再是Poisson,并且均值和方差不再相等-如果将均值按因子s
进行缩放,则方差将因数。
您可能要使用Gamma分布。 Gamma的平均值为s^2
,方差为shape*scale
,因此必须使用shape*scale^2
来获得均值和方差相等的实数,正数:
set.seed(1001)
r <- rgamma(1e5,shape=13.67,scale=1)
mean(r) ## 13.67375
var(r) ## 13.6694
您可以舍入到小数点后两位,而无需太多改变均值和方差:
r2 <- round(r,2)
mean(r2) ## 13.67376
var(r2) ## 13.66938
与泊松分布进行比较:
par(las=1,bty="l")
curve(dgamma(x,shape=13.67,scale=1),from=0,to=30,
ylab="Probability or prob. density")
points(0:30,dpois(0:30,13.67),type="h",lwd=2)