多元线性回归模型

我们在使用多元线性回归模型之前需要对变量做以下处理:

1.对因变量进行正态分布检验,若符合则我们才可以使用,不符合则不选择。

2.对自变量进行多重共线性检验,方法很多:

(1)辅助回归模型检验

(2)VIF膨胀系数检验

(3)皮尔逊相关系数,相关系数的攫取,取决于自变量的分布,可用欧式平方距离择最优系数

3.对变量进行T- test、F- test,目的是为了发现两者之前是否有统计学意义,是否有差异,以0.05为界限,若P大于0.05,则在统计学上无意义,但不能不代表无实际意义,比如在某个领域做出0-0.01的变化,人类的一小步,世界的一大步。

4.当变量较多时,我们用T-test的推广,F-test,可以看出多变量对总体的贡献大小。

以下为多元线性回归模型的部分步骤及代码

from sklearn import model_selection
import pandas as pd
import statsmodels.api as sm
import seaborn as sns
from matplotlib import pyplot as plt
from sklearn.preprocessing import MinMaxScaler
import numpy as np
from scipy.stats import f
from scipy import stats
from statsmodels.stats.outliers_influence import variance_inflation_factor

#导入数据
MEDV = pd.read_excel(r'housing.xlsx')
#切分数据集
train, test = model_selection.train_test_split(MEDV, test_size=0.2, random_state= 1234)
#根据train数据集建模
model = sm.formula.ols('MEDV ~ RM + LSTAT + PTRATIO +C(AREA)', data=train).fit()
print('模型的偏回归系数分别为:\n',model.params)


#删除test数据集中的MEDV变量,用剩下的自变量进行预测
test_X = test.drop(labels = 'MEDV' , axis = 1)
pred = model.predict(exog = test_X)
#print('对比预测值和实际值的差异:\n',pd.DataFrame({'Prediction':pred,'True':test.MEDV}))
df_output = pd.DataFrame(columns=['MEDV_true', 'MEDV_pred'])
#df_output['RM'] = df['RM']
#df_output['LSTAT'] = df['LSTAT']
#df_output['PTRATIO'] = df['PTRATIO']
#df_output['x4'] = X_validation['x4']
df_output['MEDV_true'] = test.MEDV
df_output['MEDV_pred'] = pred
df_output.to_excel('MEDV_true_pred.xlsx')


#生成由AREA变量衍生的哑变量
dummies = pd.get_dummies(MEDV.AREA)
#print(dummies)
#将哑变量与原始数据集水平合并
dfile_New = pd.concat([MEDV, dummies], axis=1)
#print('dfile_New:\n',dfile_New)
df2_output = pd.DataFrame(columns=['RM','LSTAT','PTRATIO','AREA','MEDV','beijing','guangzhou','shanghai'])
df2_output['RM'] = dfile_New['RM']
df2_output['LSTAT'] = dfile_New['LSTAT']
df2_output['PTRATIO'] = dfile_New['PTRATIO']
#df_output['x4'] = X_validation['x4']
df2_output['AREA'] = dfile_New['AREA']
df2_output['MEDV'] = dfile_New['MEDV']
df2_output['beijing'] = dfile_New['beijing']
df2_output['guangzhou'] = dfile_New['guangzhou']
df2_output['shanghai'] = dfile_New['shanghai']
df2_output.to_excel('dfile_New.xlsx')

#为了分析相关性需要生成除了AREA的自变量
df4_output = pd.DataFrame(columns=['RM','LSTAT','PTRATIO','MEDV','beijing','guangzhou','shanghai'])
df4_output['RM'] = dfile_New['RM']
df4_output['LSTAT'] = dfile_New['LSTAT']
df4_output['PTRATIO'] = dfile_New['PTRATIO']
df4_out

你可能感兴趣的:(线性回归,经验分享)