1

1 列から始まるマトリックスの値のサンプルを取得するシミュレーションを実行しています。次に、それらを選択基準に通してから、マトリックスの各行から、出力から値をランダムに選択し、そのランダムな選択を保存します。何らかの理由sampleで、実数と a を持つ行の行列に適用すると、NAサンプリングすることさえできない数値が返されます。関数に何か問題がある可能性がありますsampleが、この未知の値がどこから来ているのかわかりません。

コード例:

theta <- c(30, 84, 159, 32, 60, 97)
omega <- 0.01
k <- 1
xn <- matrix(c(30, 84, 159, 32, 60, 97), ncol=1)

dup <- xn * 2 

set.seed(1)
z <- matrix(rbinom(n=rep(1,length(dup)),size = as.vector(dup),prob = 0.5),nrow = nrow(dup))            
z1 <- dup - z           
xn <- cbind(z, z1) # put both in a matrix
W <- exp( -(1/2)*( ( ( xn - theta ) / theta ) ^2 / omega ) )         

set.seed(1) 
Z <- matrix(rbinom(nrow(W) * ncol(W), 1, W), nrow=nrow(W), ncol=ncol(W) ) 
xn <- ifelse ( Z == 0, 0, xn )

xn
     [,1] [,2]
[1,]   32    0
[2,]   78    0
[3,]  144    0
[4,]    0   30
[5,]   60   60
[6,]   92  102

0 の値を含めたくないので、値を変更してから、各行に関数をNA適用して単一の値を返します。sample

xn[which(xn==0)] <- NA
set.seed(1)
xn2 <- matrix(apply(xn, 1, function(x){sample(x[!is.na(x)], size = k)}), ncol = k)

私が得るべきものは

xn
     [,1]
[1,]   32 
[2,]   78 
[3,]  144 
[4,]   30
[5,]   60
[6,]  102

しかし、私が得るものは:

xn
     [,1]
[1,]   9
[2,]   30
[3,]   83
[4,]   24
[5,]   60
[6,]  102

具体的には、この例では、値 9、23、55、および 24 がどこからともなく出てきています。

このサンプルを取得するときに、私がどのような間違いを犯しているのか誰か知っていますか?

4

1 に答える 1

2

コメントを要約すると、

?sample言う

x の長さが 1 で、数値 (is.numeric の意味で) であり、x >= 1 の場合、sample によるサンプリングは 1:x から行われます。

あなたのアプリケーションでは、 が長さ 1 の場合、実際には の代わりにxの値を使用したいだけです。渡す前にの長さが1 より大きいかどうかを確認するチェックを追加することで、コードを調整できます。xsample(x)xsample

matrix(apply(xn, 1, function(x){
  if (length(x[!is.na(x)]) > 1) { 
    sample(x[!is.na(x)], size = k) 
  } else x[!is.na(x)] 
}), ncol=k)
     [,1]
[1,]   32
[2,]   78
[3,]  144
[4,]   30
[5,]   60
[6,]  102
于 2012-06-29T00:14:03.057 に答える