組み込み関数を使用する 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
よろしくお願いします。