残差分析(residual analysis)回归方程拟合的数值和实际数值的差值就是残差;残差分析是通过残差所提供的信息,分析出数据的可靠性、周期性或其他干扰;用于分析模型的假定正确与否的方法;残差:指观测值与预测值(拟合值)之间的差,即实际观测值与回归估算值的差;
通常使用颜色渐变及气泡面积大小,通过视觉暗示对应残差的绝对值大小,用于实际数据点的表示;
拟合数据点则用小空心圆圈表示,并放置在灰色的拟合曲线上;
用直线连接实际数据点和拟合数据点;
残差的绝对值越大,颜色越红、气泡也越大,连接直线越长,可以很清晰地观察数据的拟合效果;
先根据拟合曲线计算预测值和残差;
再使用实际值与预测值绘制散点图;
最后使用残差作为实际值的误差线长度,添加误差线;
实现实际值与预测值的连接;
将实际值的气泡面积大小与颜色映射到对应点的残差数值;
Statsmodels包的sm.OLS()函数可以实现线性或多项式回归拟合方程的求解,依据方程,可以求取预测值;
import pandas as pd
import numpy as np
from plotnine import *
import statsmodels.api as sm
df=pd.read_csv('d:\python\out\ResidualAnalysisD.csv')
#线性回归
results = sm.OLS(df.y2, df.x).fit()
df['predicted']=results.predict() # 保存预测值
df['residuals']=df.predicted-df.y2 #保存残差(有正有负)
df['Abs_Residuals']=np.abs(df.residuals) #保存残差的绝对值
#mydata包含x、y2、predicted、residuals、Abs_Residuals 共5列数值
base_Residuals=(ggplot(df, aes(x = 'x', y = 'y2')) +
geom_point(aes(fill ='Abs_Residuals', size = 'Abs_Residuals'),shape='o',colour="black") +
# 使用实际值绘制气泡图,并将气泡的颜色和面积映射到残差的绝对值Abs_Residuals
geom_line(aes(y = 'predicted'), color = "lightgrey") + #添加空心圆圈的预测值
geom_point(aes(y = 'predicted'), shape = 'o') + #添加空心圆圈的预测值
geom_segment(aes(xend = 'x', yend = 'predicted'), alpha = .2) +#添加实际值和预测值的连接线...
scale_fill_gradientn(colors = ["black", "red"]) + #填充颜色映射到red单色渐变系
guides(fill = guide_legend(title="Rresidual"),
size = guide_legend(title="Rresidual"))+
theme(
axis_title=element_text(size=18,face="plain",color="black"),
axis_text = element_text(size=16,face="plain",color="black"),
aspect_ratio =1.1,
figure_size = (5, 5),
dpi = 100)
)
print(base_Residuals)
import pandas as pd
import numpy as np
from plotnine import *
import statsmodels.api as sm
df=pd.read_csv('d:\python\out\ResidualAnalysisD.csv')
#二次回归
X = np.column_stack((df.x, df.x**2))
#使用 sm.add_constant() 在 array 上加入一列常项 1。
X = sm.add_constant(X)
results = sm.OLS(df.y5, X).fit()
df['predicted']=results.predict() # 保存预测值
df['residuals']=df.predicted-df.y5 #保存残差(有正有负)
df['Abs_Residuals']=np.abs(df.residuals) #保存残差的绝对值
#mydata包含x、y2、predicted、residuals、Abs_Residuals 共5列数值
base_Residuals1=(ggplot(df, aes(x = 'x', y = 'y5')) +
geom_point(aes(fill ='Abs_Residuals', size = 'Abs_Residuals'),shape='o',colour="black") +
# 使用实际值绘制气泡图,并将气泡的颜色和面积映射到残差的绝对值Abs_Residuals
geom_line(aes(y = 'predicted'), color = "lightgrey") + #添加空心圆圈的预测值
geom_point(aes(y = 'predicted'), shape = 'o') + #添加空心圆圈的预测值
geom_segment(aes(xend = 'x', yend = 'predicted'), alpha = .2) +#添加实际值和预测值的连接线...
scale_fill_gradientn(colors = ["black", "red"]) + #填充颜色映射到red单色渐变系
guides(fill = guide_legend(title="Rresidual"),
size = guide_legend(title="Rresidual"))+
theme(
axis_title=element_text(size=18,face="plain",color="black"),
axis_text = element_text(size=16,face="plain",color="black"),
aspect_ratio =1.1,
figure_size = (5, 5),
dpi = 100)
)
print(base_Residuals1)