偏度因子(skewness)——投资组合分析(EAP.portfolio_analysis)
实证资产定价(Empirical asset pricing)已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍,也可以通过Pypi直接查看。
Pypi: pip install --upgrade EAP
Github: GitHub - whyecofiliter/EAP: empirical asset pricing
在Markowitz(1952)的均值-方差范式中,投资者在形成投资组合时只考虑均值和方差,并由此范式发展了CAPM。Arditi(1967,1971)提出了收益率的第三个矩——偏态,他表明,投资者对收益率分布呈负偏态的投资要求更高的回报率。Scott和Horvath(1980)将分析扩展到其他更高阶矩的预期回报。
Harvey and Siddique(2000)将系统偏态引入证券定价,由此将总偏态分为系统偏态(又称共偏态)和特质偏态。文献通常认为,共偏态与股票的未来收益率呈负相关,并且特质偏态是被分散的,这受到了一些文献的质疑(Kane,1982;Baberis and Huang,2008)。
总偏度定义为
共偏度定义为(Harvey and Siddique, 2000)
特异性偏度为
公式中的残差由下式计算
计算期为12个月。在这个演示中,数据集从2000年1月开始,从CSMAR数据集中收集。警告:请勿将此演示中的数据集用于任何商业目的。
# %% set system path
import sys,ossys.path.append(os.path.abspath(".."))# %% import data
import pandas as pdmonth_return = pd.read_hdf('.\\data\\month_return.h5', key='month_return')
company_data = pd.read_hdf('.\\data\\last_filter_pe.h5', key='data')
trade_data = pd.read_hdf('.\\data\\mean_filter_trade.h5', key='data')
beta = pd.read_hdf('.\\data\\beta.h5', key='data')
risk_premium = pd.read_hdf('.\\data\\risk_premium.h5', key='data')
数据预处理
# %% data preprocessing
# forward the monthly return for each stock
# emrwd is the return including dividend
month_return['emrwd'] = month_return.groupby(['Stkcd'])['Mretwd'].shift(-1)
# emrnd is the return including no dividend
month_return['emrnd'] = month_return.groupby(['Stkcd'])['Mretnd'].shift(-1)
# select the A share stock
month_return = month_return[month_return['Markettype'].isin([1, 4, 16])]# % distinguish the stocks whose size is among the up 30% stocks in each month
def percentile(stocks) :return stocks >= stocks.quantile(q=.3)month_return['cap'] = month_return.groupby(['Trdmnt'])['Msmvttl'].apply(percentile)# merge data
data = month_return[['Stkcd', 'Trdmnt', 'Mretwd']]
data['Date_merge'] = pd.to_datetime(data['Trdmnt'])
risk_premium['Date_merge'] = risk_premium.index
data = pd.merge(data, risk_premium[['MKT', 'SMB', 'HML', 'Date_merge']], on=['Date_merge']).dropna()
构建代理变量
# %% construct proxy variable
import numpy as np
import statsmodels.api as sm
from scipy.stats import skewskewness = pd.Series(index=data.index, dtype=float, name='skewness')
coskewness = pd.Series(index=data.index, dtype=float, name='coskewness')
idioskewness = pd.Series(index=data.index, dtype=float, name='idioskewness')
for i in data.groupby('Stkcd'):row, col = np.shape(i[1])for j in range(row-12):skewness.loc[i[1].index[j+11]] = skew(i[1].iloc[j:j+12, 2])endog = np.array([i[1].iloc[j:j+12, 4], i[1].iloc[j:j+12, 4]**2]).Tmodel_coskew = sm.OLS(i[1].iloc[j:j+12, 2], sm.add_constant(endog)).fit()coskewness.loc[i[1].index[j+11]] = model_coskew.params[2]model_idioskew = sm.OLS(i[1].iloc[j:j+12, 2], sm.add_constant(i[1].iloc[j:j+12, 4:7])).fit()idioskewness.loc[i[1].index[j+11]] = skew(model_idioskew.resid)return_company = pd.concat([data, skewness, coskewness, idioskewness, month_return[['cap', 'Msmvttl', 'Ndaytrd', 'emrwd']]], axis=1)
总偏度。数据集#1的结果与文献不一致,在单变量分析中,尽管由于绝对t值大于2.3,差异收益显著,但收益序列的顺序不一致。
在双变量分析中,由于绝对t值小于2.3,差异收益率不显著,这表明总偏度因子不提供超额收益。
# %% construct test_data for bivariate analysis
# dataset 1
from portfolio_analysis import Bivariate, Univariate
import numpy as np# select stocks whose size is among the up 30% stocks in each month and whose trading
# days are more than or equal to 10 days
test_data_1 = return_company[(return_company['cap']==True) & (return_company['Ndaytrd']>=10)]
test_data_1 = test_data_1[['emrwd', 'Msmvttl', 'skewness', 'Date_merge']].dropna()
test_data_1 = test_data_1[(test_data_1['Date_merge'] >= '2000-01-01') & (test_data_1['Date_merge'] <= '2019-12-01')]# Univariate analysis
uni_1 = Univariate(np.array(test_data_1[['emrwd', 'skewness', 'Date_merge']]), number=9)
uni_1.summary_and_test()
uni_1.print_summary_by_time()
uni_1.print_summary()=====================================================================
+---------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| Group | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Diff |
+---------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| Average | 0.008 | 0.008 | 0.007 | 0.009 | 0.007 | 0.009 | 0.009 | 0.009 | 0.008 | 0.011 | 0.003 |
| T-Test | 8.576 | 8.419 | 7.786 | 9.093 | 7.652 | 9.199 | 9.362 | 8.877 | 8.584 | 10.6 | 2.362 |
+---------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+# Bivariate analysis
bi_1 = Bivariate(np.array(test_data_1), number=4)
bi_1.average_by_time()
bi_1.summary_and_test()
bi_1.print_summary_by_time()
bi_1.print_summary()
=====================================================================
+-------+---------+---------+---------+---------+---------+--------+
| Group | 1 | 2 | 3 | 4 | 5 | Diff |
+-------+---------+---------+---------+---------+---------+--------+
| 1 | 0.024 | 0.022 | 0.021 | 0.023 | 0.025 | 0.001 |
| | 14.565 | 13.84 | 13.484 | 14.584 | 14.149 | 0.323 |
| 2 | 0.008 | 0.013 | 0.01 | 0.012 | 0.012 | 0.004 |
| | 5.627 | 9.234 | 6.737 | 8.375 | 7.731 | 1.911 |
| 3 | 0.007 | 0.006 | 0.007 | 0.009 | 0.008 | 0.0 |
| | 4.488 | 4.209 | 4.475 | 6.156 | 5.395 | 0.111 |
| 4 | 0.004 | 0.006 | 0.006 | 0.004 | 0.006 | 0.001 |
| | 2.697 | 3.714 | 3.905 | 2.497 | 3.58 | 0.535 |
| 5 | -0.003 | -0.004 | -0.003 | -0.003 | -0.002 | 0.0 |
| | -1.843 | -2.713 | -1.823 | -2.029 | -1.567 | 0.228 |
| Diff | -0.027 | -0.026 | -0.024 | -0.026 | -0.027 | -0.0 |
| | -11.849 | -11.725 | -10.724 | -11.715 | -12.268 | -0.094 |
+-------+---------+---------+---------+---------+---------+--------+
共偏度。数据集#2的结果与文献不一致,在单变量分析中,尽管由于绝对t值大于2.3,差异收益显著,但收益序列的顺序不一致。
在双变量分析中,由于绝对t值小于2.3,差异收益率不显著,这表明共偏态因子不提供超额收益。
# %% construct test_data for bivariate analysis
# dataset 2
from portfolio_analysis import Bivariate, Univariate
import numpy as np# select stocks whose size is among the up 30% stocks in each month and whose trading
# days are more than or equal to 10 days
test_data_2 = return_company[(return_company['cap']==True) & (return_company['Ndaytrd']>=10)]
test_data_2 = test_data_2[['emrwd', 'Msmvttl', 'coskewness', 'Date_merge']].dropna()
test_data_2 = test_data_2[(test_data_2['Date_merge'] >= '2000-01-01') & (test_data_2['Date_merge'] <= '2019-12-01')]# Univariate analysis
uni_2 = Univariate(np.array(test_data_2[['emrwd', 'coskewness', 'Date_merge']]), number=9)
uni_2.summary_and_test()
uni_2.print_summary_by_time()
uni_2.print_summary()=====================================================================
+---------+-------+-------+-------+-------+-------+-------+-------+-------+--------+-------+-------+
| Group | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Diff |
+---------+-------+-------+-------+-------+-------+-------+-------+-------+--------+-------+-------+
| Average | 0.008 | 0.009 | 0.007 | 0.01 | 0.007 | 0.009 | 0.009 | 0.008 | 0.009 | 0.011 | 0.003 |
| T-Test | 8.241 | 9.001 | 7.365 | 9.666 | 7.632 | 9.234 | 9.014 | 8.691 | 10.114 | 11.73 | 2.595 |
+---------+-------+-------+-------+-------+-------+-------+-------+-------+--------+-------+-------+# Bivariate analysis
bi_2 = Bivariate(np.array(test_data_2), number=4)
bi_2.average_by_time()
bi_2.summary_and_test()
bi_2.print_summary_by_time()
bi_2.print_summary()
=====================================================================
+-------+---------+---------+--------+--------+---------+--------+
| Group | 1 | 2 | 3 | 4 | 5 | Diff |
+-------+---------+---------+--------+--------+---------+--------+
| 1 | 0.022 | 0.022 | 0.023 | 0.022 | 0.025 | 0.003 |
| | 14.748 | 13.599 | 15.127 | 13.191 | 13.98 | 1.465 |
| 2 | 0.009 | 0.012 | 0.009 | 0.011 | 0.013 | 0.004 |
| | 6.551 | 8.696 | 5.983 | 7.881 | 9.526 | 1.958 |
| 3 | 0.007 | 0.008 | 0.007 | 0.008 | 0.006 | -0.001 |
| | 4.559 | 4.966 | 4.612 | 5.373 | 4.528 | -0.26 |
| 4 | 0.006 | 0.005 | 0.004 | 0.005 | 0.006 | 0.0 |
| | 3.778 | 2.985 | 2.629 | 3.513 | 3.853 | 0.02 |
| 5 | -0.002 | -0.004 | -0.002 | -0.004 | -0.002 | 0.0 |
| | -1.129 | -2.603 | -1.222 | -2.493 | -1.143 | 0.011 |
| Diff | -0.024 | -0.026 | -0.025 | -0.026 | -0.027 | -0.003 |
| | -11.291 | -11.861 | -11.57 | -11.34 | -11.015 | -1.08 |
+-------+---------+---------+--------+--------+---------+--------+
特质性偏度。数据集#3的结果与文献一致,即在单变量分析中,由于绝对t值小于2.3,差异收益不显著。
在双变量分析中,由于绝对t值小于2.3,差异收益率不显著,这表明特质偏度因子不提供超额收益。
# %% construct test_data for bivariate analysis
# dataset 3
from portfolio_analysis import Bivariate, Univariate
import numpy as np# select stocks whose size is among the up 30% stocks in each month and whose trading
# days are more than or equal to 10 days
test_data_3 = return_company[(return_company['cap']==True) & (return_company['Ndaytrd']>=10)]
test_data_3 = test_data_3[['emrwd', 'Msmvttl', 'idioskewness', 'Date_merge']].dropna()
test_data_3 = test_data_3[(test_data_3['Date_merge'] >= '2000-01-01') & (test_data_3['Date_merge'] <= '2019-12-01')]# Univariate analysis
uni_3 = Univariate(np.array(test_data_3[['emrwd', 'idioskewness', 'Date_merge']]), number=9)
uni_3.summary_and_test()
uni_3.print_summary_by_time()
uni_3.print_summary()
=====================================================================
+---------+--------+-------+-------+-------+-------+--------+-------+-------+-------+-------+-------+
| Group | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Diff |
+---------+--------+-------+-------+-------+-------+--------+-------+-------+-------+-------+-------+
| Average | 0.01 | 0.008 | 0.008 | 0.009 | 0.009 | 0.011 | 0.006 | 0.009 | 0.008 | 0.01 | 0.001 |
| T-Test | 10.385 | 7.249 | 8.548 | 9.025 | 8.954 | 11.601 | 6.609 | 9.145 | 7.674 | 9.964 | 0.43 |
+---------+--------+-------+-------+-------+-------+--------+-------+-------+-------+-------+-------+# Bivariate analysis
bi_3 = Bivariate(np.array(test_data_3), number=4)
bi_3.average_by_time()
bi_3.summary_and_test()
bi_3.print_summary_by_time()
bi_3.print_summary()
=====================================================================
+-------+---------+---------+---------+---------+---------+--------+
| Group | 1 | 2 | 3 | 4 | 5 | Diff |
+-------+---------+---------+---------+---------+---------+--------+
| 1 | 0.023 | 0.021 | 0.026 | 0.02 | 0.026 | 0.003 |
| | 12.798 | 13.936 | 15.498 | 13.077 | 13.947 | 1.32 |
| 2 | 0.012 | 0.011 | 0.012 | 0.01 | 0.01 | -0.002 |
| | 7.916 | 7.402 | 8.251 | 7.194 | 6.609 | -1.04 |
| 3 | 0.008 | 0.009 | 0.008 | 0.004 | 0.008 | -0.0 |
| | 5.345 | 6.356 | 4.972 | 2.965 | 5.339 | -0.032 |
| 4 | 0.005 | 0.003 | 0.006 | 0.007 | 0.005 | 0.0 |
| | 3.067 | 2.279 | 3.414 | 4.156 | 3.488 | 0.205 |
| 5 | -0.003 | -0.002 | -0.002 | -0.003 | -0.003 | -0.0 |
| | -2.029 | -1.535 | -1.256 | -1.865 | -2.183 | -0.138 |
| Diff | -0.026 | -0.023 | -0.028 | -0.023 | -0.029 | -0.003 |
| | -10.992 | -10.301 | -12.114 | -10.841 | -12.072 | -1.123 |
+-------+---------+---------+---------+---------+---------+--------+
偏度因子(skewness)——投资组合分析(EAP.portfolio_analysis)相关推荐
- 市场因子(Market Factor)——投资组合分析(EAP.portfolio_analysis)
实证资产定价(Empirical asset pricing)已经发布于Github. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍. Github: GitHub - ...
- 投资组合的风险因子调整——投资组合分析(EAP.portfolio_analysis)
实证资产定价(Empirical asset pricing)已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍,也可以通过Pypi直接查看 ...
- 投资组合分析:portfolio_analysis.Tangenvy_portfolio(切点组合)
实证资产定价(Empirical asset pricing)已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍,也可以通过Pypi直接查看 ...
- 盈利因子(Profitability factor)——投资组合分析(EAP.portfolio_analysis)
本文根据Bail et al.的著作Empirical Asset Pricing编写相关程序,投资组合分析的模块是EAP.portfolio_analysis.本文的Package已发布于Githu ...
- 投资组合分析:EAP.portfolio_analysis
投资组合分析是实证资产定价中最常用的工具之一.它的主要用途是研究因子对资产价格的影响,主要方法是通过构建投资组合(portfolios)和投资组合差分(differenced portfolios), ...
- R语言使用moments包计算偏度(Skewness)和峰度(Kurtosis)实战:计算偏度(Skewness)和峰度(Kurtosis)、确定样本数据是否具有与正态分布匹配的偏度和峰度(假设检验)
R语言使用moments包计算偏度(Skewness)和峰度(Kurtosis)实战:计算偏度(Skewness)和峰度(Kurtosis).确定样本数据是否具有与正态分布匹配的偏度和峰度(假设检验) ...
- 使用Python进行交易策略和投资组合分析
我们将在本文中衡量交易策略的表现.并将开发一个简单的动量交易策略,它将使用四种资产类别:债券.股票和房地产.这些资产类别的相关性很低,这使得它们成为了极佳的风险平衡选择. 动量交易策略 这个策略是基于 ...
- 投资组合风险收益率公式_投资组合分析的基础收益和亏损
投资组合风险收益率公式 In this story, we are going to do some basic portfolio returns analysis in python. 在这个故事 ...
- 有效前沿和最优投资组合matlab,matlab 实验名称:投资组合分析
实验性质:综合性和研究探索性
实 联合开发网 - pudn.com...
matlab 所属分类:matlab例程 开发工具:matlab 文件大小:5918KB 下载次数:30 上传日期:2017-12-27 13:31:24 上 传 者:waffle 说明: 实验名称 ...
最新文章
- Pycharm 和 vscode 多光标、折叠代码和代码格式化快捷键
- 真的有人在偷听我们讲话么?
- activity 启动模式_Android世界:Activity的启动模式及其适用范围
- SAP S/4HANA Service Management和SAP FSM基于CPI的集成场景介绍
- 直博清华!陕西女学霸:从农村走出,3次斩获国奖,还被央视采访
- oracle 并行用索引,分区索引并行导致的性能问题
- spring事务到底用于service层还是dao层
- Eclipse中Java Web开发插件安装
- 空格、句读、标点:从近代报刊到现代汉字标点符号萌芽与发展的考据
- 不是复制硅谷,而是与硅谷建立人脉
- Golang 基础:原生并发 goroutine channel 和 select 常见使用场景
- 79元限抢Jeep专柜「冰丝速干裤」!穿上它让你“胯下生风”,比裸奔还爽!
- PointNet 翻译:
- 生成微信支付二维码及微信支付
- ubuntu下实现和windows共享文档
- 如何更改 think-cell 图表的默认颜色?使用教程
- 2的N次方是多少位数
- 免费 内网穿透工具 实测好用
- python bottle使用实例
- python爬虫解决频繁访问_爬虫遇到IP访问频率限制的解决方案
热门文章
- [病毒木马] 利用 Windows 任务计划程序
- 一份触目惊心的性犯罪方案
- 根据格林公式判断多边形顺时针和逆时针
- 格林公式的原理理解(考研数学)
- 接了很多私活之后的感触
- arcgis js 完整悬停效果实现
- scrollLeft
- 计算机软件模型改进,基于改进Kano模型的服务优化研究_樊根耀.docx 计算机软件及应用...
- Unicode编码问题 如:\u529e\u7406\u9996\u6c7d\u52a0\u6cb9
- Mule封装DB以及Mule Rest接口开发