SciPy致力于解决科学计算,它的不同子模块对应于不同应用,如插值、积分、优化、图像处理、特殊函数等。
利用SciPy进行一元线性回归分析,首先读取数据并可视化,初步观察其相关性,代码如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime as dt
#修改matplotlib库的字体使其显示中文
plt.rcParams['font.sans-serif']=['SimHei'] #正常显示正文标签
plt.rcParams['axes.unicode_minus']=False #正常显示负号
data=pd.read_csv('data.csv',index_col='Date') #获取近两年深沪300与中国平安每日涨跌数据
data.index=[dt.datetime.strptime(x,'%Y-%m-%d') for x in data.index]
data.head()
data.plot(figsize=(10,6))
plt.ylabel('涨跌幅')
效果图如下:
可以发现,两者之间相关性还是比较大的。
接下来用到StatsModels模块,在此应用其强大的OLS(ordinary least square)功能进行回归分析。
import statsmodels.api as sm #导入该模块
x=data['深沪300'].values #添加常数项
X=sm.add_constant(x)
y=data['中国平安'].values
#接着,对两者的收益率进行线性回归,斜率即β系数
model=sm.OLS(y,X)
results=model.fit()
results.params
plt.figure(figsize=(10,6))
plt.plot(x,y,'o',label='中国平安-深沪300')
plt.plot(x,results.fittedvalues,'r--',label='ordinary least square')
plt.legend()
plt.xlabel('深沪300')
plt.ylabel('中国平安')
plt.grid(True)