<Python + Patsy> Почему имя фиктивных переменных с / без T?
С помощью patsy
Я заметил, что он иногда называл фиктивные переменные T
и без T
в других случаях. И сегодня я понял, что T
присоединяется, когда постоянный член присутствует в уравнении регрессии, и нет T
без постоянного срока. Например, сравнить z[T.1]
, z[0]
, z[1]
, указано OUTPUT
в следующем коде.
import pandas as pd
import patsy
data = {'z': ['1', '0', '0'],
'y': [150, 200, 50],
'x': [200, 210, 90]}
df = pd.DataFrame(data)
# with constant -----------------------
form_const = 'y ~ x + z'
y_const, X_const = patsy.dmatrices(form_const, df, return_type='dataframe')
print(X_const.columns.tolist())
# ['Intercept', 'z[T.1]', 'x'] <- OUTPUT
# withOUT constant --------------------
form_no_const = 'y ~ -1 + x + z'
y_no_const, X_no_const = patsy.dmatrices(form_no_const, df, return_type='dataframe')
print(X_no_const.columns.tolist())
# ['z[0]', 'z[1]', 'x'] <- OUTPUT
Вопросы
Какова роль T
? Это просто указывает на наличие постоянного члена? Если так, разве это не избыточно, учитывая, что мы всегда можем видеть наличие / отсутствие постоянного члена? Есть ли другие роли?
Ваше понимание ценится заранее.
1 ответ
Есть много разных способов кодирования категориальных переменных в регрессии. Они дают одни и те же прогнозы, но фактические бета-коэффициенты отличаются, и если вы хотите интерпретировать бета-версии или провести проверку гипотез на них, вам необходимо знать, какое кодирование использовалось.
Пэтси использует имена как подсказку о том, какая система кодирования используется. Когда есть буква "Т", это "кодирование лечения", а коэффициенты бета показывают, как отклик для данной категории отличается от некоторой базовой категории. Когда нет буквы "Т", бета-коэффициенты - это не различия, а просто прогноз для этой категории.
Причина, по которой patsy иногда использует одну, а иногда - другую, заключается в том, что она автоматически пытается найти кодировку полного ранга, где все бета-версии имеют уникальные и понятные значения. (Другой вариант - это "переопределенная" модель, в которой существует бесконечно много бета-версий, дающих одинаковые прогнозы, и вам необходимо добавить дополнительные произвольные ограничения, чтобы соответствовать модели.) Если в вашей модели есть термин "перехват", то это обеспечивает одна степень свободы, чтобы начать, и когда patsy идет, чтобы добавить категориальную переменную, он обнаруживает это и использует (n-1)-мерное кодирование, такое как кодирование обработки, и вы получаете "T". Если нет термина перехвата, тогда он использует n-мерное кодирование, и вы не получите "T".
Patsy также позволяет вам выбирать различные схемы кодирования или даже определять свою собственную: https://patsy.readthedocs.io/en/latest/API-reference.html
Для получения дополнительной информации о схемах кодирования в целом, смотрите:
- https://www.statsmodels.org/dev/contrasts.html
- https://stats.idre.ucla.edu/r/library/r-library-contrast-coding-systems-for-categorical-variables/ (обратите внимание, что для некоторых схем кодирования используется несколько иная терминология)