2013-01-31 1 views
1

3 개의 공변량을 사용하는 MSM (Multistage Markov) 모델을 장착했습니다. 나는 주요한 인자가 MSM 모델과 공변량의 값에 맞는 함수를 적용하려고 노력하고있다. 이 기능은 다음과 같습니다중첩 된 for-loop 출력을 벡터에 결합

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 (아래 참조)의 공변량 조합과 함께 제공하는 값입니다. 나는 48 벡터를 얻을 기대하고있어 내 기능에서 루프 모두와

[1] 0.06140559 0.01609661 0.04502546 0.04801757 0.118968868 0.029152476 0.003356196 

(7 개 값 이전에 유사한 모두) grossTon (12 개 값)와 액티브의 모든 조합의 결과를 (4 개 값), 마지막으로 모든 것을 단일 벡터 (336 개의 값, 7 * 12 * 4)로 결합합니다. 내 벡터를 생성하는 i와 j에 대처하는 방법을 모르는

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) 

:

내 기능입니다. 내가 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 

]됩니다 내가 estim[c(i,j)]

error in `[<-.data.frame`(`*tmp*`, c(i, j), value = c(0.0614055886960195, : 
    new columns would leave holes after existing columns 

outp[c(i,j)]<-c(estim[c(i,j)])를 작성할 때 다음과 같은 오류가 그리고이 다른거야.

+0

라파엘 (Rafael), 질문을 시작하는 것이 좋지만 함수가 생성해야하는 벡터에 대한 정보를 더 추가 할 수 있습니까? 그리고 현재 코드에서 어떤 종류의 오류가 발생합니까? – Dinre

+0

잘하면 지금은 분명하다. – Rafael

답변

2

"견적"데이터 프레임의 길이가 "추정치"의 길이 7 인 벡터의 치수가 잘못되었습니다. 또한 "outp"를 선언하지 않으므로 데이터 프레임 할당이 성공한 후에 인터프리터 코드가 도착하면 다른 오류가 발생합니다. (어쨌든 'outp'에 할당하는 추가 단계를 취하는 이유는 분명하지 않습니다.) c("q12","q21","q23","q32","q14","q24","q34")이라는 열이있는 48 행 데이터 프레임을 만들고 올바른 행 = i + 12 * j에 할당하는 것이 더 쉬울까요? 순차 색인을 사용합니까?

transRate<-function(period){ 
    estim<-data.frame(q12=1:48, q21=0, q23=0, q32=0, q14=0, q24=0, q34=0))) 

    for(i in seq(1,12)){ 
    for(j in seq(0,3, by=1)){ 

    estim[ i+12*j , ] <- qmatrix.msm(cav.msm, ci="normal", 
       covariates=list(grossTon = i*10, activ=j, period=period))$ 
                estimates[c(5,2,10,7,13,14,15)] 
     } 
    } 

    return(estim)      
} 

dataFrame<-transRate(period=1) 

(다른 차원으로 그 'grosTvect'객체가 "추정"결과 줄을했는데 방법을 알아낼 수 없습니다.)

+0

위대한 !! 그것은 효과가 있었다. 도와 주셔서 정말로 고맙습니다. – Rafael

0

데이터 프레임 estim은 하나의 열이 있습니다. 이 열은 행렬입니다. estim[i,j]과 같은 작업을 수행하면 데이터 프레임의 열에 액세스하게됩니다. 실제로 내부의 데이터 프레임에 액세스하려고한다고 생각합니다. 따라서 행렬을 채우려면 estim[1][,c(i,j)] 행을 따라 무언가를 사용해야합니다.

관련 문제