异方差 Python运行
admin
2023-06-26 22:44:19
0次

import pandas as pd

 

import numpy as np

 

from patsy import dmatrices

 

from statsmodels.stats.outliers_influence import variance_inflation_factor

 

import statsmodels.api as sm

 

import scipy.stats as stats

 

from sklearn.metrics import mean_squared_error

 

import seaborn as sns

 

import matplotlib.pyplot as plt

 

import matplotlib.mlab as mlab

import scipy.io

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus'] = False

# 数据读取

 

# #ccpp = pd.read_excel( 'CCPP.xlsx')ccpp.describe()

# data = scipy.io.loadmat('ENCDATA-2hp.mat') # 读取mat文件

# # path = scio.loadmat('FFT-2hp.mat')['FFT-2hp']

# print(data)

# train1=data['train3hp']

# test1=data['test3hp']

# train_y=data['train_y3hp']

# test_y=data['test_y3hp']

# data1=train1[:,1]

# print("train1",train1.shape)

# print("data",data1.shape)

# # sns.pairplot(data)

# # plt.show()

# #y, X = dmatrices( data1, data = train1, return_type= 'dataframe')

# fit2 = sm.formula.ols( data1,data = train1).fit()

# print("fit2",fit2)

# fit2.summary()

# pred2 = fit2.predict()

# print("pred2",pred2)

#

# np.sqrt(mean_squared_error(train1.PE, pred2))

# resid = fit2.resid

# plt.scatter(fit2.predict(), (fit2.resid-fit2.resid.mean())/fit2.resid.std())

# plt.xlabel( '预测值')

# plt.ylabel( '标准化残差')

#

# # 添加水平参考线

#

# plt.axhline(y = 0, color = 'r', linewidth = 2)

# plt.show()

 

ccpp = pd.read_excel( 'CCPP.xlsx')

ccpp.describe()

sns.pairplot(ccpp)

plt.show()

 

# 发电量与自变量之间的相关系数

ccpp.corrwith(ccpp.PE)

y, X = dmatrices( 'PE~AT+V+AP', data = ccpp, return_type= 'dataframe')

 

# 构造空的数据框

 

vif = pd.DataFrame()

vif[ "VIF Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[ 1])]

# vif[ "features"] = X.columnsvif

# print(vif[ "features"])

# 构造PE与AT、V和AP之间的线性模型

 

fit = sm.formula.ols( 'PE~AT+V+AP',data = ccpp).fit()

fit.summary()

print("fit",fit)

# 计算模型的RMSE值

 

pred = fit.predict()

np.sqrt(mean_squared_error(ccpp.PE, pred))

 

# 离群点检验

 

outliers = fit.get_influence()

 

# 高杠杆值点(帽子矩阵)

 

leverage = outliers.hat_matrix_diag

 

# dffits值

 

dffits = outliers.dffits[ 0]

 

# 学生化残差

 

resid_stu = outliers.resid_studentized_external

 

# cook距离

 

cook = outliers.cooks_distance[ 0]

 

# covratio值

 

covratio = outliers.cov_ratio

 

# 将上面的几种异常值检验统计量与原始数据集合并

 

contat1 = pd.concat([pd.Series(leverage, name = 'leverage'),

                     pd.Series(dffits, name = 'dffits'),

                     pd.Series(resid_stu,name = 'resid_stu'),

 

 

 

                     pd.Series(cook, name = 'cook'),

                     pd.Series(covratio, name = 'covratio'),],axis = 1)

ccpp_outliers = pd.concat([ccpp,contat1], axis = 1)

ccpp_outliers.head()

print("contat1",contat1)

 

# 重新建模

 

fit2 = sm.formula.ols( 'PE~AT+V+AP',data = ccpp_outliers).fit()

fit2.summary()

 

# 计算模型的RMSE值

 

pred2 = fit2.predict()

np.sqrt(mean_squared_error(ccpp_outliers.PE, pred2))

function(){ //K线图 http://www.kaifx.cn/mt4/kaifx/1770.html

resid = fit2.resid

# 标准化残差与预测值之间的散点图

 

plt.scatter(fit2.predict(), (fit2.resid-fit2.resid.mean())/fit2.resid.std())

plt.xlabel( '预测值',fontdict={'family' : 'sans-serif', 'size' : 20})

plt.ylabel( '标准化残差',fontdict={'family' : 'sans-serif', 'size' : 20})

 

# 添加水平参考线

 

plt.axhline(y = 0, color = 'r', linewidth = 2)

plt.show()


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...