Полная информация о максимальной вероятности пропущенных данных в R

18

Контекст : иерархическая регрессия с некоторыми отсутствующими данными.

Вопрос : Как использовать оценку максимальной вероятности полной информации (FIML) для устранения пропущенных данных в R? Есть ли пакет, который вы бы порекомендовали, и каковы типичные шаги? Онлайн-ресурсы и примеры также будут очень полезны.

PS : я социолог, который недавно начал использовать R. Многократное вменение - вариант, но мне действительно нравится, как элегантно программы, такие как Mplus, обрабатывают недостающие данные, используя FIML. К сожалению, Mplus, похоже, не сравнивает модели в контексте иерархической регрессии в настоящее время (пожалуйста, дайте мне знать, если вы знаете способ сделать это!). Интересно, есть ли что-нибудь подобное в R? Большое спасибо!

Sootica
источник
1
Вы рассматривали WinBugs ? Он прекрасно обрабатывает недостающие данные.
Майк Данлавей
Альтернативой WinBUGS является OpenBUGS или STAN. Они должны быть более дружественными к Mac.
Maxim.K

Ответы:

15

Кредит этого ответа принадлежит @Joshua, который дал потрясающий ответ, когда я разместил этот вопрос в сообществе R and Statistics в Google+. Я просто вставляю его ответ ниже.

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

Обработка пропущенных данных с максимальным правдоподобием для всех доступных данных (так называемая FIML) является очень полезной техникой. Тем не менее, существует ряд сложностей, которые затрудняют реализацию в общем виде. Рассмотрим простую модель линейной регрессии, предсказывающую некоторый непрерывный результат, скажем, по возрасту, полу и типу занятий. В OLS вы не беспокоитесь о распределении по возрасту, полу и профессии, а только о результате. Обычно для категориальных предикторов они кодируются фиктивно (0/1). Чтобы использовать ML, предположения о распределении необходимы для всех переменных с отсутствием. Безусловно, самый простой подход - это многомерный нормальный (MVN). Это то, что, например, Mplus будет делать по умолчанию, если вы не решите объявить тип переменной (например, категориальную). В простом примере, который я дал, Вы, вероятно, захотите предположить, что это нормально для возраста, Бернулли - для секса, а мультиноминальное - для типа работы. Последнее сложно, потому что у вас есть несколько двоичных переменных, но вы не хотите рассматривать их как Бернулли. Это означает, что вы не хотите работать с фиктивными переменными, вам нужно работать с фактической категориальной переменной, чтобы оценки ML могли правильно использовать многочлен, но это, в свою очередь, означает, что фиктивный процесс кодирования должен быть встроен в модель , а не данные. Опять усложняю жизнь. Кроме того, совместное распределение непрерывных и категориальных переменных нетривиально для вычисления (когда я сталкиваюсь с такими проблемами в Mplus, он довольно быстро начинает ломаться и бороться). Наконец, вы действительно в идеале указываете отсутствующий механизм данных. В стиле SEM, FIML, все переменные по существу обусловлены всеми остальными, но это не обязательно правильно. Например, возможно, возраст отсутствует как функция не пола и типа занятия, а их взаимодействия. Взаимодействие может не иметь важного значения для конечного результата, но если оно важно для отсутствия по возрасту, то оно также должно быть в модели, не обязательно представляющей интерес предметной модели, но модели отсутствующих данных.

lavaan будет использовать ML для MVN, но в настоящее время я считаю, что параметры категориальных данных ограничены (опять же, из поля SEM, это стандарт). Множественное вложение кажется на первый взгляд менее элегантным, поскольку оно делает явные многие скрытые предположения, лежащие в основе FIML (например, предположения о распределении для каждой переменной и прогнозирующая модель, предполагаемая для отсутствия по каждой переменной). Тем не менее, это дает вам большой контроль и явное размышление о распределении каждой переменной, и оптимальный механизм недостающих данных для каждой является ценным.

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

