Главная страница » Расчет вероятностей переходов при изменении продолжительности цикла Маркова методом спектрального разложения исходной матрицы переходов

Расчет вероятностей переходов при изменении продолжительности цикла Маркова методом спектрального разложения исходной матрицы переходов

Задача из разряда встречающихся в практике при моделировании, опишу ее в общих чертах. Выполняем моделирование исходов на основании раннее выполненного и опубликованного исследования. В модели 3 состояния и более, есть матрица переходов между состояниями с продолжительностью цикла Маркова 1 год. Но в нашем исследовании, например по причине особенностей режима дозирования изучаемого препарата, нужно пересчитать матрицу переходов на длину цикла, равную 1 месяц. Казалось бы, задачка решается очень просто, допуская равномерную плотность инцеденса пересчитываем вероятность (год) в частоту (год), частоту делим на 12 и трансформируем обратно в вероятность (мес.). Как описано, например в Fleurence RL, Hollenbeak CS. Rates and probabilities in economic modelling: transformation, translation and appropriate application. Pharmacoeconomics. 2007;25(1):3-6. doi: 10.2165/00019053-200725010-00002. PMID: 17192114. В нашем случае:

P мес. = 1 – e^-z/n = 1 – e^ln(1-P)/n = 1 – (1 – P)^1/n = 1 – (1 – P)^1/12

P мес – искомая вероятность (мес.)
Р – исходная вероятность (год)
е – число Эйлера
z – частота (год)
n – число месяцев в году

Для примера возьмем часто применяемую модель Маркова с 3-мя состояниями: стабильное, прогрессия, смерть.

Соответственно, получается следующая матрица переходов:

Состояниеstabprogdeathпроверка
stab1 – (P stab-prog) – (P stab-death)P stab-progP stab-death1
prog01 – (P prog-death)P prog-death1
death0011

А именно, матрица переходов с длиной цикла 1 год:

Состояниеstabprogdeathпроверка
stab0,30,20,51
prog00,40,61
death0011

Сделаем пересчет по ранее указанной формуле: P мес. = 1 – e^-z/n = 1 – e^ln(1-P)/n = 1 – (1 – P)^1/n = 1 – (1 – P)^1/12 и получим матрицу переходов с длиной цикла 1 мес.:

Состояниеstabprogdeathпроверка
stab0,9254508430,018423470,0561256871
prog00,9264848720,0735151281
death0011

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

Исходная матрицаПересчитанная матарица
год месstabprogdeathstabprogdeath
00100100
 1   0,9254510,0184230,056126
 2   0,8564590,0341190,109422
 3   0,7926110,047390,159999
 4   0,7335220,0585090,207969
 5   0,6788390,0677210,25344
 6   0,6282320,0752490,296519
 7   0,5813980,0812920,33731
 8   0,5380550,0860270,375918
 9   0,4979440,0896150,412441
 10   0,4608220,0922010,446976
 11   0,4264680,0939130,479619
1120,30,20,50,3946760,0948660,510459
 13   0,3652530,0951630,539584
 14   0,3380240,0948960,56708
 15   0,3128240,0941480,593028
 16   0,2895030,092990,617507
 17   0,2679210,0914870,640592
 18   0,2479480,0896980,662355
 19   0,2294640,0876710,682865
 20   0,2123570,0854540,702189
 21   0,1965260,0830840,72039
 22   0,1818750,0805970,737528
 23   0,1683170,0780220,753661
2240,090,140,770,1557690,0753880,768844
 25   0,1441560,0727150,783128
 26   0,133410,0700250,796565
 27   0,1234640,0673350,809201
 28   0,114260,064660,82108
 29   0,1057420,0620110,832247
 30   0,0978590,0594010,84274
 31   0,0905640,0568370,852599
 32   0,0838120,0543270,861861
 33   0,0775640,0518770,870559
 34   0,0717820,0494920,878726
 35   0,066430,0471770,886393
3360,0270,0740,8990,0614780,0449320,89359
 37   0,0568950,0427620,900343
 38   0,0526540,0406660,90668
 39   0,0487280,0386470,912625
 40   0,0450960,0367030,918201
 41   0,0417340,0348360,92343
 42   0,0386230,0330440,928334
 43   0,0357430,0313260,932931
 44   0,0330790,0296820,93724
 45   0,0306130,0281090,941278
 46   0,0283310,0266070,945063
 47   0,0262180,0251730,948609
4480,00810,0350,95690,0242640,0238050,951931
 49   0,0224550,0225020,955043
 50   0,0207810,0212620,957957
 51   0,0192320,0200810,960687
 52   0,0177980,0189590,963243
 53   0,0164710,0178930,965635
 54   0,0152430,0168810,967875
 55   0,0141070,0159210,969972
 56   0,0130550,0150110,971934
 57   0,0120820,0141480,97377
 58   0,0111810,013330,975488
 59   0,0103480,0125560,977096
5600,002430,015620,981950,0095760,0118240,9786

Решение было найдено в Chhatwal J, Jayasuriya S, Elbasha EH. Changing Cycle Lengths in State-Transition Models: Challenges and Solutions. Medical Decision Making. 2016;36(8):952-964. doi:10.1177/0272989X16656165. В качестве такового возможно использование спектрального разложение матрицы переходов (или разложение матрицы на основе собственных векторов или eigen decomposition). Спектральная декомпозиция не всегда приводит к ожидаемым результатам – могут быть получены отрицательные вероятности перехода или комплексные числа (что делать в этом случае – см. вышеуказанные источник). Однако, в данном примере ограничимся ситуацией, когда применение спектральной декомпозиции приводит к необходимому результату и разберем выполнение данной процедуры в программной среде R. В сухом остатке нам необходимо получить корень 12 степени (12 месяцев в одном году) исходной матрицы переходов или, другими словами, возвести исходную матрицу в 1/12 степень. Формула решения выглядит следующим образом:

