【发布时间】:2013-01-31 12:12:49
【问题描述】:
我使用 3 个协变量拟合了一个多阶段马尔可夫 (MSM) 模型。我正在尝试应用一个函数,其主要参数适合 MSM 模型和协变量值。功能是:
transition<-qmatrix.msm(MSMmod, ci="normal", covariates=list(grossTon= 10, activ=0, period=1))
这个函数的输出是估计值:
Owning<10 Owning10-40 Owning>40 left
Owning<10 -0.18037446 0.06140559 0.00000000 0.118968868
Owning10-40 0.01609661 -0.09027454 0.04502546 0.029152476
Owning>40 0.00000000 0.04801757 -0.05137377 0.003356196
left 0.00000000 0.00000000 0.00000000 0.000000000
我只对其中的一些感兴趣,所以transition$estimates[c(5,2,10,7,13,14,15)] 我得到了;例如,函数 qmatrix.msm 使用协变量组合 GrossTon=120、active=0 和 period=1 给出的值(见下文)。
[1] 0.06140559 0.01609661 0.04502546 0.04801757 0.118968868 0.029152476 0.003356196
在我的函数中使用两个 for 循环,我期望得到 48 个向量(每个 7 个值,类似于前一个),因为 GrossTon(12 个值)和 activ(4 个值)的所有组合,因此最终将它们全部组合成一个向量(336 个值,7*12*4)。
这是我的功能:
transRate<-function(period){
estim<-data.frame(matrix(rep(0,336),336,1))
for(i in seq(10,120,by=10)){
for(j in seq(0,3, by=1)){
estim[c(i,j)]<-qmatrix.msm(msm.Mult4, ci="normal", covariates=list(grossTon=i, activ=j, period=period))$estimates[c(5,2,10,7,13,14,15)]
outp[c(i,j)]<-c(estim[c(i,j)])#Here I'm trying to get my 336 values vector
}
}
grosTvect<-sort(rep(seq(10,120,by=10),28))
rate<-rep(c("q12","q21","q23","q32","q14","q24","q34"),48)
estimRate<-data.frame(grosTvect,rate,outp)
return(estimRate)
}
dataFrame<-transRate(period=1)
我不知道如何处理 i 和 j 来生成我的向量。
我在写estim[c(i,j)] 时遇到以下错误
和outp[c(i,j)]<-c(estim[c(i,j)])
error in `[<-.data.frame`(`*tmp*`, c(i, j), value = c(0.0614055886960195, :
new columns would leave holes after existing columns
当我写 estim[i,j] 和 outp<-estim[i,j 时,这个其他的]
Error in `[<-.data.frame`(`*tmp*`, i, j, value = c(0.0614055886960195, :
replacement has 7 rows, data has 1
任何帮助将不胜感激。
【问题讨论】:
-
Rafael,你有一个很好的问题开始,但是你能添加更多关于你的函数应该产生的向量的信息吗?您当前的代码是否出现某种错误?
-
希望现在更清楚了。