2

私の質問のほとんどに対処するコードで更新されました。

私は人口推定のためにMLEの反復を生成するための控えめな機能を持っています。(R では反復が不適切な形式であることはわかっていますが、Excel スプレッドシートのメソッドに付随する非線形検索手順を詳細に示しようとしています)。

n <- c(32,54,37,60,41) # number of captures 
R <- c(32,36,6,13,5) # of marked fish returned to the population

fn <- function(x){
  N = 97 #starting value of N
  mle = matrix(0, nrow=x, ncol=8) #per suggestion
  colnames(mle) = c("N","g.N","h.N","N1","g.N1","h.N1","delta.h","corr") #added column names
    
  for (i in 1:x) {
         g.N = prod(1-n/N)
         h.N = N-sum(R)-N*g.N
         N1 = N-1
         g.N1 = prod(1-n/N1)
         h.N1 = N1-sum(R)-N*g.N1
         delta.h = h.N-h.N1
         corr = -h.N/delta.h
   
  #print(c(N,g.N,h.N,N1,g.N1,h.N1,delta.h,corr))#original output
  
  mle[i,] = c(N,g.N,h.N,N1,g.N1,h.N1,delta.h,corr) #per suggestion
      N = N+corr
}
return(mle) #per suggestion
}

fn(5)

これにより、次の出力が作成されます

        N        g.N          h.N       N1       g.N1       h.N1   delta.h          corr
[1,] 97.00000 0.04046356 1.075034e+00 96.00000 0.03851149  0.2643856 0.8106486 -1.326141e+00
[2,] 95.67386 0.03788200 4.954192e-02 94.67386 0.03597455 -0.7679654 0.8175073 -6.060119e-02
[3,] 95.61326 0.03776543 2.382189e-03 94.61326 0.03586008 -0.8154412 0.8178234 -2.912841e-03
[4,] 95.61035 0.03775983 1.147664e-04 94.61035 0.03585458 -0.8177238 0.8178386 -1.403289e-04
[5,] 95.61020 0.03775956 5.529592e-06 94.61020 0.03585432 -0.8178338 0.8178393 -6.761220e-06

出力をクリーンアップしたいのですが、コードをクラックして、結果をマトリックスまたはdata.frame、または列のタイトルを付けて数字、数値形式などを意味のある形式に調整できる形式に入れることができませんでした方法。私は cat と format で限られた成功を収めてきましたが、私が望むことを正確に行うことができませんでした。これをテーブル、マトリックス、または data.frame としてフォーマットするのに役立つヘルプをいただければ幸いです。

4

1 に答える 1

1

あなたの機能は実際には機能しません(nたとえば)。とにかく、次のようなものが必要です。

   N<-97 #starting value of N
   m = matrix(0, nrow=5, ncol=7)
   for (i in 1:x) {
     #<snip>

     m[i,] = c(N,g.N,N1,g.N1,h.N1,delta.h,corr)
     N<-N+corr
   }
   return(m)
 }
于 2012-11-04T19:43:58.507 に答える