实证资产定价(Empirical asset pricing)已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍,也可以通过Pypi直接查看。

Pypi: pip install --upgrade EAP

Github: GitHub - whyecofiliter/EAP: empirical asset pricing
实证资产定价中的许多变量都意图描述股票中的持续性特征。这些变量通常用历史数据估计,并且这些估计是股票特征的准确估计,这些特征会在未来继续延续下去。比如说股票的beta就是这么一个特征,它的估计使用历史数据中一段时间股票的收益率对市场组合的收益率回归得到的。

持续性分析的目的在于检验股票特征是否存在持续性,如果存在特征持续性并且是定价因子的话,那么对依据这个特征构建的投资组合将具有可以预测的收益率。另外,持续性分析可以被用来检验特征的代理变量是否可以很好地代表该特征。

持续性分析的计算过程分为两步, 第一步计算分时截面持续性系数(Periodic Cross-Sectional Persistence)。每个时段只股票,每只股票的特征, 那么分时截面持续性系数为时刻股票特征和时刻股票特征的皮尔森相关系数,计算公式如下

第二步将分时截面持续性系数按时间平均就得到了滞后时间段的持续性系数。计算公式如下

N是样本时刻数。

关于持续性系数的解释非常直接。更高的持续性系数意味着变量和变量背后的特征具有更高的时间持续性。有一些解释的细节需要陈述。

1. 低的持续性系数并不一定意味着特征不具有持续性,还可能是选择的变量无法很好地代表特征。

2. 高的持续性系数并不一定意味着特征具有持续性,还可能是选择变量虽然不能很好地代表特征,但是变量本身具有高持续性。

3. 高的持续性系数可能源于计算数据的方式。如果两期或者多期特征计算公式相同或有很大的重叠部分,那么就会得到高持续性系数。

除了检验特征是否具有持续性,持续性分析还可以帮助确定变量的最优滞后期数。确定最有滞后期数面临两难境地,需要在这两种情况中找到平衡(trade-off)。第一种情况是选择越多期的数据计算变量会使得变量的估计变得更加精准,第二种情况是滞后期越多的数据越南反映现在的特征。所以,在估计变量时并不是选择越多期的数据越好,而是要在这两种选择中找到均衡。持续性分析提供了一种方法,它的核心想法是在保证持续性的情况下,尽可能地选取更多期的数据。

举例:

有两个备选滞后期p1和p2(p2大于p1),由于持续性会衰减,所以正常情况下p1的持续性系数会大于p2的持续性系数,但是如果真实情况是p2的持续性系数大于p1的持续性系数,那么这说明选取p2是更好的选择,因为在增加了数据期数的同时持续性并没有因此衰减。如果出现的是正常情况,则说明增加的期数带来的好处不一定可以弥补持续性带来的损失,所以这时候增加期数是需要谨慎考虑的。

类的Demo如下

