Multiple Imputations. Основы теории

Содержание

Слайд 2

ВВЕДЕНИЕ

ВВЕДЕНИЕ

Слайд 3

Проблема missing data

В любом исследовании неизбежно часть данных, которые планировалось собрать, не

Проблема missing data В любом исследовании неизбежно часть данных, которые планировалось собрать,
будут собраны
Пациенты выбывают из исследования, пропускают визиты, аппаратура дает сбои и проч.
Как минимум отсутствующие данные уменьшают мощность статистических тестов (меньше пациентов)
Как максимум могут привести к неверным выводам

Слайд 4

Проблема missing data

Рассмотрим исследование средства для снижения веса
100 участников принимают его в

Проблема missing data Рассмотрим исследование средства для снижения веса 100 участников принимают
течение года
На самом деле средство вообще не работает
Но в течение года часть участников по независимым причинам худеет, а часть толстеет
Те, кто толстеют, выбывают из исследования, но те, кто худеют, думают, что средство действует и остаются

Слайд 5

Проблема missing data

В конце исследования у нас есть данные только тех, кто

Проблема missing data В конце исследования у нас есть данные только тех,
похудел. Если судить по ним, получается, что средство отлично работает
Но это ошибка, потому что мы не учли отсутствующие данные

Слайд 6

Missing Mechanisms

Missing Completely at Random (MCAR): вероятность, что у конкретного пациента будет

Missing Mechanisms Missing Completely at Random (MCAR): вероятность, что у конкретного пациента
missing значение не зависит от пациента
Missing at Random (MAR): вероятность, что у конкретного пациента будет missing значение может зависеть от наблюдаемых факторов (treatment group, baseline characteristic)
Missing Not at Random (MNAR): вероятность, что у конкретного пациента будет missing значение может зависеть от ненаблюдаемых факторов, например самого missing значения

Слайд 7

Missing Mechanisms

Пример со средством для снижения веса – MNAR
MCAR и MAR –

Missing Mechanisms Пример со средством для снижения веса – MNAR MCAR и
не очень большая проблема
MNAR – большая проблема
Дополнительная проблема, что невозможно отличить MAR от MNAR по имеющимся данным. Отличие как раз в тех данных, которых нет.
Вначале мы рассмотрим ситуацию MAR. MNAR рассмотрим отдельно в конце.

Слайд 8

Imputation Methods

Большое разнообразие: LOCF, worst case, среднее по группе и проч.
Multiple Imputation

Imputation Methods Большое разнообразие: LOCF, worst case, среднее по группе и проч.
– надежный метод, хорошо работающий в широком спектре практических задач
Правда, немного сложный. Но сегодня мы с ним разберемся

Слайд 9

План семинара

Основы теории
Реализация метода MI в SAS: процедуры MI и MIANALYZE
MI и

План семинара Основы теории Реализация метода MI в SAS: процедуры MI и
ADaM-датасеты
Проверка предположений MAR/MNAR

Слайд 10

MULTIPLE IMPUTATIONS – ОСНОВЫ ТЕОРИИ

MULTIPLE IMPUTATIONS – ОСНОВЫ ТЕОРИИ

Слайд 11

Идея multiple imputation

Основная идея – давайте построим модель для предсказания отсутствующих данных
Мы

Идея multiple imputation Основная идея – давайте построим модель для предсказания отсутствующих
же строим статистические модели на данных, собранных в исследовании, чтобы предсказать, как лекарство подействует на других пациентов в будущем
Так давайте построим модель на тех пациентах, у которых есть полные данные и предскажем missing результаты

Слайд 12

Пример моделирования

Пример: допустим мы измеряем рост пациентов, и у нескольких рост не

Пример моделирования Пример: допустим мы измеряем рост пациентов, и у нескольких рост
был измерен
Построим простую модель с одним фактором «пол» для предсказания роста

Слайд 13

Пример моделирования

 

Пример моделирования

Слайд 14

Проблема простого моделирования

Хорошая идея, но вот проблема. Imputed рост будет использован затем

Проблема простого моделирования Хорошая идея, но вот проблема. Imputed рост будет использован
в каком-то анализе, например ANOVA модель, в которой рост – один из факторов
Но ведь наше предсказание роста – не точное, это оценка (estimate)
У нее есть стандартная ошибка (standard error) и доверительный интервал
Дальнейший анализ это не учтет!
Поэтому дальнейший анализ недооценит SE, т.е. неопределенность в результатах анализа будет на самом деле больше, чем кажется

Слайд 15

Решение – multiple imputation

 

Решение – multiple imputation

Слайд 16

Решение – multiple imputation

Применим генератор случайных чисел и сделаем для каждого пациента

Решение – multiple imputation Применим генератор случайных чисел и сделаем для каждого
несколько предсказаний
Проведем дальнейший анализ (ANOVA и проч.) отдельно для каждого набора предсказаний
Усредним результаты
Для усреднения разработаны формулы, т. наз. Rubin rule (статистик Дональд Рубин вывел эти формулы)

Слайд 17

Дональд Рубин

Почетный профессор Гарвардского университета, создал основы метода multiple imputation

Дональд Рубин Почетный профессор Гарвардского университета, создал основы метода multiple imputation

Слайд 18

Три шага MI

Шаг 1 – impute несколько раз
В SAS реализуется PROC MI
Есть

