0

組み込み関数を使用する for ループを作成しようとしており、実行ごとにその引数の 1 つの値を変更しています。

組み込み関数は、msm パッケージ (多段階マルコフ モデル) の qmatrix.mns です。異なるステージ間の遷移率を計算します。その主な引数は、多段階マルコフ モデル (msm.Full) と共変量 (リストで提供) です。

私は次の関数を書きました(うまくいきました):

transRate<-function(grossTon,held, cpue){
  estim<-data.frame(matrix(rep(0,21),7,3))  
  for(i in 1:3){  
    qMatrix<-qmatrix.msm(msm.Full,  ci="normal", covariates=list(grossTon=grossTon,    held=held, cpue=cpue,period=i))

          estim[i]<-qMatrix$estimates[c(5,2,10,7,13,14,15)]# extracts transition rates that I'm interested in
          rownames(estim)<-c("q12","q21","q23","q32","q14","q24","q34")
          colnames(estim)<-c("period 1", "period 2","period 3")
        }

          return(estim)                     
    }                    

    transRate(grossTon=10,held=10,cpue=0.5)

結果は次のとおりです。

    period1     period2     period3
q12 0.011523315 0.01100657  0.01051299
q21 0.006939337 0.00528312  0.004022193
q23 0.161752987 0.079884    0.039451841
q32 0.016379169 0.01661803  0.01686038
q14 1.134517831 1.13026321  1.126024543
q24 0.426243172 0.78585263  1.448854529
q34 0.240552571 0.74682982  2.318639844

共変量「期間」には1、2、3の3つの可能な値があるため、簡単でしたが、潜在的な値が10から120の間の共変量「grossTon」で試してみると、話は異なりました。また、grossTon の値は 10、20、30、...、120 です。

私がしたことを見てください:

transRate<-function(held, cpue, period){
estim<-data.frame(matrix(rep(0,84),7,12)) 
grossT<-c(10,20,30,40,50,60,70,80,90,100,110,120)
  for(i in grossT){  #I guess the problem is here
    qMatrix<-qmatrix.msm(msm.Full,  ci="normal", covariates=list(grossTon=i, held=held, cpue=cpue,period=period))
    estim[i]<-qMatrix$estimates[c(5,2,10,7,13,14,15)]
    rownames(estim)<-c("q12","q21","q23","q32","q14","q24","q34")
    colnames(estim)<-c("10","20","30","40","50","60","70","80","90","100","110","120")

   }
    return(estim)                     
}                    

transRate(held=10,cpue=0.5,period=1)

私が期待しているのは、次の出力です。

    10  20  30  40  50  60  70  80  90  100 110 120
q12                                             
q21                                             
q23                                             
q32                                             
q14                                             
q24                                             
q34 

よろしくお願いします。

4

1 に答える 1

2

目的のベクトルに対してループを実行できます。したがって:

for (i in seq(10,120,by=10)) 

それについて行く1つの方法です。一般的なケースでは、次のことができます

for (i in c(10,15,23,50,100,273))

または必要な値。

于 2013-01-15T12:32:05.040 に答える