1

(相対的な) 少量の繰り返し回数 = 10,100 で完全に機能する for ループがあります。しかし、「時間」の値が大きい場合、行列を埋めることでエラーが発生します: 下付き文字が範囲外です... (以下のコードとコードの説明を参照)

エラー: Error in M_zp_var[j, (1:n)] : subscript out of bounds

行列を埋めるために、最初の for ループで 2 番目の for ループを使用します

M_zp<-matrix(numeric(1),B,N)
for(j in 1:dim(M_zp)[1]){ M_zp[j,]<-Z_pi(x,y) }

そして私もそれを試しました

M_zp<-t(replicate(B, Z_pi(x,y)))

代わりに、それも機能しません。

私が言ったように、私のouter-for-loopが小さい場合、コードは機能します。変数の「倍」を大きく(1000、5000)選択すると、なぜ異なる動作をする必要があるのか​​ わかりません。

「範囲外の添字」の意味を知っています

あなたが私を助けてくれることを願っています。:(

コード:

T_p<- matrix(numeric(1),times,Bvar)
  H0 <- numeric(times)
  for(i in 1:times){
    # Each loop starts with a new random vector
    x<-rnorm(n)   #x<- rdist(n,...); #
y<-rnorm(m)   #y<- rdist(m,...); #

# Order statstic with T_pi's T(Z(pi))
n<-length(x)
m<-length(y)
N<-n+m

#Permutate (x,y) B times
**M_zp<-matrix(numeric(1),B,N)
for(j in 1:dim(M_zp)[1]){ M_zp[j,]<-Z_pi(x,y) }** #see below for Z_pi() funct.
#M_zp<-t(replicate(B, Z_pi(x,y)))
M_zp_var<-unique(M_zp)
Bf<-dim(unique(M_zp))[1]

#Test statistic computation for each one of the Permutations in M_zp_var
T_pvec<-numeric(Bvar)
for(j in 1:Bvar){
  xp<-M_zp_var[j,(1:n)]
  yp<-M_zp_var[j,((n+1):(n+m))]
  m_xp<- mstern(xp) 
  m_yp<- mstern(yp) 
  T_pvec[j]<-(sd(xp)-sd(yp))/sqrt(m_xp/n+m_yp/m)
}
T_p[i,]<-sort(T_pvec)
}


Z_pi<-function(x,y){
  n<-length(x)
  m<-length(y)
  x<-sort(x)
  y<-sort(y)
  wicy<-function(s){ wi<-which(y==s); return(wi)}
  wicx<-function(s){ wi<-which(x==s); return(wi)}
  r<-sample(1:min(n,m),1)   #interger beween 1 and min(m+n) = length of entries to interchange between x and y
  zwy<-sample(y,r)          #vector of length r out of entries in y (randomly) =intries to interchange with x
  wy<-unlist(lapply(zwy,wicy))
  zwx<-sample(x,r)
  wx<-unlist(lapply(zwx,wicx))

  yp<-y
  xp<-x
  yp[wy]<-zwx
  xp[wx]<-zwy
  zp<-c(sort(xp), sort(yp))
  return(zp)
}

説明:

ループは、順列テスト (モンテカルロ) を「回」回シミュレートします。1 つのループは 2 つのランダム サンプルを生成し、それらを B=16000 回ランダムに並べ替えます (並べ替えは関数 で行われますZ_pi())。次に、異なる並べ替え ( unique()) のみを取得し、各並べ替えからテスト統計を計算します... コードは停止します関数を含むマークされた行 (太字) で作業しますZ_pi()

4

0 に答える 0