import numpy as np
import pandas as pd
from portfolio_analysis import Persistence as pste# generate time
year = np.ones((3000,1), dtype=int)*2020
id = np.linspace(1, 3000, 3000, dtype=int)
for i in range(19):year = np.append(year, (2019-i)*np.ones((3000,1), dtype=int))id = np.append(id, np.linspace(1, 3000, 3000, dtype=int))# generate character
character_1 = np.random.normal(0, 1, 20*3000)
character_2 = np.random.normal(0, 1, 20*3000)# generate future return
ret=character_1*-0.5 + character_2*0.5 + np.random.normal(0,1,20*3000)
# create sample containing future return, character, time
sample = np.array([id, year, ret, character_1, character_2]).T
sample = pd.DataFrame(sample, columns=['id', 'year', 'ret', 'character_1', 'character_2'])exper = pste(sample)
exper.fit(lags=[1, 2, 3])
exper.summary(periodic=True)
exper.summary()
=======================================================================================================================
+--------+----------+------------+-----------+----------+------------+-----------+----------+------------+-----------+
|  Time  | id_lag_1 | year_lag_1 | ret_lag_1 | id_lag_2 | year_lag_2 | ret_lag_2 | id_lag_3 | year_lag_3 | ret_lag_3 |
+--------+----------+------------+-----------+----------+------------+-----------+----------+------------+-----------+
| 2001.0 | -0.01191 |  -0.00334  |  0.02361  | -0.01781 |  0.00886   |  -0.02894 | -0.00263 |  -0.0131   |  -0.00058 |
| 2002.0 | -0.01199 |  -0.0176   |  -0.03603 | 0.00258  |  -0.01285  |  -0.00237 | -0.0294  |  0.00956   |  -0.00281 |
| 2003.0 | -0.01074 |  -0.03747  |  0.00879  | 0.00161  |  0.00559   |   -0.009  | 0.00415  |  0.00091   |  -0.01175 |
| 2004.0 | 0.01954  |  -0.01125  |  -0.00944 | 0.00546  |  0.00239   |  -0.02387 | -0.00457 |  -0.00225  |  -0.00341 |
| 2005.0 | -0.00924 |  -0.01317  |  0.01217  | -0.01098 |  -0.02188  |  0.01794  | -0.00123 |   0.0042   |  0.02049  |
| 2006.0 | -0.00811 |  0.02284   |  -0.00611 | 0.00417  |  0.01633   |  -0.00517 | -0.00661 |  -0.01671  |   0.0038  |
| 2007.0 | -0.02182 |  0.00383   |  0.03477  | -0.01294 |  -0.01041  |  -0.01589 | -0.02979 |  0.00703   |  -0.00808 |
| 2008.0 | -0.01375 |  -0.0061   |  -0.00717 |  0.0116  |  -0.00816  |  -0.02017 | 0.01595  |  -0.01796  |  0.01091  |
| 2009.0 |  0.0303  |  0.01339   |  -0.05158 |  0.0105  |  0.00794   |  0.01445  | -0.02718 |  -0.03998  |  0.00076  |
| 2010.0 | -0.00215 |  -0.0053   |  -0.03419 | -0.00931 |   0.0032   |  -0.01369 | -0.01174 |  0.00524   |  -0.00814 |
| 2011.0 | 0.03012  |  0.03217   |   0.0206  | 0.00162  |  -0.00661  |  -0.0418  | -0.01987 |  0.00034   |  -0.01522 |
| 2012.0 | 0.00614  |  0.02679   |  -0.00315 | -0.01214 |  -0.0222   |  -0.01302 | -0.02656 |  0.01336   |  0.00475  |
| 2013.0 | 0.01331  |  0.01011   |  -0.02019 | 0.01789  |  0.02888   |  0.01926  | -0.01949 |  0.01759   |  -0.0042  |
| 2014.0 | -0.02874 |  -0.00777  |  -0.00271 | 0.00561  |  0.01307   |  0.02344  | -0.01049 |  -0.00115  |  -0.00471 |
| 2015.0 | -0.01492 |  0.00798   |  -0.00376 | 0.00942  |  -0.00938  |  -0.01007 | 0.00626  |  0.00371   |  -0.00552 |
| 2016.0 | 0.00516  |  0.00175   |  0.01016  | 0.02137  |  -0.02389  |  0.00064  | 0.00778  |  -0.01682  |  0.00409  |
| 2017.0 | 0.00593  |  -0.01336  |  -0.00072 | -0.01063 |  0.00522   |  0.01871  | -0.00298 |  -0.01108  |  -0.04003 |
| 2018.0 | 0.02177  |  -0.00555  |  -0.0257  | -0.0033  |  -0.01959  |  -0.00221 |   nan    |    nan     |    nan    |
| 2019.0 | -0.01153 |  -0.01477  |  -0.0089  |   nan    |    nan     |    nan    |   nan    |    nan     |    nan    |
| 2020.0 |   nan    |    nan     |    nan    |   nan    |    nan     |    nan    |   nan    |    nan     |    nan    |
+--------+----------+------------+-----------+----------+------------+-----------+----------+------------+-----------+
+----------+----------+------------+-----------+----------+------------+-----------+----------+------------+-----------+
| Variable | id_lag_1 | year_lag_1 | ret_lag_1 | id_lag_2 | year_lag_2 | ret_lag_2 | id_lag_3 | year_lag_3 | ret_lag_3 |
+----------+----------+------------+-----------+----------+------------+-----------+----------+------------+-----------+
| Average  | -0.00066 |  -0.00089  |  -0.00524 | 0.00082  |  -0.00242  |  -0.0051  | -0.00932 |  -0.00336  |  -0.00351 |
+----------+----------+------------+-----------+----------+------------+-----------+----------+------------+-----------+

类的说明文档如下

class Persistence()

def __init__(self, sample):

This function makes initialization.

input :

sample (DataFrame): data for analysis. The structure of the sample:

The first column : sample indicator

The second column : timestamp

The higher order columns: the variables

def _shift(self, series, lag):

This private function shift the time series with lags.

input :

series (Series): The series need to be shifted with lags.

lag (int): The lag order.

def fit(self, lags):

This function calculate the persistence with lags.

input :

lags (list): the lags that need to be analyzed.

