gpt4 book ai didi

python - 具有虚拟/分类变量的线性回归

转载 作者:行者123 更新时间:2023-11-28 20:14:09 25 4
gpt4 key购买 nike

我有一组数据。我已经使用 pandas 将它们分别转换为虚拟变量和分类变量。所以,现在我想知道如何在 Python 中运行多元线性回归(我正在使用 statsmodels)?是否有一些注意事项,或者我可能必须以某种方式表明我的代码中的变量是虚拟的/分类的?或者也许变量的转换就足够了,我只需要将回归运行为 model = sm.OLS(y, X).fit()?。

我的代码如下:

datos = pd.read_csv("datos_2.csv")
df = pd.DataFrame(datos)
print(df)

我明白了:

Age  Gender    Wage         Job         Classification 
32 Male 450000 Professor High
28 Male 500000 Administrative High
40 Female 20000 Professor Low
47 Male 70000 Assistant Medium
50 Female 345000 Professor Medium
27 Female 156000 Assistant Low
56 Male 432000 Administrative Low
43 Female 100000 Administrative Low

然后我做:1=男,0=女,1:教授,2:行政,3:助理这样:

df['Sex_male']=df.Gender.map({'Female':0,'Male':1})
df['Job_index']=df.Job.map({'Professor':1,'Administrative':2,'Assistant':3})
print(df)

得到这个:

 Age  Gender    Wage             Job Classification  Sex_male  Job_index
32 Male 450000 Professor High 1 1
28 Male 500000 Administrative High 1 2
40 Female 20000 Professor Low 0 1
47 Male 70000 Assistant Medium 1 3
50 Female 345000 Professor Medium 0 1
27 Female 156000 Assistant Low 0 3
56 Male 432000 Administrative Low 1 2
43 Female 100000 Administrative Low 0 2

现在,如果我要运行多元线性回归,例如:

y = datos['Wage']
X = datos[['Sex_mal', 'Job_index','Age']]
X = sm.add_constant(X)
model1 = sm.OLS(y, X).fit()
results1=model1.summary(alpha=0.05)
print(results1)

结果显示正常,但是这样可以吗?还是我必须以某种方式表明变量是虚拟变量还是分类变量?请帮助,我是 Python 的新手,我想学习。来自南美洲 - 智利的问候。

最佳答案

您需要指明 JobJob_index 是分类变量;否则,在 Job_index 的情况下,它将被视为一个连续变量(恰好取值 123),这是不对的。

您可以在 statsmodels 中使用几种不同的表示法,这里是公式方法,它使用 C() 来指示分类变量:

from statsmodels.formula.api import ols

fit = ols('Wage ~ C(Sex_male) + C(Job) + Age', data=df).fit()

fit.summary()

OLS Regression Results
==============================================================================
Dep. Variable: Wage R-squared: 0.592
Model: OLS Adj. R-squared: 0.048
Method: Least Squares F-statistic: 1.089
Date: Wed, 06 Jun 2018 Prob (F-statistic): 0.492
Time: 22:35:43 Log-Likelihood: -104.59
No. Observations: 8 AIC: 219.2
Df Residuals: 3 BIC: 219.6
Df Model: 4
Covariance Type: nonrobust
=======================================================================================
coef std err t P>|t| [0.025 0.975]
---------------------------------------------------------------------------------------
Intercept 3.67e+05 3.22e+05 1.141 0.337 -6.57e+05 1.39e+06
C(Sex_male)[T.1] 2.083e+05 1.39e+05 1.498 0.231 -2.34e+05 6.51e+05
C(Job)[T.Assistant] -2.167e+05 1.77e+05 -1.223 0.309 -7.8e+05 3.47e+05
C(Job)[T.Professor] -9273.0556 1.61e+05 -0.058 0.958 -5.21e+05 5.03e+05
Age -3823.7419 6850.345 -0.558 0.616 -2.56e+04 1.8e+04
==============================================================================
Omnibus: 0.479 Durbin-Watson: 1.620
Prob(Omnibus): 0.787 Jarque-Bera (JB): 0.464
Skew: -0.108 Prob(JB): 0.793
Kurtosis: 1.839 Cond. No. 215.
==============================================================================

注意:JobJob_index 不会使用相同的分类级别作为基线,因此您会看到每个级别的虚拟系数的结果略有不同,即使整体模型拟合保持不变。

关于python - 具有虚拟/分类变量的线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50733014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com