Сравнение всех возможных пар последовательных переменных - PullRequest
1 голос
/ 08 апреля 2020

Я анализирую данные для исследования, которое оценивает реакцию пациентов на переливания крови с точки зрения анализа крови. Для каждого переливания существует индикаторная переменная, которая отражает, достаточно ли улучшились показатели крови пациента или нет, в зависимости от заранее установленного отключения. Значение 1 указывает недостаточный ответ, а 0 указывает приемлемый ответ.

У каждого пациента зарегистрировано как минимум 2 и до 31 переливания крови, записанных как 31 переменная: T1, T2, ..., T31. Данные выглядят примерно так:

Patient     T1  T2  T3  T4  T5  T6  …   T31     
1           1   1   0   M   M   M   …   M       "Refractory"
2           0   0   0   0   M   M   …   M       "Not refractory"
3           0   0   1   1   0   M   …   M       "Refractory"
4           1   0   0   0   1   1   …   1       "Refractory"

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

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

COMPUTE Refractory=
Transfusion.1 and Transfusion.2 or
Transfusion.2 and Transfusion.3 or
Transfusion.3 and Transfusion.4 or
Transfusion.4 and Transfusion.5 or
Transfusion.5 and Transfusion.6 or
Transfusion.6 and Transfusion.7 or
Transfusion.7 and Transfusion.8 or
Transfusion.8 and Transfusion.9 or
Transfusion.9 and Transfusion.10 or
Transfusion.10 and Transfusion.11 or
Transfusion.11 and Transfusion.12 or
Transfusion.12 and Transfusion.13 or
Transfusion.13 and Transfusion.14 or
Transfusion.14 and Transfusion.15 or
Transfusion.15 and Transfusion.16 or
Transfusion.16 and Transfusion.17 or
Transfusion.17 and Transfusion.18 or
Transfusion.18 and Transfusion.19 or
Transfusion.19 and Transfusion.20 or
Transfusion.20 and Transfusion.21 or
Transfusion.21 and Transfusion.22 or
Transfusion.22 and Transfusion.23 or
Transfusion.23 and Transfusion.24 or
Transfusion.24 and Transfusion.25 or
Transfusion.25 and Transfusion.26 or
Transfusion.26 and Transfusion.27 or
Transfusion.27 and Transfusion.28 or
Transfusion.28 and Transfusion.29 or
Transfusion.29 and Transfusion.30 or
Transfusion.30 and Transfusion.31.

Однако вычисление вернуло гораздо больше пропущенных значений, чем ожидалось. Я действительно не знаю, почему это так, но я подозреваю, что это связано с тем, как операторы and и or обрабатывают пропущенные значения, а также с тем фактом, что для большинства строк в данных будет много пропущенных значений по характеру записи данных. Следующее missingness карта (производится с использованием R) иллюстрирует это (красный = отсутствует): enter image description here

1023 * Что бы быть лучше, чтобы вычислить «рефрактерность» статус, а правильно обработки пропущенных значений

1 Ответ

0 голосов
/ 08 апреля 2020

Если ваша команда построена таким образом, одно пропущенное значение в любой из переменных Transfusion приведет к тому, что Refractory также будет отсутствовать.

Вот два способа получить результат без этой проблемы:

цикл:

do repeat v1=Transfusion.1 to Transfusion.30   
         /v2=Transfusion.2 to Transfusion.31 .   
   if v1=1 and v2=1 Refractory=1.   
end repeat.

реструктуризация:

varstocases /make Transfusion from Transfusion.1 to Transfusion.31 .
if $casenum>1 and patient=lag(patient) and Transfusion=1 
    and lag(Transfusion)=1 Refractory=1.
dataset declare results. 
aggregate /out=results /BREAK=patient /Refractory=max(Refractory).
...