exponenta event banner

Объект модели пропорциональных рисков Кокса

В этом примере показано, как подогнать и проанализировать модель пропорциональных рисков Кокса с использованием CoxModel объект. Модели пропорциональных рисков Кокса относятся к данным о сроке службы или времени отказа. Справочную информацию см. в разделе Что такое анализ выживания? и модель пропорциональных рисков Кокса.

Создайте данные для трех моделей жизненного цикла со следующими типами уровней опасности. Эти модели соответствуют трем уровням стратификации; см. Расширение модели пропорциональных рисков Кокса.

  • Ванна, частота отказов которой в начале высока, уменьшается до низкого уровня, затем поднимается к постоянному уровню

  • Логарифмическое увеличение: log (x )/10

  • Константа 1/4

Три модели имеют общий предиктор с тремя множителями для базовых уровней опасности:

  • 1

  • 1/20

  • 1/100

В общей сложности данные имеют девять типов членов населения, по одному от каждого уровня стратификации и по одному от каждого уровня предиктора. Функции для создания ванны и логарифмических коэффициентов опасности приведены в разделе Вспомогательные функции в конце этого примера.

Постройте график трех уровней опасности, когда значение предиктора равно 1.

t = linspace(1,40);
plot(t,hazard(t),t,log(t)/10,t,1/4*ones(size(t)))
legend('Hazard 1','Hazard 2','Hazard 3','Location','northeast')
ylim([0 1])

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Hazard 1, Hazard 2, Hazard 3.

Создание данных для фитинга

Создайте псевдослучайные данные для времени жизни, связанного с девятью моделями. Создайте 9000 выборок, выбранных случайным образом (около 1000 для каждого типа), инвертировав кумулятивные распределения. (Дополнительные сведения см. в разделе Выборка обратного преобразования.)

N = 9000;
rng default
mults = [1;1/20;1/100]; % Three predictors
strata = randi(3,N,1); % Three strata
t1 = zeros(N,1);
a0 = randi(3,N,1); % Predictor
a1 = mults(a0);
v1 = rand(N,1);
for i = 1:N
    switch strata(i)
        case 1 % Bathtub
            t1(i) = zeropt(a1(i),v1(i));
        case 2 % Logarithmic
            t1(i) = zeroptold(a1(i),v1(i));
        case 3 % Constant
            t1(i) = 1 + exprnd(4/a1(i));
    end
end

Поместите данные в таблицу.

a3 = categorical(a1);
tbldata = table(t1,a3,strata,'VariableNames',["Lifetime" "Predictors" "Strata"]);

Подогнать модель Кокса

Подберите модель пропорциональных рисков Кокса к данным таблицы.

coxMdl = fitcox(tbldata,'Lifetime ~ Predictors',"Stratification",'Strata');

Выживание на участке

Постройте график вероятности выживания как функции времени для значения предиктора 1 и три уровня стратификации.

oo = categorical(1);
plotSurvival(coxMdl,[oo;oo;oo],[1;2;3])
xlim([1,30])

Figure contains an axes. The axes with title Estimated Survival Probability contains 3 objects of type stair. These objects represent X=1, Stratification=1, X=1, Stratification=2, X=1, Stratification=3.

Постройте график вероятности выживания как функции времени для значения предиктора 1/20 и три уровня стратификации.

tt = categorical(1/20);
figure
plotSurvival(coxMdl,[tt;tt;tt],[1;2;3])
xlim([1,200])

Figure contains an axes. The axes with title Estimated Survival Probability contains 3 objects of type stair. These objects represent X=0.05, Stratification=1, X=0.05, Stratification=2, X=0.05, Stratification=3.

Постройте график вероятности выживания как функции времени для значения предиктора 1/100 и три уровня стратификации.

uu = categorical(1/100);
figure
plotSurvival(coxMdl,[uu;uu;uu],[1;2;3])
xlim([1,1000])

Figure contains an axes. The axes with title Estimated Survival Probability contains 3 objects of type stair. These objects represent X=0.01, Stratification=1, X=0.01, Stratification=2, X=0.01, Stratification=3.

Даже несмотря на то, что уровни риска пропорциональны для различных предикторов, три графика выживания не пропорциональны.

Анализ подгонки

Изучите коэффициенты подогнанной модели.

disp(coxMdl.Coefficients)
                        Beta        SE       zStat     pValue
                       ______    ________    ______    ______

    Predictors_0.05    1.5301    0.031783    48.143      0   
    Predictors_1       4.5593    0.052149    87.427      0   

Обратите внимание, что pValue записи 0, что означает, что указанный предиктор Beta значения не равны нулю.

Просмотрите доверительные интервалы для коэффициентов модели на уровне значимости 0,01.

coefci(coxMdl,0.01)
ans = 2×2

    1.4483    1.6120
    4.4249    4.6936

Чтобы вывести опасность для предиктора уровня 0,01, вспомните определение модели Кокса:

h (Xi, t) = h0 (t) exp (∑xijbj).

fitcox функция использует фиктивные переменные со ссылочной группой для обработки категориальных данных. В этом случае функция обрабатывает предиктор 0,01 уровня как контрольную группу и кодирует предиктор как все 0 при подгонке модели. Если ввести все 0 в функцию опасности, вы получите

