Экспериментирование и причинный вывод

Причинный вывод с использованием синтетического контроля: полное руководство

Можно ли сделать причинно-следственный вывод, используя только один обработанный случай и несколько контрольных случаев?

Техническая дилемма

В других сообщениях я объяснил, что такое причинная связь и как сделать причинный вывод, используя квазиэкспериментальные модели (DID, ITS, RDD). Почти для всех методов исследования они должны соответствовать двум предварительным условиям, чтобы получить значимое понимание:

1. обработанная группа выглядит как контрольная группа (сходство для сопоставимости);

2. Достаточно большое количество наблюдений внутри каждой группы (большое n).

Эти два предварительных условия закладывают основу для причинного вывода. Однако возможно ли сделать причинно-следственный вывод, если у нас есть только один пролеченный случай и несколько контрольных случаев? Хуже того, что мы будем делать, если нет контрольных случаев с такими же ковариатами, как в рассматриваемом случае?

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

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

Основы

SCM использует средневзвешенное значение нескольких случаев из «донорского» пула для создания искусственного контрольного случая.

Вот упрощенный процесс:

  1. гипотетически имеется J + 1 единиц;
  2. j (1) - это обработанный случай (A внимание: только один обработанный случай); единицы от j (2) до j (j + 1) являются нераскрытыми случаями, которые составляют «пул доноров»;
  3. пул от доноров и получить средневзвешенное значение единиц
  4. выберите взвешенное значение W *, которое минимизирует следующую функцию потерь:

(Подробное описание см. в статьях Abadie et al. 2010 и Abadie et al. 2015.)

Таким образом, SCM проводит нас через процесс создания контрольного варианта, предоставляя формальные критерии и процедуры, чего не удается достичь с помощью сопоставления или других основанных на регрессии методов.

Еще одним достоинством SCM является его способность сделать синтетический случай похожим на обработанный случай в ключевых показателях с точки зрения предшествующих ковариат и других предикторов результатов (Abadie et al. 2010). Другими словами, SCM может обеспечить сравнение яблок с яблоками.

Когда использовать SCM?

SCM - идеальный выбор для следующих двух сценариев:

  1. социальные мероприятия происходят на агрегированном уровне, например округ, штат, провинция.
  2. только один пролеченный случай и несколько контрольных случаев.

Благодаря этим двум характеристикам SCM является незаменимым методом, когда дело доходит до крупномасштабной оценки программ (например, Калифорнийская программа борьбы против табака, Оценка мер вмешательства в местные преступления). Серьезно, индустрии действительно стоит добавить его в свой инструментарий DS.

Преимущества

Всего у SCM есть три преимущества.

  1. Он присваивает веса в пределах от 0 до 1, поэтому избегает экстраполяции. Экстраполяция означает, что мы не ограничиваем веса между 0 и 1, но это не имеет смысла, если вес остается за пределами 100%. Я имею в виду, как интерпретировать вес 200%? В нем вообще нет никакой интуиции.
  2. В нем излагаются критерии отбора и объясняется относительная важность каждого донора.
  3. Синтетический контрольный случай очень похож на обработанный случай, почти такой же.
  4. Выбор синтетического контроля не зависит от результатов после вмешательства, что делает невозможным выбор дизайна исследования, который может повлиять на выводы.

Как это использовать?

1. Отраслевое приложение

  1. Оценка программы.

2. Исследование преступности

3. Редкие события

  • Потенциально, мы могли бы применить синтетический контроль, чтобы генерировать больше случаев для редких событий, поскольку для редких событий не хватает данных. Пожалуйста, посмотрите мой другой пост о том, как классифицировать редкие события с помощью 5 классификаторов машинного обучения.


2. Реализация R

В этом разделе я воспроизведу результаты Abadie (2003), в которых исследуется, как терроризм влияет на экономическое производство в Стране Басков, Испания. Мы будем использовать пакет R Synth для нашего анализа, и, пожалуйста, обратитесь к Synth: пакет R для синтетических методов контроля в сравнительных тематических исследованиях для получения подробных математических объяснений и инструкций R.

Шаг 0: пакет, библиотека и исследовательский анализ данных

# install and load package
install.packages("Synth") 
library(Synth)
# read the dataset "basque"
data("basque")
#EDA
dim(basque) #774*17
basque[1:10,]

В таблице 1 имеется 774 наблюдения и 17 переменных (столбцов).

