如何在多行回归中对解释变量求平方

时间:2018-10-23 19:25:22

标签: python pandas numpy regression

因此,我希望将我的变量空气质量,吸烟状况和吸烟状况的平方作为我的线性回归的一部分。因此,我可以通过在读取的.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 :(得分:0)

要在数据框中显示吸烟状态:

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

或者下面的慢循环版本

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

有关更多详细信息,请参见How to use Apply。这将覆盖数据框中的吸烟状态值。

答案 1 :(得分:0)

使用formula API。使用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

按照设计,Athma_Death_Rate与吸烟状态平方非常相关。