Невозможно сохранить сопоставленный образец после matchit (): ошибка в cbind_all (x): аргумент 2 должен иметь имена

Я использовалmatchit() и Method="nearest". Но когда я пытаюсь сохранить результат в data.frame по match.data(), появляется ошибка:

Ошибка в cbind_all (x): аргумент 2 должен иметь имена.

Мой код:

a = matchit(Y ~ Year + IndustryCode + ROA + Debt, 
            data=data, method="nearest", ratio=1)
b = match.data(a)
  • Переменная года = 2003, 2004 и т. Д.
  • IndustryCode = A02, A21 и т. Д.
  • другие переменные числовые.

Это предупреждения после matchit():

Предупреждающие сообщения:
1: glm.fit: подобраны числовые вероятности 0 или 1
2: In matchit2nearest (c (FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,:
Меньше контроля, чем обработанных единиц, и сопоставление без замены. Не все обработанные единицы получат соответствие. Обработанные единицы будут сопоставлены в порядке, указанном m.order: наибольший.

Как вы думаете, в чем причина?


person Yufang    schedule 26.10.2018    source источник


Ответы (2)


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

Второе предупреждение связано с тем, что ваша обработанная группа больше, чем ваша контрольная группа. Если вы выполняете сопоставление 1: 1 без замены, все блоки управления будут израсходованы до того, как все обработанные блоки будут сопоставлены. Чтобы исправить это, вам нужно сопоставить с заменой или подумать о том, действительно ли вы хотите обобщить контрольную популяцию и поменять метки на группах лечения. Вы можете сделать это, создав новую переменную, скажем notY, которая равна 1 - Y, и затем выполнив те же операции.

Ошибка в том, что я полагаю, что вы используете тиббл, а не стандартный фрейм данных. MatchIt не полностью совместим с таблицами. Перед запуском анализа попробуйте запустить data <- as_data_frame(data), чтобы преобразовать его обратно во фрейм данных. Перед этим вам может потребоваться загрузить пакет tibble с library(). Причина, по которой я считаю, что ваша проблема может заключаться в том, что match.data() не вызывает cbind_all(); он вызывает cbind(), который является универсальным методом, который отправляет в класс метод, в данном случае метод для тиббла. cbind метод для тиббла вызывает cbind_all().

person Noah    schedule 24.11.2018

Эта ошибка произошла со мной, потому что у data были группы. Итак, я сначала сделал ungroup(data) и не получил ошибки.

person b_g    schedule 18.12.2018
comment
У меня была эта проблема, и ваш трюк решил ее за меня. Спасибо, что поделился. - person vengefulsealion; 23.05.2019