Три шага MI Шаг 1 – impute несколько раз В SAS реализуется
несколько методов, мы их рассмотрим
Распадается на P-step и I-step
P-step (predict): построить модель
I-step (impute): выбрать случайные предсказания
В некоторых методах P-step и I-step повторяются много раз итеративно

Слайд 19

Три шага MI

Шаг 2: провести анализ каждого набора предсказаний
Применяем совершенно любые процедуры

Три шага MI Шаг 2: провести анализ каждого набора предсказаний Применяем совершенно
SAS
BY _IMPUTATION_

Слайд 20

Три шага MI

Шаг 3:сводим вместе результаты нескольких анализов
В SAS реализуется PROC MIANALYZE
Конкретный

Три шага MI Шаг 3:сводим вместе результаты нескольких анализов В SAS реализуется
синтаксис зависит от процедур, примененных в шаге 2

Слайд 21

Три шага MI

Три шага MI

Слайд 22

ШАГ 1: PROC MI

ШАГ 1: PROC MI

Слайд 23

PROC MI

В этом разделе мы изучим, как вызывать PROC MI. У этой

PROC MI В этом разделе мы изучим, как вызывать PROC MI. У
процедуры сложный синтаксис.
Небольшая оговорка. Если я составляю SAP, я обязательно вставлю в него образцы кода, как именно надо вызывать PROC MI
Но если SAP дает нам заказчик, не могу гарантировать, что в нем будут такие образцы кода
В любом случае программистам стоит понимать, что означают опции PROC MI и когда какие нужно применять

Слайд 24

MI: основные вопросы

Чтобы корректно провести MI, надо ответить на такие вопросы:
Какие переменные

MI: основные вопросы Чтобы корректно провести MI, надо ответить на такие вопросы:
мы хотим “impute”?
Какие факторы включить в imputation model
Какой метод и тип модели выбрать
Сколько раз делать “multiple” imputation

Слайд 25

Выбор переменных

Очевидно, мы хотим “impute” study endpoints.
Но если наш endpoint не собирается

Выбор переменных Очевидно, мы хотим “impute” study endpoints. Но если наш endpoint
непосредственно, а вычисляется из других переменных, то лучше impute исходные переменные!
Например, в исследованиях по псориазу применяется endpoint “PASI75”: снижение PASI на 75%, где PASI – некий балл, говорящий о тяжести болезни
Лучше impute сам PASI как непрерывную переменную и потом вычислить PASI75, а не impute PASI75 как бинарную переменную!

Слайд 26

Выбор факторов

Общий совет: чем больше, тем лучше.
Факторы, которые потом включаются в модель

Выбор факторов Общий совет: чем больше, тем лучше. Факторы, которые потом включаются
анализа
Факторы, которые могут быть коррелированы с переменной, которую мы пытаемся “impute”
Факторы, которые могут быть связаны с вероятностью иметь missing значение

Слайд 27

Выбор факторов

Факторы, которые могут быть коррелированы с переменной, которую мы пытаемся “impute”
Другие

Выбор факторов Факторы, которые могут быть коррелированы с переменной, которую мы пытаемся
endpoints
Может быть малоэффективно. Если “imputed” endpoint неизвестен, то скорее всего потому, что пациент не пришел на визит, и тогда все остальные endpoints тоже неизвестны
Тот же endpoint, измеренный на других визитах/timepoints

Слайд 28

Выбор факторов

Факторы, которые могут быть связаны с вероятностью иметь missing значение
Completed/Discontinued
Причина discontinuation

Выбор факторов Факторы, которые могут быть связаны с вероятностью иметь missing значение
или “Discontinued due to AE” (yes/no)
Может быть сайт

Слайд 29

Факторы и “imputed” переменные

За один раз можно “impute” несколько переменных
Более того, факторы

Факторы и “imputed” переменные За один раз можно “impute” несколько переменных Более
тоже могут иметь missing values и быть imputed
По сути PROC MI рассматривает все переменные, для “imputation” и факторы, вместе, как одну группу, и “impute” каждую на основе остальных

Слайд 30

Missing pattern

Прежде, чем разбираться с выбором метода imputation, надо ввести понятие missing

Missing pattern Прежде, чем разбираться с выбором метода imputation, надо ввести понятие
pattern: monotone или arbitrary
Берем “imputed” переменную и все факторы, выбранные для imputation model
Monotone pattern: если какая-то из этих переменных missing, то все после нее – тоже
Иначе – arbitrary pattern

Слайд 31

Missing pattern

Monotone pattern:
Arbitrary pattern:

Missing pattern Monotone pattern: Arbitrary pattern:

Слайд 32

Методы imputation

Основные методы:
MCMC (Monte-Carlo Markov Chain)
Monotone
FCS (Fully Conditioned Specifications)
Гибридный метод MCMC/Monotone
При выборе