def summary(self, periodic=False, export=False):

This function prints the result summary and exports table. The Fisher coefficient and the Spearman coefficient are both calculated.

input :

periodic (boolean): whether prints periodic result. The DEFAULT setting is False.

export (boolean): whether export the summary table. The DEFAULT setting is False.

output :

df (DataFrame): If export is True, then output the summary table.

更新:持续性分析(EAP.portfolio_analysis.Persistence)相关推荐

  1. 盈利因子(Profitability factor)——投资组合分析(EAP.portfolio_analysis)

    本文根据Bail et al.的著作Empirical Asset Pricing编写相关程序,投资组合分析的模块是EAP.portfolio_analysis.本文的Package已发布于Githu ...

  2. 投资组合分析:EAP.portfolio_analysis

    投资组合分析是实证资产定价中最常用的工具之一.它的主要用途是研究因子对资产价格的影响,主要方法是通过构建投资组合(portfolios)和投资组合差分(differenced portfolios), ...

  3. 偏度因子(skewness)——投资组合分析(EAP.portfolio_analysis)

    实证资产定价(Empirical asset pricing)已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍,也可以通过Pypi直接查看 ...

  4. 市场因子(Market Factor)——投资组合分析(EAP.portfolio_analysis)

    实证资产定价(Empirical asset pricing)已经发布于Github. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍. Github: GitHub - ...

  5. [置顶] 【稀饭】react native 实战系列教程之热更新原理分析与实现

    很多人在技术选型的时候,会选择RN是因为它具有热更新,而且这是它的一个特性,所以实现起来会相对比较简单,不像原生那样,原生的热更新是一个大工程.那就目前来看,RN的热更新方案已有的,有微软的CodeP ...

  6. react native 实战系列教程之热更新原理分析与实现

    很多人在技术选型的时候,会选择RN是因为它具有热更新,而且这是它的一个特性,所以实现起来会相对比较简单,不像原生那样,原生的热更新是一个大工程.那就目前来看,RN的热更新方案已有的,有微软的CodeP ...

  7. 投资因子(Investment factor)——投资组合分析(EAP.portfolio_analysis)

    实证资产定价(Empirical asset pricing)已经发布于Github. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍. Github: GitHub - ...

  8. 动量因子(Momentum factor)——投资组合分析(EAP.portfolio_analysis)

    实证资产定价(Empirical asset pricing)已经发布于Github. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍. Github: GitHub - ...

  9. 波动率因子(Volatility factor)——投资组合分析(EAP.portfolio_analysis)

    实证资产定价(Empirical asset pricing)已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍,也可以通过Pypi直接查看 ...

最新文章

  1. Spring Boot整合Spring Data JPA操作数据
  2. centos下yum安装nginx
  3. Linux后台运行打包Jar的方法
  4. android中访问手机存储空间,android – 访问手机内部存储以推入SQLite数据库文件...
  5. vue2.0 element-ui中的el-select选择器无法显示选中的内容
  6. 卡布教你:脸上长痘痘平时要注意什么呢
  7. c#中dateTimePicker怎么获取当前的日期
  8. 解决IDEA中Maven加载依赖包慢的问题
  9. [原创]Linux实现服务延迟启动
  10. 伺服电机的调试步骤有哪些
  11. 遗传算法python
  12. Linux操作系统思维导图
  13. c++ primer 5学习小结
  14. 计算机并口被禁用,电脑并口被禁用怎么办
  15. python 运动模拟_Python中的几何布朗运动模拟
  16. 【文件包含漏洞-03】文件包含漏洞的利用及如何利用本地文件包含漏洞GetShell
  17. 微信的支付(二维码,APP)
  18. 大数据和java就业前景_Java大数据应用领域及就业方向
  19. Servlet | ServletConfig接口、ServletContext接口详解
  20. 广度/宽度优先搜索(BFS)详解

热门文章

  1. 知识巩固源码落实之6:c语言拼接字符串与切割字符串(strsep)代码
  2. 元宇宙产业委叶毓睿:狂欢过后,万众期待的元宇宙怎么样了?
  3. 19款Java开源Web爬虫
  4. 数据图像处理——期末复习题库
  5. “战疫杯”大学生程序设计在线邀请赛(6)题解
  6. 米联客 ZYNQ/SOC 精品教程 S02-CH20 利用EMIF进行PS与PL间数据交互
  7. Android X5WebView网络监听替换WebView失败页面稳定
  8. 正则匹配的中文包括中文标点符号
  9. Element 表单检验不通过解决思路
  10. strtok() and strtod()