Конечные цепи Маркова: задача о рынке труда

Задача от занятости на рынке труда
Рассмотрим человека, который в любой момент времени t, находится в одном из двух сотояний:  “работает” (состояние 1) или “безработы” ( состояние 2)
работник переходит из состояния “работает” в состояние “безработы” с вероятностью α
работник переходит из состояния “безработы” в состояние “работает” с вероятностью β

Зададим матрицу вероятностей перехода

Clear["Global`*"]
P=(({{1-α, α}, {β, 1-β}}))
α=0.2 (*вероятность потерять работу*)
β=0.6 (*вероятность найти работу*)
P//MatrixForm

Найдем цепь конечную цепь маркова с дискретным временем и исходным состоянием 1 и 
найдем вероятность нахождения в состоянии 1 (работает) и 2 (безработный)
 [Способ 1, аналитически]

dp=DiscreteMarkovProcess[1,P];

PDF[StationaryDistribution[dp],1]
PDF[StationaryDistribution[dp],2]

Найдем цепь конечную цепь маркова с дискретным временем и исходным состоянием 2 и 
найдем вероятность нахождения в состоянии 1 (работает) и 2 (безработный)  
[Способ 2, аналитически]

dp=DiscreteMarkovProcess[1,P];

Probability[n==1,n\[Distributed]StationaryDistribution[dp]]
Probability[n==2,n\[Distributed]StationaryDistribution[dp]]

Найдем цепь конечную цепь маркова с дискретным временем и исходным состоянием 1 и 
найдем вероятность нахождения в состоянии 1 (работает) и 2 (безработный)  
[Способ 3, числено]

dp=DiscreteMarkovProcess[1,P];

NProbability[n==1,n\[Distributed]StationaryDistribution[dp]]
NProbability[n==2,n\[Distributed]StationaryDistribution[dp]]

Найти стационарное (эргодическое) распределение цепи Маркова (это такое распределение вероятности, которое не меняется с течением времени):

dist=StationaryDistribution[dp]

Найти стационарное (эргодическое) распределение цепи Маркова (это такое распределение вероятности, которое не меняется с течением времени):

dist=StationaryDistribution[dp]

Вероятность состояния на каждом шаге

dp1=DiscreteMarkovProcess[1,P]; (*исходное состоянием 1*)
 (*1 шаг*) PDF[dp1[1],t]  
 (*2 шаг*) PDF[dp1[2],t]  
(*3 шаг*)  PDF[dp1[3],t]   
(*5 шаг*)  PDF[dp1[5],t]
(*12 шаг*) PDF[dp1[12],t]

dp2=DiscreteMarkovProcess[2,P]; (*исходное состоянием 2*)
 (*1 шаг*) PDF[dp2[1],t]  
 (*2 шаг*) PDF[dp2[2],t]  
(*3 шаг*)  PDF[dp2[3],t]   
(*5 шаг*)  PDF[dp2[5],t]
(*12 шаг*)PDF[dp2[12],t]

Вероятность состояния на каждом шаге, исходное состояние 1, вероятность в первом состоянии

PDF[dp1[∞],1]
PDF[dp1[1],1]
PDF[dp1[2],1]
PDF[dp1[3],1]
ListPlot[Table[PDF[dp1[t],1],{t,0,5}],PlotRange->{0.5,1},Filling->Axis]

Graph[dp1]

First Passage Time - время первого достижения
First Passage Time Distribution - распределение времени вхождения в заданное состояние

Какова вероятность проработать в течении трех/десяти месяцев, если сначала была работа?

Probability[t[1]==1&&t[2]==1&&t[3]==1,t\[Distributed]dp1](*исходное состояние задавать не нужно, берется из процесса*)
1-CDF[FirstPassageTimeDistribution[dp1,2],3]//N (*1 - накопленная вероятность распределения вероятности вхождения в первый раз в состояние 2 в течении 3 циклов*)
Likelihood[dp1,{1,1,1,1}](*исходное состояние обязательно нужно, определяется вероятность получения заданной последовательности *)

1-CDF[FirstPassageTimeDistribution[dp1,2],10]//N
Likelihood[dp1,Array[1&,11]]

Какова вероятность проработать в течении трех/десяти месяцев, если сначала  работы не было?

Probability[t[1]==1&&t[2]==1&&t[3]==1,t\[Distributed]dp2](*исходное состояние задавать не нужно, берется из процесса*)
Likelihood[dp2,{2,1,1,1}](*исходное состояние обязательно нужно, определяется вероятность получения заданной последовательности *)
1-CDF[FirstPassageTimeDistribution[dp2,2],3]//N (*1 - накопленная вероятность распределения вероятности вхождения в первый раз в состояние 2 в течении 3 циклов*)

