Как возвести в квадрат объясняющую переменную в многострочной регрессии - PullRequest
0 голосов
/ 23 октября 2018

Таким образом, я хотел бы, чтобы мои объяснительные переменные качество воздуха и статус курения и статус курения возводились в квадрат как часть моей линейной регрессии.Так что я могу легко обойти это, добавив значения в файл .csv, из которого я читаю, но я бы хотел манипулировать им с помощью python.Есть ли способ манипулировать статусом курения, возводя его в квадрат и используя часть регрессии по нескольким линиям?В моем файле csv есть только 3 столбца, которые содержат данные о качестве воздуха, статусе курения и астме.

x = df[['Air_quality', 'Smoking_Status']]
y = df['Asthma_Death_Rate']

x = sm.add_constant(x)

est = sm.OLS(y,x).fit()

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Используйте API formula.С пометкой patsy вы должны иметь тривиальное значение, но у меня что-то не получается.Тем не менее он принимает функции;в этом случае мы возводим в квадрат, используя numpy.power.

import statsmodels.formula.api as smf
import numpy as np

mod = smf.ols('Asthma_Death_Rate ~ Air_quality + np.power(Smoking_Status, 2)', data=df).fit()

Образцы данных:

import pandas as pd
np.random.seed(123)
s = 100

df = pd.DataFrame({'Air_quality': np.random.randint(1, 20, s),
                   'Smoking_Status': np.arange(0, s, 1) + np.random.normal(size=s),
                   'Asthma_Death_Rate': np.arange(0, s, 1)**2})

Вывод: часть mod.summary()

===============================================================================================
                                  coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------------------
Intercept                       3.4253     33.039      0.104      0.918     -62.148      68.999
Air_quality                     3.2522      2.721      1.195      0.235      -2.148       8.653
np.power(Smoking_Status, 2)     0.9916      0.005    193.833      0.000       0.981       1.002

Как и предполагалось, Asthma_Death_Rate очень хорошо коррелирует с квадратом Smoking_Status.

0 голосов
/ 23 октября 2018

Для возведения в квадрат статуса курения в вашем фрейме данных:

df['Smoking_Status'] = df['Smoking_Status']**2

Или более медленная циклическая версия ниже

df['Smoking_Status'] = df['Smoking_Status'].apply(lambda x: x * x)

См. Как использовать Применить для получения более подробной информации.Это перезапишет значения статуса курения в вашем фрейме данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...