3

返品の標準偏差が 0.03 で、1 + x = 1 の積になるように、一連の返品 x を生成したいと考えています。要約すると、返品には 2 つの条件があります。

1)sd(x) == 0.03

2)prod(1+x) == 1

これは可能ですか?もしそうなら、どうすればRで実装できますか?

ありがとうございました。

4

2 に答える 2

5

もう少し洗練されたアプローチは、対数正規分布の知識を使用することです: から?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 と正確に等しくはないが近い値が生成されます。必要に応じて、これも修正できます...

于 2012-12-21T16:54:21.273 に答える
3

非常に単純なアプローチは、要件を満たすセットが得られるまで単純に返品をシミュレートすることです。ただし、要件に対する許容範囲を指定する必要があります (理由はこちらをご覧ください)。

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
于 2012-12-21T16:48:50.527 に答える