AQI与谁更相关?多元线性回归模型初试

多元线性回归模型用来模拟一个因变量与多个自变量因子之间的线性相关关系。设y为因变量,x1,x2,...,xk为自变量,并且自变量与因变量之间为线性关系时,则多元线性回归模型为: y=b0+b1x1+b2x2+...+bkxk,其中b0为常数项,b1,b2,...bk为回归系数。

空气质量指数(Air Quality Index,简称AQI)是定量描述空气质量状况的无量纲指数。针对单项污染物的还规定了空气质量分指数。参与空气质量评价的主要污染物为细颗粒物、可吸入颗粒物、二氧化硫、二氧化氮、臭氧、一氧化碳等六项。 利用多元线性回归分析模型,试找出一组气象数据中 aqino2,o3,co,so2 指数之间的相关关系。

数据准备

原始数据为一组点数据,包含了 aqino2,o3,co,so2 指数,使用pysal来读取点数据,与属性表中的属性数据,并绘制点数据。 在对数据进行模拟之前,绘制出 aqi 分别与 no2,o3,co,so2 之间的关系,直观的感受数据之间的关系。使用的是seaborn的pairplot函数绘制X的每一维度和对应Y的散点图,分别选择 no2,o3,co,so2 作为特征,aqi 作为观测值。通过加入一个参数kind='reg',seaborn可以添加一条最佳拟合直线和95%的置信带。

sns.pairplot(tempdf, x_vars=['no2','o3','co','so2'], y_vars='aqi', size=7, aspect=0.8,kind='reg')  

从图上可以看出,aqio3 线性关系极弱,与 co 有一定线性相关关系。

回归分析

读取 no2,o3,co,so2 值作为自变量X,读取aqi作为因变量y。 引用sklearn库中交叉验证分别将X,y分别划分为训练集与测试集。默认将样本的75%划为训练集,25%划为测试集。

from sklearn.cross_validation import train_test_split  
X_train,X_test, y_train, y_test = train_test_split(X, y, random_state=1)  

然后调用sklearn库中的线性回归模型,对训练集进行模拟。得出回归方程:y=42.0522358061+ 1.31750989no2-0.45277704o3+5.74059479co+5.74059479so2。 从系数大小我们也可以看出co的系数是最大的,验证了之前从散点图上得出的结论。

接着用得出的线性方程对测试集进行预测,并对预测结果进行评价。3种常用的针对线性回归的测度为平均绝对误差(Mean Absolute Error, MAE)、均方误差(Mean Squared Error, MSE)和均方根误差(Root Mean Squared Error, RMSE)。这里我们使用的是RMES。 将预测的y值与实际y值进行比较,做ROC曲线。蓝色为预测值,红色为实际值。

后记

实际上,AQI在整个数据范围中存在地理差异,即不同区域的 aqino2,o3,co,so2 的相关关系也不同。同时 aqi 与其他指数的关系也存在其他相关关系,这里也只是选取了部分指标作为尝试与学习,最后谢谢公司小伙伴们提供的技术支持~。

Zoey

继续阅读此作者的更多文章