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