В этом примере показано, как преобразовать данные о выживании в подсчет процесса формируют и затем создать Cox пропорциональная модель опасностей с зависящими от времени ковариантами.
Модель Cox с зависящими от времени ковариантами требует, чтобы данные о выживании были в подсчете формы процесса а не в стандартном размещении. Чтобы видеть различие между данными о выживании в стандартном размещении и в подсчете формы процесса, загрузите следующие выборочные данные.
load simplesurvivaldata
Эти выборочные данные содержат две таблицы: relapseS
и relapseCP
. Эти две таблицы представляют те же простые данные о выживании в стандартном размещении и в подсчете формы процесса, соответственно.
Отобразите данные в стандартном размещении.
relapseS
relapseS=2×5 table
ID Time Censoring Age StopTreatment
__ ____ _________ ___ _____________
1 5 0 20 NaN
2 20 1 30 12
Эти данные представляют двух пациентов, состояние обработки которых изменяется в зависимости от времени. Терпеливый 1 не брал обработку для интервала с недели от 0 до 5 и вновь впал в конце интервала. Терпеливые 2 брали обработку для интервала с недели от 0 до 12, но не для интервала с недели 12 - 20. Терпеливые 2 не вновь впали и оставили исследование после недели 20.
Теперь отобразите те же данные в подсчете формы процесса.
relapseCP
relapseCP=3×6 table
ID tStart tStop Censoring Age TreatmentStatus
__ ______ _____ _________ ___ _______________
1 0 5 0 20 0
2 0 12 1 30 1
2 12 20 1 30 0
В подсчете формы процесса каждая строка представляет интервал риска (tStart,tStop]
вместо одного значения времени события. Censoring
0, если событие наблюдается в конце интервала риска, и 1, если это не. TreatmentStatus
соответствует зависящему от времени коварианту, который представляет ту же информацию StopTreatment
в стандартном размещении. Обратите внимание на то, что модель Cox принимает зависящие от времени коварианты, чтобы быть постоянной в каждом интервале риска.
Затем загрузите выборочные данные, чтобы преобразовать.
load survivaldatacp
Эти выборочные данные содержат таблицу labS
, который является симулированными данными о выживании включая повторное измерение для каждого пациента в стандартном размещении.
Отобразите симулированные данные о выживании в стандартном размещении.
labS
labS=6×7 table
ID Time Censoring Sex Lab_0 Lab_50 Lab_100
__ ____ _________ ___ _____ ______ _______
1 46 0 1 0.3 NaN NaN
2 138 1 0 0.2 0.23 0.39
3 94 0 1 0.18 0.22 NaN
4 50 0 0 0.21 0.2 NaN
5 106 0 0 0.25 0.21 0.42
6 98 0 0 0.21 0.22 NaN
В стандартном размещении каждая строка таблицы показывает информацию для одного пациента.
ID
указывает на ID пациента. Вы не включаете ID
как вход модели Cox. Включайте ID
в наборе данных, чтобы подтвердить, что набор данных правильно преобразован в подсчет формы процесса.
Time
представляет время событию в днях, которое соответствует переменной отклика.
Censoring
имеет информацию о цензуре для каждого пациента, где 1 указывает, что подвергнутые цензуре данные и 0 указывают, что точное время к событию наблюдается в конце периода наблюдения.
Sex
независимый от времени предиктор, где 1 указывает, что розетка, и 0 указывает на штекер.
Lab_0
, Lab_50
, и Lab_100
представляйте три последовательных лабораторных результата, измеренные в день 0, 50, и 100, которые соответствуют зависящему от времени предиктору.
Преобразовывать данные о выживании labS
к подсчету формы процесса выполните код ниже. Этот код преобразует Time
к интервалу риска (tStart,tStop]
и объединения три вектора из зависящего от времени предиктора, Lab_0
, Lab_50
, и Lab_100
, в один вектор, Lab
.
mTime = [0 50 100]; % Measurement time threeLabs = [labS.Lab_0 labS.Lab_50 labS.Lab_100]; nLabMeasure = sum(sum(~isnan(threeLabs))); % Number of lab measurements data = zeros(nLabMeasure,6); % One row for each observation oID = 0; % Observation ID for i = 1 : size(labS,1) idx = find(mTime <= labS.Time(i)); for j = 1 : length(idx)-1 oID = oID + 1; data(oID,:) = [labS.ID(i) mTime(j:j+1) 1 labS.Sex(i) threeLabs(i,j)]; end oID = oID + 1; data(oID,:) = [labS.ID(i) mTime(length(idx)) labS.Time(i) ... labS.Censoring(i) labS.Sex(i) threeLabs(i,length(idx))]; end labCP = table(data(:,1),data(:,2),data(:,3),data(:,4),data(:,5),data(:,6), ... 'VariableNames', {'ID','tStart','tStop','Censoring','Sex','Lab'});
Отобразите данные о выживании в подсчете формы процесса.
labCP
labCP=13×6 table
ID tStart tStop Censoring Sex Lab
__ ______ _____ _________ ___ ____
1 0 46 0 1 0.3
2 0 50 1 0 0.2
2 50 100 1 0 0.23
2 100 138 1 0 0.39
3 0 50 1 1 0.18
3 50 94 0 1 0.22
4 0 50 1 0 0.21
4 50 50 0 0 0.2
5 0 50 1 0 0.25
5 50 100 1 0 0.21
5 100 106 0 0 0.42
6 0 50 1 0 0.21
6 50 98 0 0 0.22
В подсчете формы процесса, каждой строки таблицы labCP
показывает информацию одного наблюдения, соответствующего одному интервалу риска. Обратите внимание на то, что модель Cox принимает Lab
быть постоянным в интервале риска (tStart,tStop]
. Значение в Censoring
0, если событие наблюдается в конце интервала риска, и 1, если событие не наблюдается.
Например, терпеливые 3 имеет два лабораторных измерения в день 0 и 50, таким образом, существует две строки данных для терпеливых 3 в подсчете формы процесса. Модель Cox принимает результаты лаборатории 0.18 и 0.22, чтобы быть постоянной в интервале (0,50] и (50,94], соответственно. Censoring
1 в (0,50] и 0 в (50,94], потому что точное время события терпеливых 3 наблюдается в день 94.
Найдите пациента, у которого есть интервал риска нулевой длины.
idxInvalid = labCP.ID(find(labCP.tStart == labCP.tStop))
idxInvalid = 4
Рассмотрите данные для терпеливых 4.
labCP(find(labCP.ID==idxInvalid),:)
ans=2×6 table
ID tStart tStop Censoring Sex Lab
__ ______ _____ _________ ___ ____
4 0 50 1 0 0.21
4 50 50 0 0 0.2
Время к событию терпеливых 4 совпадает со днем измерения 50. Однако (50,50] недопустимый интервал риска для модели Cox, потому что модель не принимает нулевой интервал длины. Настройте интервал риска, чтобы быть допустимыми. Можно выбрать любое значение меньше, чем единица измерения времени как объем корректировки. Выбор объема корректировки произволен, и он не изменяет результат.
idxAdjust = find(labCP.ID==idxInvalid); labCP.tStop(idxAdjust(1)) = labCP.tStop(idxAdjust(1))-0.5; labCP.tStart(idxAdjust(2)) = labCP.tStart(idxAdjust(2))-0.5; labCP(idxAdjust,:)
ans=2×6 table
ID tStart tStop Censoring Sex Lab
__ ______ _____ _________ ___ ____
4 0 49.5 1 0 0.21
4 49.5 50 0 0 0.2
Соответствуйте Cox пропорциональная модель опасностей независимой переменной времени Sex
и зависящая от времени переменная Lab
.
X = [labCP.Sex labCP.Lab]; T = [labCP.tStart labCP.tStop]; b = coxphfit(X,T,'Censoring',labCP.Censoring,'Baseline',0)
b = 2×1
2.0054
29.7530
Для получения дополнительной информации о том, как оценить Cox пропорциональная модель опасностей, смотрите Cox Пропорциональная Модель Опасностей для Подвергнутых цензуре Данных.