2016-07-17 3 views
-2

긴 코드로 무서워하지 마십시오. 내가 궁금한 점은 마지막 부분 인 음모 (단계 재미 ... 부분.) 내가 이것을 Rstudio에 입력하면 "stepfun"x "점점 커야합니다"Stepfun function markov

내가 여기있는 any1이 누구인지 알고 있습니다. 을 제대로 마무리해야?

bd_process <- function(lambda, mu, initial_state = 0, steps = 100) { 
    time_now <- 0 
    state_now <- initial_state 

    time <- 0 
    state <- initial_state 
    for (i in 1:steps) { 

if (state_now == 3) { 
    lambda_now <- 0 
} else { 
    lambda_now <- lambda 
} 

if (state_now == 0) { 
    mu_now <- 0 
} else { 
    mu_now <- mu 
} 

time_to_transition <- rexp(mu, rate = 1) + rexp(lambda, rate = 1) 

X <- rexp(mu, rate = 1) 
Y <- rexp(lambda, rate = 1) 

if (X < Y) { 
    state_now <- state_now - 1 
} else { 
    state_now <- state_now + 1 
} 
time_now <- time_now + time_to_transition 
time <- c(time, time_now) 
state <- c(state, state_now) 
} 

list(time = time, state = state) } 

set.seed(19930628) 

proposal1 <- bd_process(lambda = 2, mu = 10) 
proposal2 <- bd_process(lambda = 6, mu = 10) 
proposal3 <- bd_process(lambda = 10, mu = 10) 


time1 <- proposal1$time 
state1 <- proposal1$state 

plot(stepfun(time1[-1], state1), 
do.points = FALSE, 
xlab = "Tid", 
ylab = "Tillstånd", 
main = "", 
yaxt = "n") 
axis(2, at = c(0, 1, 2, 3), las = 2) 
+0

글쎄,'stepfun' 함수가 데이터 정렬을 기대하기 때문에 오류 메시지가 들린다. 너 그거 해봤 니? 어쩌면'? stpfun'에 대한 도움말 페이지를 읽으십시오. 원하는 결과가 무엇인지 전혀 설명하지 않으면 도움이되지 않습니다. "올바른"것이 무엇을 의미하는지는 알 수 없습니다. – MrFlick

+0

질문은 정말 길고 마지막으로 제가 설명하려고했을 때 투표가 끝났습니다. – PeterNiklas

+0

나는 변화가 필요한 것을 알고 싶을뿐입니다. 그래서 나는 KNIT 할 수 있습니다. 예를 들어 time1 [-1], state1 및 time1 [100], state1 [100] 등을 시도했습니다. – PeterNiklas

답변

0

을 난 당신의 코드가 무엇을하고 있는지 모르겠지만 당신이 걱정하지 말라고 요청했습니다. 지금이 순간 당신은 "시간 간격을 구축 한 것으로 보인다 "이제는 적절한 시간 축을 따라 그들을"함께 쌓거나 "통합 할 필요가 있습니다. 스텝 기능의 시뮬레이션을 플롯하기 위해서는 time1 벡터를 생성하기 위해 cumsum을 사용해야합니다."시간 "과" 상태 "variabl ES는 다른 길이가 state1 변수에 대한 올바른 길이 때문에 함수 인수에 대한 빠른 수정이 time1 벡터 트리밍의, 그리고 당신과 함께 오류를 얻을 : 어쩌면

plot(stepfun(cumsum(time1[2:101]), state1), 
do.points = FALSE, 
xlab = "Tid", 
ylab = "Tillstånd", 
main = "", 
yaxt = "n") 
axis(2, at = c(0, 1, 2, 3), las = 2) 

만약 당신이 "행진 스텝 - 코드를 통해 단계별로 설명하고 의견을 사용하여의 수보다 많은 수의 10 배의 수를 얻게됩니다. 나는 그것이 "mu"를 rexp(mu, rate = 1)의 첫 번째 인수로 사용하는 것과 관련이 있다고 생각합니다. R의 난수 생성자에 대한 첫 번째 인수는 일반적으로 분포에서 길이 (난수의 수)를 결정하는 양의 정수입니다.

+0

제한된 정보로는 대답하기 어려울 수도 있지만 time1을 정의하는 것이 가능합니다. 오름차순으로? – PeterNiklas

+0

"시간"이 연속적이지 않고 나중에 "시간"에 의한 중간 시간의 검열 또는 지배가 없다면 '정렬'과 '순서'기능이 모두 있습니다. 일반적으로'order' 함수가 선호 될 것입니다. 왜냐하면 시뮬레이션에서 다중 벡터가 동일한 재정렬 연산을 가질 필요가 있기 때문입니다. 하나의 벡터 만 선택하고 다른 벡터는 '정렬'하지 않으면 시간적 연관성이 사라집니다. –

관련 문제