我需要从$par
函数中找到限制和非限制模型的$objective
和nlminb
的值。受限模型是初始模型中每个可能的行对的总和。初始模型以矩阵nn
表示。例如,应计算每列的总和:1,2; 1,3; 1,4等等所有可能的对。
> 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 :(得分: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], ] ))
)
我希望这有助于解决您的问题! : - )