1-CDF[FirstPassageTimeDistribution[dp2,2],10]//N
Likelihood[dp2,Prepend[Array[1&,10],2] ]

Какова вероятность потерять работу хотя бы один раз в течении 10 мес, если сначала была работа?

CDF[FirstPassageTimeDistribution[dp1,2],10]//N
1-Likelihood[dp1,Array[1&,11]]

Какова вероятность потерять работу только один раз в течении 10 мес, если сначала была работа?

Permutations[Prepend[Array[1&,10],2] ]
%[[2;;All]]
(Likelihood[dp1,#]&/@Permutations[Prepend[Array[1&,10],2] ][[2;;All]])
Times@@(Likelihood[dp1,#]&/@Permutations[Prepend[Array[1&,10],2] ][[2;;All]])

Сколько в среднем нужно потратить времени на поиск работы (естественно, исходное состояние работы нет) ?
(First Passage Time Distribution - распределение времени вхождения в заданное состояние)

Mean[FirstPassageTimeDistribution[dp2,1]]//N

Сколько в среднем работник проработает на одном месте (естественно, исходное состояние работа есть) ?

Mean[FirstPassageTimeDistribution[dp1,2]]//N

Средняя время занятости в состоянии работы/безработицы

MarkovProcessProperties[dp1,"HoldingTimeMean"](*среднее время занятости *)

Имитация состояния человека на период 12 периодов 
(исходное состояние 1)

dp1=DiscreteMarkovProcess[1,P];
rf=RandomFunction[dp1,{1,12}]
ListPlot[rf,Ticks->{Automatic,{{1,"Работает"},{2,"Безработы"}}},Filling->Axis]

Имитация состояния человека на период 12 периодов 
(исходное состояние 2)

dp2=DiscreteMarkovProcess[2,P];
rf=RandomFunction[dp2,{1,12}]
ListPlot[rf,Ticks->{Automatic,{{1,"Работает"},{2,"Безработы"}}},Filling->Axis]

Имитационное моделирование по нахождению состояния занятости человек на выборке k

k=100000;
rf=RandomFunction[dp,{1,k}]["Values"];
Count[rf,1]/k  //N
Count[rf,2]/k   //N

Модель погоды

Предполагается, что мы один раз в день (например, в полдень) смотрим в окно и регистрируем в журнале текущее состояние погоды. Мы условились, что лишь одно из трех ниже названных состояний в день мы записываем в журнал:

Состояние № 1: дождь (или снег)
Состояние № 2: пасмурно
Состояние № 3: ясно:

Clear["Global`*"]
P={{0.4,0.3,0.3},{0.2,0.6,0.2},{0.1,0.1,0.8}};
proc=DiscreteMarkovProcess[3,P];
Graph[proc]

Исходя из того, что погода в первый день (t =1) ясная (состояние 3), мы можем задать себе вопрос: какова вероятность (согласно нашей модели), что следующие 7 дней будет именно «ясно — ясно — дождь — дождь — ясно — пасмурно — ясно»?

1*P[[3,3]]P[[3,3]]P[[3,1]]P[[1,1]]P[[1,3]]P[[3,2]]P[[2,3]]
Likelihood[proc,{3,3,3,1,1,3,2,3}]

Вычислим среднее время, в течение которого система сохранит свое состояние

1/(1-P[[1,1]])
1/(1-P[[2,2]])
1/(1-P[[3,3]])
MarkovProcessProperties[proc,"HoldingTimeMean"]

proc=DiscreteMarkovProcess[3,P];
Mean[FirstPassageTimeDistribution[proc,1] ]
Mean[FirstPassageTimeDistribution[proc,2] ]
Mean[FirstPassageTimeDistribution[proc,3] ]
MarkovProcessProperties[proc,"HoldingTimeMean"]

StationaryDistribution[proc]
PDF[proc[100],1]
PDF[proc[0],1]

MarkovProcessProperties[proc]

P={{0.4,0.3,0.3},{0.2,0.6,0.2},{0.1,0.1,0.8}};
P//MatrixForm
MatrixPower [P,2]//MatrixForm
MatrixPower [P,3]//MatrixForm
MatrixPower [P,4]//MatrixForm
MatrixPower [P,5]//MatrixForm
MatrixPower [P,6]//MatrixForm
MatrixPower [P,100]//MatrixForm