返品の標準偏差が 0.03 で、1 + x = 1 の積になるように、一連の返品 x を生成したいと考えています。要約すると、返品には 2 つの条件があります。
1)sd(x) == 0.03
2)prod(1+x) == 1
これは可能ですか?もしそうなら、どうすればRで実装できますか?
ありがとうございました。
もう少し洗練されたアプローチは、対数正規分布の知識を使用することです: から?dlnorm
、Var= exp(2*mu + sigma^2)*(exp(sigma^2) - 1)。幾何平均を 1 にしたいので、対数スケールでの平均は 0 にする必要がありVar = exp(sigma^2)*(exp(sigma^2)-1)
ますuniroot
。
正しい対数分散を見つけます。
vfun <- function(s2,v=0.03^2) { exp(s2)*(exp(s2)-1)-v }
s2 <- uniroot(vfun,interval=c(1e-6,100))$root
値を生成します。
set.seed(1001)
x <- rnorm(1000,mean=0,sd=sqrt(s2))
x <- exp(x-mean(x))-1 ## makes sum(x) exactly zero
prod(1+x) ## exactly 1
sd(x)
これにより、標準偏差が 0.03 と正確に等しくはないが近い値が生成されます。必要に応じて、これも修正できます...
非常に単純なアプローチは、要件を満たすセットが得られるまで単純に返品をシミュレートすることです。ただし、要件に対する許容範囲を指定する必要があります (理由はこちらをご覧ください)。
nn <- 10
epsilon <- 1e-3
while ( TRUE ) {
xx <- rnorm(nn,0,0.03)
if ( abs(sd(xx)-0.03)<epsilon & abs(prod(1+xx)-1)<epsilon ) break
}
xx
収量
[1] 0.007862226 -0.011437600 -0.038740969 0.028614022 0.006986953
[6] -0.004131429 0.030846398 -0.037977057 0.046448318 -0.025294236