IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python量化分析】菜鸟学量化之用 Python 分析资产收益的典型化事实 -> 正文阅读

[Python知识库]【Python量化分析】菜鸟学量化之用 Python 分析资产收益的典型化事实

什么是典型化事实?

Wiki上对于stylized fact是这么定义的:
In social sciences, especially economics, a stylized fact is a simplified presentation of an empirical finding. A stylized fact is often a broad generalization that summarizes some complicated statistical calculations, which although essentially true may have inaccuracies in the detail.

首先,典型化事实是在实际数据中发现的一些现象。然而简单的从一些数据中得到的“结论”并不能就称之为“典型化事实”,一个典型化的事实应该是怎数据中比较稳健的,虽然在某些特例中,这些典型化事实并非总是成立。

为什么需要典型化事实?因为这些是经济学理论需要解释的现象,同时这些事实可以反过来检验经济学的理论是否能解释这个领域的现象。

典型化事实在这里有两方面的作用:指出了之前理论的缺陷;为新的理论指明了方向

那么 为什么“典型化事实”可能不是“事实”,有两个方面的原因。首先,“典型化事实”通常只是一个统计上的描述,远非事实本身

举一个是wiki上的例子:A prominent example of a stylized fact is: "Education significantly raises lifetime income."教育提升了生命周期的收入。如果只看这句话,多数人会有一个印象,也就是“接受教育提高了收入”,这似乎是一个因果关系。然而这个因果关系成立么?典型化的事实并不能告诉我们这个答案。

经典的劳动经济学通常会告诉你,一个人接受教育可能是因为他的能力比较高,而能力高的人可能就算不接受更高程度的教育也可以达到同样的收入。是不是接受更高程度的教育,比如是否读博,本身就是一个根据自身能力选择的结果,从“反事实”的角度来讲,以上的“事实”并不严格构成因果关系。我想如果我当时没有选择读博,而是直接工作,薪水待遇会比我读博毕业之后更高吧。

总结下来,“典型化事实”在经济学中非常重要,无论是宏观经济学还是贸易、金融还是产业经济学,在理论的发展中都扮演着非常重要的角色,因而如果能发现一些“典型化事实”,对经济学的理论研究和之后的实证研究是非常重要的。然而,作为非科研人员,则要警惕过度解读“典型化事实”。基于以上的两点原因,即使有了这些“典型化事实”,我们仍然需要理论和逻辑进行判断。

典型化事实(Stylized Facts)是出现在许多资产回报(跨时间和市场)中的统计属性。了解它们很重要,因为当我们构建代表资产价格动态的模型时,模型必须能够捕获这些属性。

分析案例

我们使用从 1985 年到 2018 年标普 500 指数的每日回报收益来分析五个典型化事实。从雅虎财经下载标准普尔 500 指数价格并计算收益。使用以下代码导入所有需要的库:

import pandas as pd 
import numpy as np
import yfinance as yf
import seaborn as sns 
import scipy.stats as scs
import statsmodels.api as sm
import statsmodels.tsa.api as smt
import matplotlib.pyplot as plt

本文中,我们将用 Python去发现标准普尔 500 指数系列中的五个典型化事实。
标准普尔500指数系列

1. 资产收益的非高斯分布

执行以下代码,绘制收益直方图和Q-Q图来发现第一个事实的存在。

1.1 使用观察到的收益的均值和标准差计算正态概率密度函数(PDF):

正态概率密度函数

1.2 绘制直方图和Q-Q图

fig, ax = plt.subplots(1, 2, figsize=(16, 8))

# histogram
sns.distplot(df.log_rtn, kde=False, norm_hist=True, ax=ax[0])                                         
ax[0].set_title('Distribution of S&P 500 returns', fontsize=16)                                                    
ax[0].plot(r_range, norm_pdf, 'g', lw=2, 
           label=f'N({mu:.2f}, {sigma**2:.4f})')
ax[0].legend(loc='upper left');

# Q-Q plot
qq = sm.qqplot(df.log_rtn.values, line='s', ax=ax[1])
ax[1].set_title('Q-Q plot', fontsize = 16)

# plt.tight_layout()
# plt.savefig('images/ch1_im10.png')
plt.show()

执行上面的代码产生如下直方图和Q-Q图:
直方图和QQ图
我们可以使用直方图(显示分布的形状)和 Q-Q 图来评估收益的正态性。

2. 波动集聚性

运行以下代码,通过绘制收益序列来发现第二个典型化事实。

2.1 可视化收益序列:

