python 一组数据 正态分布散点图_python数据关系型图表散点图系列残差分析图

29fd76cb51a8965dda854883bf59a1c5.png

参差分析图(线性回归、二次回归)

残差分析(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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值