0

これはすでに私を夢中にさせており、今では完全に絶望的です:(

これがマトリックスdrawです(NAに注意しないでください。後でこれらの列が必要になります):

      [,1] [,2] [,3] [,4] [,5]  
[1,]    1    0   NA   NA   NA  
[2,]    2   20   NA   NA   NA  
[3,]    2   30   NA   NA   NA  
[4,]    2   40   NA   NA   NA  
[5,]    1   50   NA   NA   NA  
[6,]    2   70   NA   NA   NA  
[7,]    2   80   NA   NA   NA  
[8,]    2   90   NA   NA   NA  
[9,]    1  100   NA   NA   NA
[10,]   2  120   NA   NA   NA
[11,]   2  130   NA   NA   NA
[12,]   2  140   NA   NA   NA

したがって、列 1 に応じて、正規分布から列 3 に数値を書き込む必要があります。しかし、6% のケースでは 0 でなければなりません。

これは私がそれに対処するために考えた方法です(今ではそれは時だけですdraw[i,1]==2):

for (i in 1:nrow(draw))
{
    p <- runif(1, min=0, max=1)
    if (draw[i,2]==2 && p>0.06) 
    {   
        draw[i,3] <- rnorm(1, mean=17, sd=7.5)} else {draw[i,3]<-0}

    if (draw[i,1]==1) {draw[i,3] <- rnorm(1, mean=11, sd=3)}
    if (draw[i,1]==3) {draw[i,3] <- rnorm(1, mean=17, sd=15)}
    if (draw[i,3]<1 && draw[i,3]!=0) {draw[i,3] <- 1} else {draw[i,3] <- ceiling(draw[i,3])
}
}

そして、問題が発生します: 1. p (私が推測する乱数でなければなりません) は常に同じであることに気付きます 2. draw[1,2]==2 であるすべての draw[i,3] は 0 です。これは奇妙です。 p>0.06 の場合でも発生するため:

      [,1] [,2] [,3] [,4] [,5]
 [1,]    1    0   19   NA   NA
 [2,]    2   20    0   NA   NA
 [3,]    2   30    0   NA   NA
 [4,]    2   40    0   NA   NA
 [5,]    1   50   11   NA   NA
 [6,]    2   70    0   NA   NA
 [7,]    2   80    0   NA   NA
 [8,]    2   90    0   NA   NA
 [9,]    1  100    7   NA   NA
[10,]    2  120    0   NA   NA
[11,]    2  130    0   NA   NA
[12,]    2  140    0   NA   NA

どうして?!なにが問題ですか?

4

1 に答える 1

3

うーん。draw[i,1]==2あなたは何かをしたいときにそれを言いますが、あなたのコードではあなたが書いていdraw[i,2]==2ます... それはおそらく問題です!

# This line might work better:
if (draw[i,1]==2 && p>0.06) 

...しかし、とにかく厄介なようです。多分これはあなたが意味したものですか?-私がそこに入れたバグを除いて:)

for (i in 1:nrow(draw)) {
  p <- runif(1, min=0, max=1)

  draw[i,3] <- if (p <= 0.06) 0
    else switch(draw[i,1], 
      rnorm(1, mean=11, sd=3),   # 1
      rnorm(1, mean=17, sd=7.5), # 2
      rnorm(1, mean=17, sd=15)   # 3
    )

  draw[i,3] <- if (draw[i,3]<1 && draw[i,3]!=0) 1 else ceiling(draw[i,3])
}
于 2012-05-12T20:44:42.557 に答える