Столбцы 1–3: номер региона, название и год (идентификационная информация)

DV: gdpcap (ВВП на душу населения)

Другие столбцы: 13 переменных-предикторов.

Шаг 1. Подготовка данных

Исходный набор данных «basque» имеет традиционный формат панели, и нам нужно прочитать его в другой форме для использования synth ().

# set up different arguments
# foo:  
dataprep.out <- dataprep(foo = basque,
 predictors = c(“school.illit”, “school.prim”, “school.med”,
 “school.high”, “school.post.high”, “invest”),
 predictors.op = “mean”, # the operator
 time.predictors.prior = 1964:1969, #the entire time frame from the #beginning to the end
 special.predictors = list(
 list(“gdpcap”, 1960:1969, “mean”),
 list(“sec.agriculture”, seq(1961,1969,2),”mean”),
 list(“sec.energy”,seq(1961,1969,2),”mean”),
 list(“sec.industry”, seq(1961,1969,2),”mean”),
 list(“sec.construction”, seq(1961,1969,2),”mean”),
 list(“sec.services.venta”, seq(1961,1969,2),”mean”),
 list(“sec.services.nonventa”,seq(1961,1969,2),”mean”),
 list(“popdens”, 1969, “mean”)),
 dependent = “gdpcap”, # dv
 unit.variable = “regionno”,#identifying unit numbers
 unit.names.variable = “regionname”,#identifying unit names
 time.variable = “year”,#time-periods
 treatment.identifier = 17,#the treated case
 controls.identifier = c(2:16, 18),#the control cases; all others #except number 17
 time.optimize.ssr = 1960:1969,#the time-period over which to optimize
 time.plot = 1955:1997)#the entire time period before/after the treatment

dataprep.out получает четыре значения (X1, X0, Z1, Z0), которые позволяют нам сделать причинно-следственный вывод.

X1: контрольный случай до лечения.

X0: контрольные случаи после лечения.

Z1: случай лечения до лечения.

Z0: лечебный случай после лечения.

Шаг 2. Запустите synth ()

synth.out = synth(data.prep.obj = dataprep.out, method = “BFGS”)

Чтобы рассчитать разницу между реальной областью Baseque и синтетическим контролем, выполните следующие действия:

gaps = dataprep.out$Y1plot — (dataprep.out$Y0plot 
                                     %*% synth.out$solution.w)
gaps[1:3,1]

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

synth.tables = synth.tab(dataprep.res = dataprep.out,
                         synth.res = synth.out)
names(synth.tables)
[1] "tab.pred" "tab.v"    "tab.w"    "tab.loss"

Примечание. synth.tables $ tab.pred - это таблица, в которой сравниваются значения предикторов до обработки для обрабатываемой единицы, синтетического контроля и всех единиц в выборке.

synth.tables$tab.pred[1:13,]

Честно говоря, мне не удалось добиться того же результата, что и исходная бумага. Исходный код (synth.tables $ tab.pred [1: 5,]) просматривает первые 5 ковариат между обработанным и синтетическим случаями и обнаруживает, что они очень похожи. Поэтому я расширил код, включив в него 13 ковариат, и обнаружил, что остальные переменные очень похожи, за исключением нескольких.

Как отмечалось выше, SCM позволяет нам проверять относительную важность каждой единицы.

synth.tables$tab.w[8:14, ]

Как видно, вклад подразделения № 10 Cataluna в дело составляет 85,1%, а вклад подразделения № 14 Madrid (Comunidad De) - 14,9%. Все остальные контрольные примеры не вносят никакого вклада.

# plot the changes before and after the treatment 
path.plot(synth.res=synth.out,dataprep.res = dataprep.out, 
          Ylab="real per-capita gdp (1986 USD, thousand)",Xlab="year",
          Ylim = c(0,12),Legend = c("Basque country", 
                                    "synthetic Basque country"),
          Legend.position = "bottomright")

gaps.plot(synth.res = synth.out, dataprep.res = dataprep.out,
 Ylab = “gap in real per-capita GDP (1986 USD, thousand)”, Xlab= “year”,
 Ylim = c(-1.5,1.5), Main = NA)

Справочные и дополнительные ресурсы

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



Дальнейшее чтение:







Нравится читать это?

Если да, то найдите меня в LinkedIn и Twitter.

Также ознакомьтесь с другими моими сообщениями об искусственном интеллекте и машинном обучении.