Statsmodels Категориальные данные из формулы (с использованием панд)

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

В настоящее время у меня есть:

import numpy as np import pandas as pd import statsmodels.formula.api as sm # This is where I'm getting data data = pd.read_csv("http://people.stern.nyu.edu/wgreene/Econometrics/bankdata.csv") # I want to use this form for my regression form = "C ~ Q1 + Q2 + Q3 + Q4 + Q5 + C(BANK)" # Do the regression mod = sm.ols(form, data=data) reg = mod.fit() print(reg.summary2()) 

Этот код вызывает ошибку, которая говорит: TypeError: 'Series' object is not callable . Здесь есть очень похожий пример на веб-сайте statsmodels, который, кажется, работает нормально, и я не уверен, в чем разница между тем, что я делаю, и тем, что они делают.

Любая помощь очень ценится.

ура

Проблема в том, что C – это имя одного из столбцов в вашем DataFrame, а также паттинг-способ обозначить, что вы хотите категориальную переменную. Самое простое исправление – просто переименовать столбец как таковой:

data = data.reaname_axis({'C': 'C_data'}, axis=1) form = "C_data ~ Q1 + Q2 + Q3 + Q4 + Q5 + C(BANK)"

Тогда вызов sm.ols будет работать.

Сообщение об ошибке TypeError: 'Series' object is not callable может быть TypeError: 'Series' object is not callable может быть интерпретировано следующим образом:

  • patsy интерпретирует C как столбец кадра данных. В этом случае это были бы data['C'] Серии data['C']
  • Затем тот факт, что это немедленно следует скобкой, заставил statsmodels попытаться вызвать data['C'] как функцию с аргументом BANK . Объекты серии не реализуют метод __call__ , поэтому появляется сообщение об ошибке, что 'Series' object is not callable .

Удачи!