h ([0,0], t) = h0 (t) exp (0 * b1 + 0 * b2) = h0 (t) exp (0) = h0 (t).

h0 (t) - базовая опасность, которая хранится вcoxMdl.Hazard. Поэтому, чтобы получить опасность для предиктора уровня 0,01, вы можете изучить coxMdl.Hazard. Постройте график базовой кумулятивной опасности для трех уровней стратификации.

figure
hold on
for i = 1:3
    pred3 = find(coxMdl.Hazard(:,3) == i); % Find indices of stratification i
    plot(coxMdl.Hazard(pred3,1),coxMdl.Hazard(pred3,2))
end
xlabel('Time')
ylabel('Cumulative Hazard')
xlim([1 300])
legend('X = 0.01, Stratification 1',...
    'X = 0.01, Stratification 2',...
    'X = 0.01, Stratification 3','Location','northwest')
hold off

Figure contains an axes. The axes contains 3 objects of type line. These objects represent X = 0.01, Stratification 1, X = 0.01, Stratification 2, X = 0.01, Stratification 3.

Кумулятивный риск для других предикторных значений равен exp (Beta) умножить на базовый кумулятивный риск, где Beta является выводимым коэффициентом.

disp(exp(coxMdl.Coefficients.Beta))
    4.6188
   95.5127

Эти относительные значения опасности близки к теоретическим значениям для данных, которые были сгенерированы с помощью множителей 1, 1/20 и 1/100. Базовое значение соответствует множителю 1/100, поэтому теоретические множители равны 5 и 100.

Просмотр linhyptest таблица.

linhyptest(coxMdl)
ans=2×2 table
         Predictor         pValue
    ___________________    ______

    {'Empty Model'    }      0   
    {'Predictors_0.05'}      0   

Опять же, модель требует 1/20 предиктор значения и предиктор значения 1.

Проверьте, поддерживают ли данные гипотезу о том, что данные взяты из модели пропорциональных рисков Кокса.

supports = coxMdl.ProportionalHazardsPValueGlobal
supports = 0.9730

Нулевая гипотеза для этого теста заключается в том, что данные взяты из модели пропорциональных рисков Кокса. Чтобы отвергнуть эту гипотезу, supports должен быть меньше 0,05 или какой-либо другой небольшой уровень значимости. Статистика указывает на поддержку гипотезы о том, что данные согласуются с моделью Кокса.

Изучить коэффициенты опасности

Рассчитать коэффициент опасности для значений предиктора 1, 1/20, и 1/100 по сравнению с базовым уровнем 0 для трех уровней стратификации.

hazards = hazardratio(coxMdl,...
    categorical([1;1;1;1/20;1/20;1/20;1/100;1/100;1/100]),...
    [1;2;3;1;2;3;1;2;3],'Baseline',0)
hazards = 9×1

   95.5127
   95.5127
   95.5127
    4.6188
    4.6188
    4.6188
    1.0000
    1.0000
    1.0000

Коэффициенты опасности близки к теоретическим значениям 100, 5 и 1, как пояснялось в предыдущем разделе. Коэффициенты риска не зависят от уровня стратификации.

Насколько хорошо соответствует теория уровня стратификации постоянного риска?

Уровень стратификации 3 имеет постоянную степень опасности 1/4. Теоретически постоянная степень опасности означает экспоненциальную функцию выживания, логарифмом которой является прямая линия. Постройте график выживания стратификации уровня 3 с использованием значения предиктора 1/20, что приводит к экспоненциальной скорости 1/80.

tt = categorical(1/20);
h = figure;
axes1 = axes('Parent',h);
plotSurvival(coxMdl,axes1,tt,3);
xlim([1 400]);
axes1.YScale = 'log';
hold on
tms = linspace(1,400);
semilogy(tms,exp(-tms/80),'r--')
hold off

Figure contains an axes. The axes with title Estimated Survival Probability contains 2 objects of type stair, line. This object represents X=0.05, Stratification=3.

Данные соответствуют теоретической строке для вероятностей, значительно превышающих 1/100.

Вспомогательные функции

Эта функция создает коэффициент опасности ванны.

function h = hazard(x)
h = exp(-2*(x - 1)) + (1 + tanh(x/10 - 3));
end

Эта функция создает интеграл коэффициента опасности ванны из 1 кому x.

function eh = exphazard(x)
eh = 1/2 - exp(-2*(x-1))/2;
eh2 = (10*log(cosh(x/10 - 3)) - 10*log(cosh(1/10 - 3)) + x - 1);
eh = eh + eh2;
end

Эта функция используется для определения корня кумулятивного коэффициента опасности с помощью множителя a выравниваться v.

function zz = zeropt(a,v)
zz = fzero(@(x)(1 - exp(-a*exphazard(x)) - v),[1 100*max(1,1/a)]);
end

Эта функция создает интеграл логарифмической степени опасности с умножителем 1/10 от 1 кому x.

function cr = cumrisk(x)
cr = 1/10*(x.*(log(x) - 1) + 1);
end

Эта функция используется для определения корня кумулятивного коэффициента опасности с помощью множителя a выравниваться v.

function zz = zeroptold(a,v)
zz = fzero(@(x)(1 - exp(-a*cumrisk(x)) - v),[1 50*max(1,1/a)]);
end

См. также

|

Связанные темы