P1/12 = V * D1/n * V-1 = V * D1/12 * V-1

P1/12 – искомая матрица переходов с шагом один месяц
V — матрица, столбцы которой являются собственными векторами исходной матрицы
D — диагональная матрица с соответствующими собственными значениями на главной диагонали
V-1 – обратная матрица векторов

В программной среде R решением выглядит следующим образом:

1. В переменную mtrx записываем нашу исходную матрицу

input <- c(0.3, 0.2, 0.5,
           0, 0.4, 0.6,
           0, 0, 1)
mtrx <- matrix(input, nrow = 3, ncol = 3, byrow = T)

2. В переменную Х записываем результаты спектральной декомпозиции исходной матрицы:

X <- eigen(mtrx)
#> X
#eigen() decomposition
#$values  – это собственные значения по диагонали матрицы
#[1] 1.0 0.4 0.3

#$vectors – это собственные векторы матрицы
#          [,1]      [,2] [,3]
#[1,] 0.5773503 0.8944272    1
#[2,] 0.5773503 0.4472136    0
#[3,] 0.5773503 0.0000000    0

3. Применяем формулу P1/12 = V * D1/n * V-1 = V * D1/12 * V-1

X$vectors %*% diag(X$values)^(1/12) %*% solve(X$vectors)

Где:

X$vectors — собственные векторы матрицы

diag(X$values) — диагональная матрица с соответствующими собственными значениями на главной диагонали

solve(X$vectors) — обратная матрица векторов

%*% — знак умножения матриц

Итог:

#> X$vectors %*% diag(X$values)^(1/12) %*% solve(X$vectors)
#          [,1]       [,2]       [,3]
#[1,] 0.9045379 0.04389393 0.05156816
#[2,] 0.0000000 0.92648487 0.07351513
#[3,] 0.0000000 0.00000000 1.00000000

Запишем итог в красивую таблицу и применим эту матрицу в Эксель.

Состояниеstabprogdeathпроверка
stab0,90453790,043893930,051568161
prog00,926484870,073515131
death0011

Результаты с использованием матрицы переходов шагом 1 месяцев в результате применения спектрального разложения матрицы.

Исходная матрицаПересчитанная матарица
год месstabprogdeathstabprogdeath
00100100
 1   0,9045380,0438940,051568
 2   0,8181890,0803710,10144
 3   0,7400830,1103760,149541
 4   0,6694330,1347470,19582
 5   0,6055270,1542250,240248
 6   0,5477230,1694660,282811
 7   0,4954360,1810490,323515
 8   0,448140,1894860,362373
 9   0,405360,1952270,399413
 10   0,3666640,1986670,434669
 11   0,3316610,2001570,468182
1120,30,20,50,30,20,5
 13   0,2713610,1984650,530173
 14   0,2454570,1957860,558757
 15   0,2220250,1921670,585808
 16   0,200830,1877850,611385
 17   0,1816580,1827950,635546
 18   0,1643170,1773310,658352
 19   0,1486310,1715070,679862
 20   0,1344420,1654230,700135
 21   0,1216080,1591630,719229
 22   0,1099990,15280,737201
 23   0,0994980,1463950,754107
2240,090,140,770,090,140,77
 25   0,0814080,1336580,784933
 26   0,0736370,1274060,798957
 27   0,0666070,1212720,812121
 28   0,0602490,115280,824471
 29   0,0544970,109450,836053
 30   0,0492950,1037960,846909
 31   0,0445890,0983290,857082
 32   0,0403330,0930570,86661
 33   0,0364820,0879870,875531
 34   0,0330,083120,883881
 35   0,0298490,0784580,891693
3360,0270,0740,8990,0270,0740,899
 37   0,0244230,0697450,905832
 38   0,0220910,065690,912219
 39   0,0199820,061830,918187
 40   0,0180750,0581620,923763
 41   0,0163490,0546790,928971
 42   0,0147890,0513770,933834
 43   0,0133770,0482490,938374
 44   0,01210,0452890,942611
 45   0,0109450,0424910,946564
 46   0,00990,0398480,950252
 47   0,0089550,0373530,953692
4480,00810,0350,95690,00810,0350,9569
 49   0,0073270,0327830,959891
 50   0,0066270,0306940,962678
 51   0,0059950,0287290,965277
 52   0,0054220,026880,967698
 53   0,0049050,0251420,969954
 54   0,0044370,0235090,972055
 55   0,0040130,0219750,974012
 56   0,003630,0205360,975834
 57   0,0032830,0191850,977531
 58   0,002970,0179190,979111
 59   0,0026860,0167320,980581
5600,002430,015620,981950,002430,015620,98195

Так намного лучше или даже идеально!

На рисунке ниже приведена визуализация двух подходов: неправильного («стандартного») и правильного (eigen decomposition или спектральное разложение исходной матрицы переходов).

Дорогие читатели, в этом материале мы познакомились с методом, который может позволить корректно пересчитать вероятности перехода при изменении длины цикла Маркова для моделей с 3 и более состояниями.

Дорогой читатель, буду рад твоим комментариям, предложениям и вопросам!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *