0
我正在嘗試編寫for循環,它使用內置函數,在每次運行時更改其參數的值。for循環來更改內置函數的參數的值
內置函數是來自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,但是當我嘗試使用協變量「grossTon」時,故事是不同的,它的潛在價值在10到120之間。我想要的是總噸值取值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
非常感謝提前。