6

ループを使用してmvn 共変量で行列nを作成しようとしています。非常に単純ですが、これまでのところ機能していません...これが私のコードです:kk

n=1000
k=5
p=100
mu=0
sigma=1
x=matrix(data=NA, nrow=n, ncol=k)


for (i in 1:k){
        x [[i]]= mvrnorm(n,mu,sigma)
       }

何が欠けていますか?

4

3 に答える 3

14

ここでいくつかのことがわかります:

  1. 複製可能性のためにランダム シードを設定することもできます ( set.seed(20430))。これは、コードを実行するたびに、まったく同じ擬似乱数変量のセットが得られることを意味します。
  2. 次に、データは独立した変量になります。実際には、多変量構造はありません (ただし、それが必要な場合もあります)。一般に、多変量データを生成する場合は、MASSパッケージの?mvrnormを使用する必要があります。(詳細については、こちらを参照してください。)
  3. マイナーな点として、標準mu = 0の法線データが必要な場合は、およびを指定する必要はありません。sigma = 1これらは のデフォルト値だからですrnorm()
  4. R で行列を埋めるためにループは必要ありません。好きなだけ値を生成し、関数のdata=引数を使用して直接追加するだけです。matrix()ループを使用することに本当にコミットしている場合は、おそらく二重ループを使用して、列をループし、各ループ内で行をループする必要があります。(これは R でコーディングする非常に非効率的な方法であることに注意してください。ただし、私は常にそのようなことを行っています ;-)。
  5. p最後に、あなたのコードで 何をしているのかわかりません。

これは、あなたが行っているように見えることを行うための基本的な方法です。

set.seed(20430)
n   = 1000
k   = 5
dat = rnorm(n*k)
x   = matrix(data=dat, nrow=n, ncol=k)

本当にループを使用したい場合は、次のようにすることができます。

mu    = 0
sigma = 1
x     = matrix(data=NA, nrow=n, ncol=k)

for(j in 1:k){
   for(i in 1:n){
        x[i,j] = rnorm(1, mu, sigma)
   }
}
于 2013-02-04T01:00:13.663 に答える
1
A=c(2,3,4,5);# In your case row terms
B=c(3,4,5,6);# In your case column terms
x=matrix(,nrow = length(A), ncol = length(B));
for (i in 1:length(A)){
     for (j in 1:length(B)){
          x[i,j]<-(A[i]*B[j])# do the similarity function, simi(A[i],B[j])       
     }
}
x # matrix is filled

私は自分の問題の観点から考えていました。

于 2015-04-04T19:16:39.317 に答える