可视化收益序列
可以观察到明显的波动集聚性——波动较大的正收益和负收益时期。

3. 收益不存在自相关性

继续去发现第三个典型化事实。

3.1 定义用于创建自相关图的参数

N_LAGS = 50
SIGNIFICANCE_LEVEL = 0.05

3.2 运行以下代码以创建收益的自相关函数(ACF)图:

自相关函数(ACF)图
只有少数值位于置信区间之外并且可以被认为具有统计显著性。我们可以假设已经验证了收益序列中没有自相关性。

4. 平方/绝对收益的自相关性小且递减

通过创建平方和绝对收益的 ACF 图来研究第四个典型化事实。

4.1 创建ACF图

ACF图
可以观察到平方回报和绝对回报的自相关值很小且不断减小,这与第四种典型化事实一致。

5. 杠杆效应

运行以下步骤来调查杠杆效应的存在。

5.1 将波动性度量计算为滚动标准偏差:

df['moving_std_252'] = df[['log_rtn']].rolling(window=252).std()
df['moving_std_21'] = df[['log_rtn']].rolling(window=21).std()

5.2 绘制所有系列以进行比较

fig, ax = plt.subplots(3, 1, figsize=(18, 15), sharex=True)

df.adj_close.plot(ax=ax[0])
ax[0].set(title='S&P 500 time series', ylabel='Price ($)')

df.log_rtn.plot(ax=ax[1])
ax[1].set(ylabel='Log returns (%)')

df.moving_std_252.plot(ax=ax[2], color='r', label='Moving Volatility 252d')
df.moving_std_21.plot(ax=ax[2], color='g', label='Moving Volatility 21d')
ax[2].set(ylabel='Moving Volatility', xlabel='Date')
ax[2].legend()

现在可以通过将价格序列与(滚动)波动率指标进行可视化比较来研究杠杆效应:
杠杆效应

这一事实表明,资产波动性的大多数衡量标准与其回报呈负相关,我们确实可以观察到价格下跌时波动性增加而价格上涨时波动性减少的模式。

Jarque-Bera test

1. Jarque-Bera 检验数学公式:

The Jarque-Bera test is a goodness-of-fit test that determines whether or not sample data have skewness and kurtosis that matches a normal distribution.

意思是说,Jarque-Bera检验的目的是通过偏度(skewness)和峰度来检验样本是否来自正态分布,正态分布的偏度为0,峰度为3。

当样本服从正态分布时,JB统计量为:
J B = n ( S 2 6 + ( K ? 3 ) 2 24 ) JB = n(\frac{S^2}{6}+\frac{(K-3)^2}{24}) JB=n(6S2?+24(K?3)2?)
渐近服从 χ 2 ( 2 ) \chi ^2(2) χ2(2)。其中n为样本规模,S、K分别为随机变量的偏度和峰度,计算公式如下:
M 2 = ∑ i ( x i ? x ˉ ) 2 n M2=\frac{\sum_{i}^{}(x_i-\bar{x})^2}{n} M2=ni?(xi??xˉ)2?
S = ∑ i ( x i ? x ˉ ) 3 n M 2 1.5 S=\frac{\frac{\sum_{i}^{}(x_i-\bar{x})^3}{n}}{M2^{1.5}} S=M21.5ni?(xi??xˉ)3??
K = ∑ i ( x i ? x ˉ ) 4 n M 2 2 K=\frac{\frac{\sum_{i}^{}(x_i-\bar{x})^4}{n}}{M2^2} K=M22ni?(xi??xˉ)4??

python的sicipy.stats中偏度和峰度的调用的函数为stats.skew(y)stats.kurtosis(y),其中峰度的公式为:
K = ∑ i ( x i ? x ˉ ) 4 n M 2 2 ? 3 K=\frac{\frac{\sum_{i}^{}(x_i-\bar{x})^4}{n}}{M2^2}-3 K=M22ni?(xi??xˉ)4???3

2. Jarque-Bera 检验代码

JB Test Python

3.什么时候使用 Jarque-Bera 测试

Jarque-Bera 检验通常用于其他正态性检验(如 Shapiro-Wilk 检验)不可靠的大型数据集(n > 2000)。

这是在执行一些假设数据集服从正态分布的分析之前使用的适当测试。 Jarque-Bera 检验可以告诉您是否满足此假设。

参考资料

[1] https://www.zhihu.com/question/31699378 慧航
[2] https://www.statology.org/jarque-bera-test-python/

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:48:38  更:2021-10-01 16:48:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 5:07:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计