Так что это на самом деле не отвечает на ваш вопрос, но объясняет немного, почему совершенно общие рамки для борьбы с отсутствием являются хитрыми. В моем пакете semutils для ковариационных матриц я использую lavaan, чтобы использовать ML. Я делаю это, потому что я предполагаю, что для ковариационной матрицы дисперсии вы все равно используете непрерывные переменные, поэтому я предполагаю, что мои пользователи уже используют MVN для своих данных.

Это означает, что если все переменные с отсутствием являются непрерывными, lavaan , пакет моделирования структурных уравнений (SEM) является хорошим вариантом для использования в FIML в R.

Теперь вернемся к моему первоначальному вопросу. Мое намерение состояло в том, чтобы иметь магическое исправление отсутствия при выполнении линейной регрессии. Все мои переменные с отсутствующими были хорошими и непрерывными. Итак, я приступил к анализу в двух стилях:

  • Обычный способ с многократным вменением
  • В стиле SEM с лавой с использованием FIML.

Я скучал по многим вещам, выполняя регрессию в стиле SEM. Оба стиля дали одинаковые коэффициенты и R квадратов, но в стиле SEM я не получил тестирование значимости регрессии (типичные значения F с df), вместо этого я получил подходящие индексы, которые не помогли, так как я использовал все свои степени свободы. Также, когда одна модель имела R2 больше, чем другая, я не мог найти способ сравнить, была ли разница значимой. Кроме того, выполнение регрессии обычным способом дает доступ к куче тестов для предположений о регрессии, которые неоценимы. Для более подробного ответа на этот вопрос см. Мой другой вопрос , на который @StasK приятно ответил .

Таким образом, кажется, что вывод заключается в том, что lavaan является достойным пакетом для FIML в R, но использование FIML зависит от статистических допущений и типа проводимого анализа. Что касается регрессии (без моделирования скрытых переменных), то, вероятно, разумным шагом будет исключение ее из программ SEM и использование множественного вменения.

Sootica
источник
1

Что касается вашего вопроса FIML, я решил поделиться этой замечательной статьей SAS Пола Эллисона http://www.statisticalhorizons.com/wp-content/uploads/MissingDataByML.pdf

Учитывая комментарии, сделанные Полом Эллисоном, можно легко реализовать ту же процедуру в R, используя lme или nlmer.

AsH
источник
-3

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

Этот второй подход называется вменением данных, и есть несколько пакетов R, которые делают это. Один из них называется mclust, а нужная вам функция называется imputeData. Эта функция использует алгоритм EM (максимизация ожидания) для оценки параметров ненаблюдаемой части набора данных, учитывая наблюдаемую часть. Как только параметры найдены, генерируется новая точка данных. Предположение о распределении отсутствующих данных, наблюдаемых данных и всего набора данных предполагается гауссовским.

Надеюсь, это объяснение поможет вам добиться того, что вы пытаетесь сделать

Lalas
источник
Благодарю. Мне известны пакеты для множественного вменения, но хотелось бы посмотреть, есть ли относительно простой способ сделать оценку максимального правдоподобия.
Sootica
Функция правдоподобия не определена для случая, когда выборка x отсутствует. Так что я думаю, что вы можете искать что-то, что не существует.
Лалас
2
См. Эту статью для объяснения использования подходов максимального правдоподобия для пропущенных данных ( Allison, 2012 ). То, что описывает ОП, существует.
Энди Ш
2
И вот что-то из SAS по этому поводу. support.sas.com/documentation/cdl/en/statug/63347/HTML/default/… Я никогда не видел ничего в R.
Джереми Майлз
Спасибо @JeremyMiles, я только что опубликовал то, что помогло мне ответить на этот вопрос, думал, что другие тоже могут найти это полезным. PS. Книга R, которую ты написал с Энди Филдом, потрясающая !! : D
Sootica