Методы imputation Основные методы: MCMC (Monte-Carlo Markov Chain) Monotone FCS (Fully Conditioned
метода руководствуемся:
Тип переменных (imputed и факторы)
Missing pattern

Слайд 33

Метод MCMC

Подразумевает, что все переменные (“imputed” и факторы) вместе имеют многомерное нормальное

Метод MCMC Подразумевает, что все переменные (“imputed” и факторы) вместе имеют многомерное
распределение
Т.о. как минимум все эти переменные должны быть непрерывными
Если одна из них дискретная – метод не подходит
Missing pattern: arbitrary

Слайд 34

А.А. Марков и казино Монте-Карло

А.А. Марков и казино Монте-Карло

Слайд 35

Метод Monotone

“Imputed” переменная и факторы могут быть непрерывными, бинарными, категориальными
Missing pattern: monotone
Не

Метод Monotone “Imputed” переменная и факторы могут быть непрерывными, бинарными, категориальными Missing
итеративный метод, работает быстрее всех
Идеален, если можем быть уверенным, что missing pattern будет monotone
Например, все факторы – baseline characteristics

Слайд 36

Метод FCS

“Imputed” переменная и факторы могут быть непрерывными, бинарными, категориальными
Missing pattern: arbitrary
Самый

Метод FCS “Imputed” переменная и факторы могут быть непрерывными, бинарными, категориальными Missing
гибкий метод
Рекомендуется, если нет гарантии monotone pattern

Слайд 37

Гибридный метод MCMC/Monotone

Устаревший метод!
Применялся до создания FCS
И тем не менее, есть заказчики-ретрограды,

Гибридный метод MCMC/Monotone Устаревший метод! Применялся до создания FCS И тем не
которые на нем настаивают, поэтому о нем надо знать
Два шага:
сначала MCMC для imputation только промежуточных значений, чтобы «добить» до monotone pattern
Потом применяется метод Monotone

Слайд 38

Сводка по методам

Сводка по методам

Слайд 39

Типы моделей

Методы Monotone и FCS поддерживают несколько разных типов моделей
Reg: линейная регрессия
Regpmm

Типы моделей Методы Monotone и FCS поддерживают несколько разных типов моделей Reg:
(regression predictive mean matching): после регрессии imputed значение выбирается среди нескольких наблюдаемых значений, близких к предсказанному регрессией
Logistic: логистическая регрессия
Discrim: дискриминантная функция
Формально для метода Monotone есть еще тип Propensity, но его не рекомендуют

Слайд 40

Типы моделей

Выбор типа модели определяется типом “imputed” переменной:
Непрерывная: reg или regpmm. Рекомендация:
Переменная

Типы моделей Выбор типа модели определяется типом “imputed” переменной: Непрерывная: reg или
с большим диапазоном и малым шагом дискретизации (например, лаб. тест, vital sign) – reg
Переменная с ограниченным диапазоном или крупным шагом дискретизации (например, балл опросника, всегда целый и в диапазоне 0-10): regpmm
Бинарная или ординальная: logistic
Номинальная: discrim
Этот тип модели лучше работает с непрерывными факторами
Не может использовать interaction terms

Слайд 41

Сколько imputations делать

50 почти всегда подойдет
Если очень много данных, это может быть

Сколько imputations делать 50 почти всегда подойдет Если очень много данных, это
долго, можно сократить до 20-25
Можно отладить программы с малым числом (5), а потом сделать перезапуск с большим числом
Достаточность к-ва imputations можно контролировать по параметру Relative Efficiency, который вычисляет PROC MI – обсудим ниже

Слайд 42

Синтаксис PROC MI

proc mi ...;
var var1 var2 var3 var4 ...;
class

Синтаксис PROC MI proc mi ...; var var1 var2 var3 var4 ...;
var1 var2 ...;
mcmc ...;
monotone ...;
fcs ...;
run;
Обычно будет только один оператор-метод из mcmc, monotone, fcs
Может быть несколько вызовов одного метода для разных переменных, но не может быть вызова нескольких разных методов

Слайд 43

Опции PROC MI

data= - входной датасет
out= - выходной датасет
nimpute= - к-во imputations
Если

Опции PROC MI data= - входной датасет out= - выходной датасет nimpute=
в датасете data N строк, то в датасете out будет N*nimpute
Будет добавлена переменная _IMPUTATION_
seed= - произвольное число, инициализирующая random number generator
Необходимо для QC, чтобы результаты не менялись при каждом перезапуске

Слайд 44

Операторы var и class

В операторе var перечисляются все переменные – те, что

Операторы var и class В операторе var перечисляются все переменные – те,
мы хотим “impute” и факторы для моделирования
В операторе class перечисляются те из переменных, которые являются классификационными (категориальными) – как во всех процедурах SAS.

Слайд 45

Оператор MCMC

MCMC <опции>
Опции:
chain=single или chain=multiple
Нет рекомендаций, оставляем по умолчанию
Impute=monotone
Impute только до достижения

Оператор MCMC MCMC Опции: chain=single или chain=multiple Нет рекомендаций, оставляем по умолчанию
monotone pattern, применяется в гибридном методе MCMC/Monotone

Слайд 46

Операторы Monotone и FCS

MONOTONE <тип модели> (imputed = factors)
FCS такой же синтаксис
MONOTONE

Операторы Monotone и FCS MONOTONE (imputed = factors) FCS такой же синтаксис
reg (avalv2 = sex age base avalv1)
FCS regpmm (avalv2 = sex age base avalv1)
MONOTONE logistic (avalv2 = sex age base avalv1)
FCS discrim (avalv2 = sex age base avalv1 / classeffects=include)
Опция classeffects нужна, если среди факторов есть классификационные

Слайд 47

Операторы Monotone и FCS

Упрощенный вариант:
FCS REG (avalv1 avalv2);
Все переменные imputed по очереди
MONOTONE:

Операторы Monotone и FCS Упрощенный вариант: FCS REG (avalv1 avalv2); Все переменные
факторами будут все переменные из VAR, указанные раньше данной
FCS: факторами будут все переменные из VAR
Обычно указывать факторы после знака = не нужно
Нужно чтобы задать interaction factor
По какой-то причине для какой-то переменной не все факторы из var годятся

Слайд 48

Дополнительные опции PROC MI

minimum=, maximum=, round=
Задается минимальное или максимальное значение для imputed

Дополнительные опции PROC MI minimum=, maximum=, round= Задается минимальное или максимальное значение
переменной и как ее округлить
После знака равенства ставится столько чисел, сколько есть переменных в операторе var
Точка означает, что данную переменную не преобразовывать

Слайд 49

Дополнительные опции PROC MI

Пример:
PROC MI minimum=. . . 1 1 maximum=. .

Дополнительные опции PROC MI Пример: PROC MI minimum=. . . 1 1
. 100 100 round=. . . 1 1;
var sex age base avalv1 avalv2;
Переменные sex, age, base не меняются
AVALV1, AVALV2 округляются до целого и ограничиваются от 1 до 100
Опции имеют смысл для методов MCMC, MONOTONE/FCS REG. В остальных случаях imputed значение – всегда одно из наблюдаемых

Слайд 50

Гибридный метод MCMC/Monotone

Два вызова PROC MI:
proc mi data=... out=mono ...;
var ...;

Гибридный метод MCMC/Monotone Два вызова PROC MI: proc mi data=... out=mono ...;
mcmc impute=monotone;
run;
proc mi data=mono nimpute=1 ...;
by _imputation_;
var ...;
monotone ...;
run;

Слайд 51

Гибридный метод MCMC/Monotone

Что делать в первом шаге гибридного метода, если есть категориальные

Гибридный метод MCMC/Monotone Что делать в первом шаге гибридного метода, если есть
факторы?
Опустить
Бинарные закодировать 0, 1
Вставить в оператор by

Слайд 52

Пример PROC MI

proc mi data=... out=... nimpute=50 seed=45780;
var weight base chg4

Пример PROC MI proc mi data=... out=... nimpute=50 seed=45780; var weight base
chg8 chg12;
monotone regpmm(chg4 chg8 chg12);
run;

Слайд 53

Пример PROC MI

proc mi data=… out=… nimpute=50 seed=122001;
var trtp disstab skinclass

Пример PROC MI proc mi data=… out=… nimpute=50 seed=122001; var trtp disstab
base chg12
chg24;
class trtp disstab skinclass;
fcs regpmm(chg12=trtp disstab
skinclass base trtp*base chg24);
fcs regpmm(chg24=trtp disstab
skinclass base trtp*base chg12);
run;

Слайд 54

Пример PROC MI

proc mi data=... out=... nimpute=50
seed=2031602;
var trtpn sitegr1 base

Пример PROC MI proc mi data=... out=... nimpute=50 seed=2031602; var trtpn sitegr1
chg5-chg7;
class trtpn sitegr1;
monotone reg(chg5-chg7);
run;

Слайд 55

Пример PROC MI

proc mi data=.. out=... nimpute=50 round=1
seed=45779;
by trtpn;
var

Пример PROC MI proc mi data=.. out=... nimpute=50 round=1 seed=45779; by trtpn;
weight base chg4 chg8 chg12;
mcmc impute=monotone;
run;

Слайд 56

PROC MI Output

Missing data patterns:
Простой способ узнать missing data pattern: запустить proc

PROC MI Output Missing data patterns: Простой способ узнать missing data pattern: запустить proc mi nimpute=0.
mi nimpute=0.

Слайд 57

PROC MI Output

Variance information:
Обратите внимание на Relative Efficiency в последней колонке
Стремимся иметь

PROC MI Output Variance information: Обратите внимание на Relative Efficiency в последней
relative efficiency > 0.95

Слайд 58

Relative Efficiency

“Relative” to infinite number of imputations
Что делать, если RE < 0.95?
Увеличить

Relative Efficiency “Relative” to infinite number of imputations Что делать, если RE
nimpute
Но если при nimpute=50 имеем RE < 0.95, это говорит о том, что очень большой процент данных missing
Весь анализ под вопросом

Слайд 59

ШАГ 2: АНАЛИЗ

ШАГ 2: АНАЛИЗ

Слайд 60

Анализ multiple imputed data

Применяем любые процедуры
С оператором BY _IMPUTATION_
Сохраняем результаты в датасеты

Анализ multiple imputed data Применяем любые процедуры С оператором BY _IMPUTATION_ Сохраняем
с помощью ODS

Слайд 61

ШАГ 3: PROC MIANALYZE

ШАГ 3: PROC MIANALYZE

Слайд 62

PROC MIANALYZE

На входе этого шага мы имеем результаты анализа каждого из наборов

PROC MIANALYZE На входе этого шага мы имеем результаты анализа каждого из
multiple imputed данных
Цель этого шага – свести их воедино и дать окончательные оценки интересующих нас параметров
Синтаксис PROC MIANALYZE будет зависеть от того, как мы проводили анализ в Шаге 2
Для ряда процедур SAS есть прямая поддержка, для остальных предусмотрен общий случай
Мы разберем наиболее часто встречающиеся варианты

Слайд 63

Обработка результатов PROC MIXED

PROC MIXED реализует mixed model, но также ANOVA, ANCOVA
Обычно

Обработка результатов PROC MIXED PROC MIXED реализует mixed model, но также ANOVA,
обрабатываем результаты из ODS датасетов LSMeans, Diffs
Результаты PROC GLM и PROC GENMOD обрабатываются точно так же

Слайд 64

Обработка результатов PROC MIXED

proc mianalyze parms=LSMeans;
class trtpn;
modeleffects trtpn;
run;
В опции parms

Обработка результатов PROC MIXED proc mianalyze parms=LSMeans; class trtpn; modeleffects trtpn; run;
указываем датасет LSMeans или Diffs
В операторе modeleffects – то же, что в PROC MIXED было в LSMeans
Может быть interaction типа trtpn*avisitn
В операторе class – классификационные переменные
Для обработки Diffs может понадобиться оператор by trtpn _trtpn, если сравнений больше одного!

Слайд 65

Обработка результатов PROC MIXED

Результат в ODS датасете ParameterEstimates:

Обработка результатов PROC MIXED Результат в ODS датасете ParameterEstimates:

Слайд 66

Как PROC MIANALYZE понимает датасет PARMS
_Imputation_: номер imputation
Effect: имя из modeleffects
TRTPN: для

Как PROC MIANALYZE понимает датасет PARMS _Imputation_: номер imputation Effect: имя из
class-переменных – значение
Estimate: оценка
StdErr: standard error
Уникальность: _Imputation_, Effect, TRTPN

Слайд 67

Обработка результатов PROC LOGISTIC

proc logistic data=…;
by _imputation_;
class trtpn site /

Обработка результатов PROC LOGISTIC proc logistic data=…; by _imputation_; class trtpn site
param=ref;
model avalc = trtpn site base;
run;
Сохраняем ODS датасет ParameterEstimates
proc mianalyze parms(classvar=classval)=ParameterEstimates;
class trtpn site;
modeleffects trtpn site;
run;
Отличается от обработки результатов PROC MIXED опцией classvar=classval.

Слайд 68

Обработка результатов PROC LOGISTIC

В результате получаем оценки параметров модели, но как получить

Обработка результатов PROC LOGISTIC В результате получаем оценки параметров модели, но как получить odds ratios?
odds ratios?

Слайд 69

Обработка результатов PROC LOGISTIC

Нужно экспоненциировать (функция exp) оценку параметра и доверительные пределы
Не

Обработка результатов PROC LOGISTIC Нужно экспоненциировать (функция exp) оценку параметра и доверительные
забываем в PROC LOGISTIC в операторе CLASS указывать опцию PARAM=REF, иначе это не сработает!
Аналогичный подход работает для Hazard Ratio в PROG PHREG

Слайд 70

MIANALYZE: Общий случай

Если процедура не имеет в MIANALYZE специальной поддержки, то обрабатываем

MIANALYZE: Общий случай Если процедура не имеет в MIANALYZE специальной поддержки, то
результаты так:
Входной датасет имеет по строке на _Imputation_
В нем пары переменных: оценка и ее standard error
proc mianalyze data=...;
modeleffects est1 est2 ...;
stderr StdErr1 StdErr2 ...;
run;
Подразумевается, что переменные имеют нормальное распределение!
Опция parms для выходных датасетов процедур с особой поддержкой; опция data для общего случая

Слайд 71

MIANALYZE: Wilcoxon test

Пример применения общего случая для обработки результата Wilcoxon test:
proc npar1way

MIANALYZE: Wilcoxon test Пример применения общего случая для обработки результата Wilcoxon test:
data=… wilcoxon;
by _imputation_;
class trtpn;
var aval;
run;
Сохраняем ODS датасет WilcoxonTest
В нем есть переменная Z – статистика со стандартным нормальным распределением

Слайд 72

MIANALYZE: Wilcoxon test

Делаем data step и добавляем в датасет WilcoxonTest переменную StdErr,

MIANALYZE: Wilcoxon test Делаем data step и добавляем в датасет WilcoxonTest переменную
равную 1 на всех записях
proc mianalyze data=WilcoxonTest;
modeleffects Z;
stderr StdErr;
run;
Получаем p-value

Слайд 73

MIANALYZE: binomial proportion

Другой пример общего случая: обработать пропорции пациентов, которые достигли какого-то

MIANALYZE: binomial proportion Другой пример общего случая: обработать пропорции пациентов, которые достигли
response.
Пропорция (или процент) имеет биномиальное распределение
Но если к-во пациентов велико, оно достаточно близко к нормальному, и proc mianalyze можно применить!

Слайд 74

MIANALYZE: binomial proportion

proc freq data=…;
by trtpn _imputation_;
tables avalc / binomial;
run;
Сохраняем

MIANALYZE: binomial proportion proc freq data=…; by trtpn _imputation_; tables avalc /
ODS датасет Binomial
В этом датасете нас интересует пропорция и ее Asymptotic Standard Error (ASE). Датасет надо преобразовать proc transpose (или data step’ом), чтобы получить пропорцию и ASE на одной строке для каждого trtpn и _imputation_

Слайд 75

MIANALYZE: binomial proportion

После этого:
proc mianalyze data=…;
by trtpn;
modeleffects _BIN_;
stderr E_BIN;
run;
Для

MIANALYZE: binomial proportion После этого: proc mianalyze data=…; by trtpn; modeleffects _BIN_;
обработки разности пропорций рассчитываем SE разности = sqrt(SE12 + SE22)

Слайд 76

MIANALYZE: прочие случаи

Обработка следующих типов анализа затруднена тем, что статистики не имеют

MIANALYZE: прочие случаи Обработка следующих типов анализа затруднена тем, что статистики не
нормального распределения:
Chi-square test
CMH test
Fisher’s test
Kaplan-Meier estimates
Log-rank test
Correlation coefficients
Многие другие

Слайд 77

MIANALYZE: прочие случаи

Общий подход:
Применить преобразование, которое переводит распределение нужной статистики к нормальному
Применить

MIANALYZE: прочие случаи Общий подход: Применить преобразование, которое переводит распределение нужной статистики
proc mianalyze
Применить обратное преобразование
Для каждого типа анализу существуют формулы, но сегодня не будем их изучать, их очень много
В случае необходимости ищем в литературе

Слайд 78

MI: пример

См. пример кода

MI: пример См. пример кода

Слайд 79

MULTIPLE IMPUTATION AND ADAM DATASETS

MULTIPLE IMPUTATION AND ADAM DATASETS

Слайд 80

Multiple Imputation and ADaM Datasets

Должны ли мы сохранять результат PROC MI в

Multiple Imputation and ADaM Datasets Должны ли мы сохранять результат PROC MI
датасет или делать все три шага MI в рамках программы таблицы?
Рекомендация:
Если анализ с MI является основным (primary) или с MI делается более одной таблицы – сохраняем в датасет
Иначе можем все сделать в программе таблицы

Слайд 81

Создание датасета с результатами MI

Рекомендация: создать один датасет без MI и другой,

Создание датасета с результатами MI Рекомендация: создать один датасет без MI и
отдельный, с MI
Потому что датасет с MI будет большой, наверняка понадобится иметь быстрый доступ к данным без MI (например, для листинга), а выделять изначальные данные из датасета с MI будет долго
Т.е., например, ADEF и ADEFMI

Слайд 82

Создание датасета с MI

Если в imputation model участвуют данные с других визитов

Создание датасета с MI Если в imputation model участвуют данные с других
или endpoints, датасет нужно транспонировать в горизонтальную структуру
Вызвать PROC MI
Напоминаю, что всегда надо задавать SEED
Транспонировать назад в вертикальную структуру

Слайд 83

Создание датасета с MI (продолжение)

PROC MI никак не обозначает, какие данные были

Создание датасета с MI (продолжение) PROC MI никак не обозначает, какие данные
известны, а какие были imputed
Поэтому делаем merge с изначальным датасетом по ключевым переменным, чтобы найти imputed значение и задать для них DTYPE (например ‘MI’)
Переменной _IMPUTATION_ даем допустимое имя, например IMPNO

Слайд 84

Использование датасета с MI

В программе таблицы выполняем шаги 2 (анализ) и 3

Использование датасета с MI В программе таблицы выполняем шаги 2 (анализ) и
(PROC MIANALYZE)
Перед вызовом PROC MIANALYZE нужно переименовать переменную IMPNO обратно в _IMPUTATION_

Слайд 85

Пример программы для MI датасета

Пример кода

Пример программы для MI датасета Пример кода

Слайд 86

MISSING NOT AT RANDOM

MISSING NOT AT RANDOM

Слайд 87

Missing Not at Random

Что, если наши данные Missing Not at Random (MNAR)?
Напомним,

Missing Not at Random Что, если наши данные Missing Not at Random
это означает, что вероятность отсутствия данных зависит от самих данных
Например, пациент, на которого лекарство действует хуже, скорее выпадет из исследования, чем тот, на кого действует хорошо
Следовательно, отсутствующие данные могут быть хуже, чем наблюдаемые

Слайд 88

Missing Not at Random

До сих пор мы моделировали отсутствующие данные на основе

Missing Not at Random До сих пор мы моделировали отсутствующие данные на
наблюдаемых
Т.е. полагали, что отсутствующие данные примерно такие же как наблюдаемые
Но в предположении MNAR это неверно
И проверить никак нельзя. Ситуации MAR и MNAR отличаются как раз теми данными, которые неизвестны

Слайд 89

Sensitivity to MAR

И что же делать?
Нужно провести sensitivity analysis, проверяющий “sensitivity” результатов

Sensitivity to MAR И что же делать? Нужно провести sensitivity analysis, проверяющий
анализа к предположению MAR
Т.е. посмотреть, насколько хуже будут результаты, если отсутствующие данные хуже, чем наблюдаемые
Обычно применяется подход на основе Pattern-Mixture Models

Слайд 90

Pattern-Mixture Models

Pattern-Mixture Models – широкий класс подходов, мы будем рассматривать нужный нам

Pattern-Mixture Models Pattern-Mixture Models – широкий класс подходов, мы будем рассматривать нужный
частный случай
Основная идея:
Сделать предположение, у каких пациентов их missing данных могут быть хуже, чем наблюдаемые
Сделать предположение, насколько хуже они могут быть
Провести анализ с MI, при этом после шага 1 искусственно ухудшить результаты выбранных пациентов выбранным образом

Слайд 91

У кого данные могут быть хуже?

У всех пациентов с missing data
У всех,

У кого данные могут быть хуже? У всех пациентов с missing data
кто принимал тестовое лекарство (но не у тех, кто контрольное) (Worst case)
У тех, кто выбыл по «подозрительной» причине:
Lack of Efficacy
Adverse Event
У тех, кто выбыл после определенного визита
Комбинации условий выше и проч.

Слайд 92

Насколько хуже могут быть данные?

Рассмотрим два подхода:
Control-based imputation
Penalization

Насколько хуже могут быть данные? Рассмотрим два подхода: Control-based imputation Penalization

Слайд 93

Control-Based Imputation

Предполагаем, что состояние выбывших пациентов, принимавших тестовое лекарство аналогично состоянию

Control-Based Imputation Предполагаем, что состояние выбывших пациентов, принимавших тестовое лекарство аналогично состоянию
не выбывших пациентов из контрольной группы
Логично, если контрольная группа – Placebo или “Standards of Care”
Нелогично, если контроль – активное лекарство
Т.о. модель для imputation строится только по пациентам из контрольной группы

Слайд 94

Penalization

Предполагаем, что missing данные хуже на какую-то величину в абсолютном или процентном

Penalization Предполагаем, что missing данные хуже на какую-то величину в абсолютном или
выражении
Из результата imputation вычитается некий “penalization factor”
Размер “penalization factor” должен определяться клиническими специалистами
Но возможен еще такой подход:
Вычисляем “treatment effect” из основного анализа (разность test – control)
Определяем penalization factor как какой-то процент от treatment effect
Если penalization factor = treatment effect получаем по сути control-based imputation

Слайд 95

Tipping-point Analysis

Идея такая: провести анализ с penalization несколько раз, постепенно увеличивая penalization

Tipping-point Analysis Идея такая: провести анализ с penalization несколько раз, постепенно увеличивая
factor, и посмотреть, при каком penalization factor меняется исход анализа, т.е., например, условие superiority перестает выполнятся (p-value становится больше 0.05)
Это значение называется tipping point
Часто берут диапазон от 0 до treatment effect с каким-то разумным шагом

Слайд 96

Two-dimensional Tipping-Point

Перебирают комбинации разных penalization factors для тестового и контрольного лекарства
Смотрят, при

Two-dimensional Tipping-Point Перебирают комбинации разных penalization factors для тестового и контрольного лекарства
каких комбинация сохраняется нужных исход
Обычно применяется, когда надо показать эквивалентность (т.е. от теста и контроля ожидается одинаковый эффект)

Слайд 97

MNAR: РЕАЛИЗАЦИЯ В SAS

MNAR: РЕАЛИЗАЦИЯ В SAS

Слайд 98

MNAR Statement

Для реализации основных видов анализа MNAR в PROC MI есть оператор

MNAR Statement Для реализации основных видов анализа MNAR в PROC MI есть
MNAR
Он такой новый, что в редакторе SAS подсвечивается красным
Применим с методами MONOTONE и FCS
Если используем гибридный метод MCMC/Monotone, применяем на втором шаге
Для нестандартных подходов всегда можно доработать результат работы PROC MI специальным data step

Слайд 99

Control-Based Imputation

proc mi data=… out=… nimpute=…;
var …;
class trtpn …;
fcs

Control-Based Imputation proc mi data=… out=… nimpute=…; var …; class trtpn …;
reg(resp);
mnar model (resp / modelobs = (trtpn = '1'));
run;
В операторе MNAR MODEL указываем:
Imputed переменную (resp)
В опции modelobs – условие, какие записи использовать при построении модели
Слева от знака равенства - переменная
Она должна быть в CLASS, но НЕ ДОЛЖНА быть в модели
Справа – значение
В кавычках, даже если числовое
Можно указать несколько через пробел (trtpn = ‘1’ ‘2’)

Слайд 100

Control-Based Imputation

Что если стоит такая задача:
Применить control-based imputation для пациентов из тестовой

Control-Based Imputation Что если стоит такая задача: Применить control-based imputation для пациентов
группы, которые выбыли из-за “lack of efficacy”
Применить обычный метод (MAR) к остальным
Можно сделать так:
Два вызова PROC MI
Один с оператором MNAR без treatment в модели
Второй без оператора MNAR с treatment в модели
Соединяем (merge) результаты, берем результат первого оператора для пациентов из тестовой группы, которые выбыли из-за “lack of efficacy”, второго для остальных

Слайд 101

Penalization

proc mi data=… out=… nimpute=… seed=…;
var trtpn resp …;
class trtpn

Penalization proc mi data=… out=… nimpute=… seed=…; var trtpn resp …; class
…;
fcs reg(resp);
mnar adjust (resp / adjustobs=(trtpn='2') shift=-0.2);
run;
В операторе MNAR ADJUST указываем
Imputed переменную (resp)
ADJUSTOBS: как каким записям применяем penalization (синтаксис условия такой же, как в modelobs)
SHIFT: сколько добавить к результату
Также можно указать SCALE: на сколько умножить результат
SIGMA: к результату добавляется нормально распределенная случайная величина со средним SHIFT и с.к.о. SIGMA

Слайд 102

Tipping-point analysis

Tipping-point analysis можно реализовать так:
Делаем макрос, в нем в цикле вызываем

Tipping-point analysis Tipping-point analysis можно реализовать так: Делаем макрос, в нем в
PROC MI с оператором MNAR ADJUST с разными значениями SHIFT (значение задается макро-переменной)
%do i = 0 %to 10;
%let shift = %sysevalf(1 + &i/10);
proc mi data=... out=imputed&i nimpute=... seed=...;
...
mnar adjust (resp / adjustobs=(trtpn='2') shift=-&shift);
run;
%end;
Можно применять разный SEED для разных shifts
Результаты соединяем, например, PROC APPEND
В PROC MIANALYZE задаем “by shift”

Слайд 103

2-dimensional tipping-point analysis

Для реализации 2-dimensional tipping-point analysis можно задавать две опции ADJUST

2-dimensional tipping-point analysis Для реализации 2-dimensional tipping-point analysis можно задавать две опции
с разными условиями:
%do i = 1 %to 10;
%let shift1 = %sysevalf(1 + &i/10);
%do j = 1 %to 10;
%let shift2 = %sysevalf(1 + &j/10);
proc mi data=... out=imputed&i._&j nimpute=... seed=...;
...;
mnar adjust (resp / adjustobs=(trtpn='1') shift=-&shift1)
adjust (resp / adjustobs=(trtpn='2') shift=-&shift2);
run;
%end;
%end;
В PROC MIANALYZE задаем “by shift1 shift2”

Слайд 104

Tipping-point – вопросы времени выполнения

PROC MI может работать относительно долго
При tipping-point анализе,

Tipping-point – вопросы времени выполнения PROC MI может работать относительно долго При
особенно 2-dimensional, PROC MI вызывается много раз, и время выполнения может оказаться очень большим
Вариант: провести отладку с малым числом NIMPUTE, затем один раз запустит с большим

Слайд 105

Tipping-point – вопросы времени выполнения

Можно рассмотреть вариант с «ручным» penalization
Вы вызываете PROC

Tipping-point – вопросы времени выполнения Можно рассмотреть вариант с «ручным» penalization Вы
MI один раз без оператора MNAR
Затем «размножаете» каждую строку в цикле data step, «ухудшая» результат нужных записей на нужную величину – это может оказаться быстрее
Результат не будет идентичен оператору MNAR из-за разной работы генератора случайных чисел, но в среднем аналогичен
Поэтому если применять этот метод, то одновременно в основной программе и QC

Слайд 106

Penalization c бинарными переменными

Метод penalization наиболее понятен для непрерывных переменных, но также

Penalization c бинарными переменными Метод penalization наиболее понятен для непрерывных переменных, но
применим к бинарным
“Penalization” заключается в том, что уменьшается вероятность положительного исхода
Оператор MNAR поддерживает такой вариант, но есть проблемы

Слайд 107

Penalization c бинарными переменными

Для imputation бинарных переменных PROC MI использует логистическую регрессию
Вспомним,

Penalization c бинарными переменными Для imputation бинарных переменных PROC MI использует логистическую
как она работает. В этой модели моделируется log odds вероятности нужного исхода: log(p/(1-p))
Log(p/(1-p)) = линейная комбинация факторов

Слайд 108

Penalization c бинарными переменными

Т.о. MI работает так:
P-step:
Подобрать коэффициенты модели для моделирования log

Penalization c бинарными переменными Т.о. MI работает так: P-step: Подобрать коэффициенты модели
odds на тех записях, в которых исход известен
I-step:
Для записей, где исход missing, по полученной формуле рассчитать log odds
По нему рассчитать вероятность удачного исхода: p = (1+exp(LogOdds))/exp(LogOdds)
Назначить удачный исход с вероятностью p, неудачный – 1-p

Слайд 109

Penalization c бинарными переменными

Оператор MNAR может вставить penalization между шагами 2 и

Penalization c бинарными переменными Оператор MNAR может вставить penalization между шагами 2
3, т.е. ухудшить log odds
Для этого ему нужно указать, какое из значений переменной - «удачный» исход, который мы хотим ухудшить:
mnar adjust (avalc(event='Y') / adjustobs=… shift=…)

Слайд 110

Penalization c бинарными переменными

Проблема: log odds сложно интерпретировать:
Уменьшение log odds на X

Penalization c бинарными переменными Проблема: log odds сложно интерпретировать: Уменьшение log odds
означает уменьшение “odds” успеха в exp(X) раз. Это не очень интуитивно
Т.е. если мы хотим уменьшить вероятность положительного исхода в тестовой группе на 0.1 (или в 2 раза), на сколько надо изменить log odds? Невозможно сказать, зависит от вероятности для данного пациента

Слайд 111

Penalization c бинарными переменными

Возможен альтернативный подход к penalization без оператора MNAR
При этом

Penalization c бинарными переменными Возможен альтернативный подход к penalization без оператора MNAR
подходе penalization происходит между шагами 3 и 4, т.е. ухудшаем вероятность удачного исхода – это гораздо легче понять и интерпретировать
Это пример ситуации, когда оператор MNAR не поможет – придется дорабатывать результат PROC MI вручную

Слайд 112

Penalization c бинарными переменными

Схема этого процесса:
Запускаем PROC MI без оператора MNAR. Используем

Penalization c бинарными переменными Схема этого процесса: Запускаем PROC MI без оператора
опцию details, которая сохраняет параметры модели в датасет
Используя этот датасет вручную рассчитываем log odds
Вручную рассчитываем вероятность удачного успеха и уменьшаем ее как хотим у кого хотим
Назначаем удачный исход с вероятностью p, неудачный – 1-p. Можно применить функцию rantbl.