сказать, что я сделать регрессию МНК с использованием statsmodels переменной y
на некоторых объясняющих переменных x1 x2 x3
(содержится в dataframe df
):МНК предсказать, используя только подмножество объясняющих переменных
res = smf.ols('y ~ x1 + x2 + x3', data=df).fit()
Можно ли получить предсказанное значение, используя только подмножество объясняющих переменных? Например, я хотел бы получить прогнозируемое значение для наблюдений в df
, используя только x1
и x2
, но не .
Я попытался сделать
res.predict(df[['x1','x2']])
, но я получаю сообщение об ошибке: NameError: name 'x3' is not defined
.
Редактировать: Причина, по которой я хочу сделать это, заключается в следующем. Я выполняю регрессию ценностей дома по характеристикам дома и манекенам для столичной области, статуса пригородного района и года. Я хотел бы использовать манекены для столичной области, пригородного статуса и года, чтобы построить индекс цен для каждого местоположения и периода времени.
Редактировать 2: Вот как я это сделал, на случай, если это может быть полезно любому, или кто-то может указать мне на лучший способ сделать это.
Я заинтересован в этом МНК на следующей спецификации:
model = 'price ~ C(MetroArea) + C(City) + C(Year) + x1 + ... + xK'
где 'x1 + ... + xK'
псевдо-код для связки переменных, которые я использую в качестве контроля, но я не интересует, и категориальные переменные очень большие (например, 90 мегаполисов).
Далее я подгоняю модель с помощью statsmodels и создаю матрицу дизайна, которую я буду использовать для прогнозирования цен с использованием интересующих переменных.
res = smf.ols(model, data=mydata).fit()
data_prediction = mydata[['MetroArea','City','Year']]
model_predict = 'C(MetroArea) + C(City) + C(Year)'
X = patsy.dmatrix(model_predict, data=data_prediction, return_type='dataframe')
Хитрость теперь выбрать правильные параметры для переменных, представляющего интереса, так как существует много, и их имена не являются именно теми их соответствующими переменными, так как я использовал категорический оператор, C()
, из (например, переменные для MetroArea выглядят так: C(MetroArea)[0]
, C(MetroArea)[8]
, ...).
vars_interest = ['Intercept', 'MetroArea', 'City', 'Year']
params_interest = res.params[[any([word in var for word in vars_interest])
for var in res.params.index]]
Получить предсказание, делая скалярное произведение выбранных параметров и переменных, представляющих интерес:
prediction = np.dot(X,params_interest)
Проблема с этим решением является то, что она становится очень неудобно, когда 'x3' большой вектор управляющих переменных, а когда' df' большой набор данных. – Maturin
Я не думаю, что поддержка этого в предсказании имеет смысл. Вы должны просто сделать точечный продукт самостоятельно, если вы хотите это сделать. Вам нужно будет передавать константу явно в X, хотя. – jseabold
Представление для OLS (линейная модель) - это просто 'x dot params', поэтому вы можете выбрать соответствующие столбцы x и соответствующие элементы вектора params. – user333700