统计学基础

统计学基础,第1张

统计学基础

1. 书籍和文中所提到的数据会在文末提供百度云下载,所有数据都不会有加密,可以放心下载使用
2. 文中计算的结果与书中不同是由于数据使用的时间段不同

目录

1. 概率密度函数和累积分布函数

2. 二项分布在金融市场中的应用

3. 正态分布在金融市场的应用

4. 上证综指与深证综指的相关性关系分析 


 

1. 概率密度函数和累积分布函数

概率密度函数和累积分布函数都是用来刻画随机变量之不确定性的,描述的是总体的特征。我们可以从变量的样本观测值来推估其总体特征,包括其概率分布情况。

原始数据中没有收益率数据,要先计算收益率数据

import pandas as pd
import numpy as np
df_hs300 = pd.read_csv('index_hs300.csv',encoding='utf-8')
df_hs300.head()

df_hs300['tradeDate'] = pd.to_datetime(df_hs300['tradeDate'])
df_hs300.sort_values(by='tradeDate',ascending=True,inplace=True)
df_hs300['daily_returns'] = ((df_hs300['closeIndex']-df_hs300['closeIndex'].shift(1))/df_hs300['closeIndex'].shift(1))*100
df_hs300.head()

# 提取2014年的数据
df_2014 = df_hs300[(df_hs300['tradeDate']>='2014-01-01') & (df_hs300['tradeDate']<='2014-12-31')]
df_2014.head()

import matplotlib.pyplot as plt
from scipy import stats
density=stats.kde.gaussian_kde(df_2014.iloc[:,-1])
bins = np.arange(-5,5,0.02) # 设定分割区间
plt.figure(figsize=(20,10))
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

plt.subplot(211)
plt.plot(bins,density(bins))
plt.title('沪深300收益率序列的概率密度曲线图')
plt.subplot(212)
plt.plot(bins,density(bins).cumsum())
plt.title('沪深300收益率序列的累积分布函数图')

使用stats模块中的gaussian_kde()可以估计沪深300收益率序列的概率密度。

对于累积分布函数,使用cumsum()计算出沪深300收益率序列的累积分布

2. 二项分布在金融市场中的应用

# 估算2014年沪深300上涨的概率p
p = len(df_2014[df_2014['daily_returns']>0])/len(df_2014)
p
# out: 0.5306122448979592

# 估计10个交易日中,有6个交易日中上涨的概率
prob = stats.binom.pmf(6,10,p)
prob
# out: 0.22751494315662343
3. 正态分布在金融市场的应用

# 获取沪深300收益率序列的均值和方差
hs300_2014mean = df_2014['daily_returns'].mean()
hs300_2014mean
# out: 0.17742427435875363

hs300_2014var = df_2014['daily_returns'].var()
hs300_2014var
# out: 1.4712202841870292

# 查询累积密度值为0.05的分位数
stats.norm.ppf(0.05,hs300_2014mean,hs300_2014var**0.5)
# out: -1.817682341693284

4. 上证综指与深证综指的相关性关系分析 

原始数据是收盘价,需要先算日收益率

# 上证综指  000001
# 深证综指  399106
df_000001 = pd.read_csv('index_000001.csv',encoding='utf-8')
df_399106 = pd.read_csv('index_399106.csv',encoding='utf-8')

df_000001['tradeDate'] = pd.to_datetime(df_000001['tradeDate'])
df_399106['tradeDate'] = pd.to_datetime(df_399106['tradeDate'])

df_000001.sort_values(by='tradeDate',ascending=True,inplace=True)
df_399106.sort_values(by='tradeDate',ascending=True,inplace=True)

df_000001['daily_returns'] = (df_000001['closeIndex']-df_000001['closeIndex'].shift(1))/df_000001['closeIndex'].shift(1)
df_399106['daily_returns'] = (df_399106['closeIndex']-df_399106['closeIndex'].shift(1))/df_399106['closeIndex'].shift(1)

df_000001_2014 = df_000001[(df_000001['tradeDate']>='2014-01-01') & (df_000001['tradeDate']<='2014-12-31')]
df_399106_2014 = df_399106[(df_399106['tradeDate']>='2014-01-01') & (df_399106['tradeDate']<='2014-12-31')]

# 绘制上证综指与深证综指收益率的散点图
plt.scatter(df_000001_2014['daily_returns'],df_399106_2014['daily_returns'])
plt.title('上证综指与深证综指收益率的散点图')
plt.xlabel('上证综指收益率')
plt.ylabel('深证综指收益率')

# 计算上证综指与深证综指收益率的相关系数
df_000001_2014.rename(columns={'daily_returns':'returns_000001'},inplace=True)
df_399106_2014.rename(columns={'daily_returns':'returns_399106'},inplace=True)
two_df = pd.merge(df_000001_2014,df_399106_2014,how='inner',on='tradeDate')
two_df['returns_000001'].corr(two_df['returns_399106'])
# out: 0.7081399117953504

相关系数的结果与书本上的不同,由于本人没有书中自带的数据,无法确认不同的原因,猜测是用的数据时间长度不同。

PS:

链接:https://pan.baidu.com/s/18UF1sWDvlYvkzdq-iXvung 
提取码:jhac

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5720390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存