行列 z (3 x 20000) があります。各行を確率変数と見なし、各列を 1 つのシミュレーションと見なします。Rで apply コマンドを使用して次の関数を作成し、3 次元の経験的累積分布関数 (EMP.CDF) を見つけました。この k 変量の経験的 CDF は、 この pdfの 2 ページ目の「多変量 ECDF」のセクションで説明されています。
EMP.CDF=function(z) {
# z is a matrix (3 x 20000) and each row is a realization of a random variable
q1=z[1,];q2=z[2,];q3=z[3,]
# qi = the realization of the ith random variable, i=1,2,3
# Now I am going to evaluate the empirical cumulative distribution function at
# each column of z
# Given each column, the function should return an empirical
# cumulative probability.
d=apply(z,2, function(x) sum(q1<=x[1] & q2<=x[2] & q3<=x[3])/(length(q1)))
return(d)}
> z=matrix(0,3,20000)
> z[1,]=runif(20000,1,2)
> z[2,]=runif(20000,3,5)
> z[3,]=runif(20000,7,9)
> system.time(EMP.CDF(z))
user system elapsed
30.18 0.01 30.39
上記のコードでは k=3 です。上記の関数をベクトル化してシステム時間を短縮する方法はありますか?