2016-03-06 4 views
1

У меня есть эта простая цепь Маркова:Марковская цепочка: многократная функция R для отображения значений состояния в n временных меток?

library(markovchain) 
mcSIR <- new("markovchain", states=c("S","I","R"), 
    transitionMatrix=matrix(data=c(0.9,0.1,0,0,0.8,0.2,0,0,1), 
    byrow=TRUE, nrow=3), name="SIR") 
is <- c(99,1,0) # initial States 

Как я определяю многоразовые функции "fvals",
, который возвращает (для любого цепи Маркова),
данных Кадр с значениями состояния для n временных меток?

вызов будет выглядеть так:

fvals(mcSIR,is,5) # show state values for 5 timesteps 

Выход Кадр данных «fvals» будет выглядеть следующим образом:
(примечание: временных шагов являются второй столбец слева и начинать с нуля).

1 timestep   S   I   R 
2   0   99   1   0 
3   1   89.1   10.7   0.2 
4   2  80.19  17.47   2.34 
5   3  72.17   22   5.83 
6   4  64.95  24.81  10.23 
7   5  58.46  26.35   15.2 

Причина: Эта функция будет полезна для тестирования различного MCs,
без повторения кода R для каждого из них, каждый раз, когда ...

ответ

1

эта функция может помочь вам:

fvals<-function(mchain,initialstate,n) { 
    names(initialstate)<-names(mchain) 
    for (i in 0:n) 
    { 
    out<-initialstate*mchain^(i) 
    cat(i," ",out,"\n") 
    } 
} 
fvals(mcSIR,is,5) 
+0

Спасибо за простой и эффективный ответ, Джорджио! Оно работает. Q1) Как преобразовать вывод fvals() в «обычный» кадр данных ?. Q2) Возможно, эта полезная и часто используемая функция (fvals) может быть включена в пакет «markovchain»? – user39150

+1

Привет, это может помочь: https://qualityandinnovation.com/2015/12/08/a-discrete-time-markov-chain-dtmc-sir-model-in-r/ –