2017-11-29 7 views
1

制限付きおよび制限なしモデルの場合、$par$objectiveの値をnlminbから見つける必要があります。制限されたモデルは、初期モデルからの可能なすべての行ペアの合計です。初期モデルは、マトリックスnnで表されます。たとえば、すべての列の合計は、次のペアに対して計算する必要があります。 1,3;すべての可能なペアについて1,4などとなる。ループで行列にFUNを適用する

> nn 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] 
[1,] 3 0 0 0 0 0 0 0 1 
[2,] 55 73 59 3 1 0 16 0 12 
[3,] 10 0 14 0 0 0 3 0 1 
[4,] 3 2 21 14 0 0 0 0 0 
[5,] 145 34 300 24 0 0 26 0 3 
[6,] 883 298 1561 82 6 7 202 7 99 
[7,] 20 19 135 89 0 8 3 2 0 
[8,] 533 369 2026 280 18 4 294 6 75 
[9,] 2820 641 4082 611 28 17 1052 75 253 
[10,] 662 175 1140 301 8 9 214 2 48 
[11,] 2206 342 1989 330 23 12 715 21 277 
[12,] 210 350 1463 207 10 7 23 7 30 

私のコードは以下の通りです:

z_Obj<-list() 
z_Par<-list() 
for(i in 1:nrow(nn)){ 
    for(j in 2:nrow(nn)){ 
    if (j!=i){ 
     f_2<-function(par,n){ 
     u1<-par[1] 
     u2<-par[2] 
     u3<-par[3] 
     u4<-par[4] 
     u5<-par[5] 
     u6<-par[6] 
     u7<-par[7] 
     u8<-par[8] 
     u9<-par[9] 
     n=nn[i,1:9]+nn[j,1:9] 
     -sum(n*log(par/(sum(par)))) 
     } 
     z<-nlminb(c(1,0,0,0,0,0,0,0,0),objective = f_2,lower = 0.000001, upper = Inf) 
     z_Obj[[i]]<-z$objective 
     z_Par[[i]]<-z$par 
    } 
} 
} 

問題は、コードがすべての可能なペアの$par$objectiveを推定していないということであり、唯一の1,1のようなペアのために結果を提供します。 2,2; 3,3。そして、私は走る必要はありません。 コードに関する問題の解決にお役立てください。ありがとうございました! :)私はdput(NN)を実行すると、それは私にこの結果を与え

> dput(nn) 
structure(c(3L, 55L, 10L, 3L, 145L, 883L, 20L, 533L, 2820L, 662L, 
2206L, 210L, 0L, 73L, 0L, 2L, 34L, 298L, 19L, 369L, 641L, 175L, 
342L, 350L, 0L, 59L, 14L, 21L, 300L, 1561L, 135L, 2026L, 4082L, 
1140L, 1989L, 1463L, 0L, 3L, 0L, 14L, 24L, 82L, 89L, 280L, 611L, 
301L, 330L, 207L, 0L, 1L, 0L, 0L, 0L, 6L, 0L, 18L, 28L, 8L, 23L, 
10L, 0L, 0L, 0L, 0L, 0L, 7L, 8L, 4L, 17L, 9L, 12L, 7L, 0L, 16L, 
3L, 0L, 26L, 202L, 3L, 294L, 1052L, 214L, 715L, 23L, 0L, 0L, 
0L, 0L, 0L, 7L, 2L, 6L, 75L, 2L, 21L, 7L, 1L, 12L, 1L, 0L, 3L, 
99L, 0L, 75L, 253L, 48L, 277L, 30L), .Dim = c(12L, 9L)) 
+0

'dput(nn)'を実行して出力をあなたの質問に貼り付けてください。 –

+0

@ClausWilke dput(nn)の出力を追加しました。 –

答えて

0

このコードは、行と列のすべての組み合わせを生成し、その合計を計算します。

# generate matrix of all combinations  
row_comb <- combn(nrow(nn), 2) 
col_comb <- combn(ncol(nn), 2) 

# predefine vector for results 
row_sums <- rep(NULL, ncol(row_comb)) 
col_sums <- rep(NULL, ncol(col_comb)) 

# calculate sums of all combinations 
for (i in 1:ncol(col_comb)) (
    col_sums[i] <- (sum (nn [, col_comb [,i]])) 
) 

for (i in 1:ncol(row_comb)) (
    row_sums[i] <- (sum (nn [row_comb [,i], ])) 
) 

あなたの問題の解決に役立つことを願っています! :-)