首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PortfolioAnalytics - factor_exposure_constraint中的错误:B的行数必须等于资产数

PortfolioAnalytics - factor_exposure_constraint中的错误:B的行数必须等于资产数
EN

Stack Overflow用户
提问于 2015-05-24 20:44:39
回答 1查看 174关注 0票数 1

我正在尝试复制Ross演示文稿中的示例,在这里可以找到http://www.rinfinance.com/agenda/2014/workshop/RossBennett.pdf

但是,在示例1中,我面临的问题是,函数factor_exposure_constraint总是将β矩阵计算为比投资组合中的资产少。该职能似乎评估了第4行中的资产数量:

代码语言:javascript
复制
nassets <- length(assets)

从我的观点来看,这是否计算了整个对象的长度,而不是列数(=资产数量)。因为betas是作为一个矩阵输入的,它有35行,不能等于资产对象的全部长度(app )。25550)。

我在这里错过了什么?

下面是我的代码(数据取自Ross的github页面,用于演示@ https://github.com/rossb34/PortfolioAnalyticsPresentation):

代码语言:javascript
复制
require(PortfolioAnalytics)
require(PerformanceAnalytics)
require(Ecdat)

#try(data(package = "PerformanceAnalytics"))
#try(data(package = "PortfolioAnalytics"))

source(paste(getwd(), "/_IncludeAlways.R", sep=""))

load(paste(dirData, "crsp_weekly.rda" , sep=""))

equity.data <- cbind(largecap_weekly[,1:15], 
                     midcap_weekly[,1:15], 
                     smallcap_weekly[,1:5])

market <- largecap_weekly[,21]
Rf <- largecap_weekly[,22]

chart.Boxplot(equity.data, sort.by="variance", colorset = "black", sort.ascending=TRUE)

portf.dn <- portfolio.spec(equity.data)

# Add constraint such that the portfolio weights sum to 0*
portf.dn <- add.constraint(portf.dn, type="weight_sum", 
                           min_sum=-0.01, max_sum=0.01)

# Add box constraint such that no asset can have a weight of greater than
# 20% or less than -20%
portf.dn <- add.constraint(portf.dn, type="box", min=-0.2, max=0.2)

# Add constraint such that we have at most 20 positions
portf.dn <- add.constraint(portf.dn, type="position_limit", max_pos=20)

# Add constraint such that the portfolio beta is between -0.25 and 0.25
betas <- t(CAPM.beta(equity.data, market, Rf))
portf.dn <- add.constraint(portf.dn, type="factor_exposure", B=betas, 
                           lower=-0.25, upper=0.25)

错误出现在最后一个命令中,正如函数factor_exposure_constraint中提到的那样。

一定是我错过了什么明显的事情,所以提前感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-24 22:33:09

似乎第一次看到它已经太晚了,但是portfolioAnalytics的cran文档在vingette @中声明。

vignette.pdf

在第2节下明确:

portfolio对象使用portfolio.spec函数实例化。portfolio.spec的主要参数是资产,这是必需的参数。资产参数可以是资产数量的标量值、基金名称的字符向量或初始权重的命名向量。

基于此,我的代码出现了问题,并应如下所示:

代码语言:javascript
复制
equity.data.names <- colnames(equity.data)
portf.dn <- portfolio.spec(equity.data.names)

换言之:

  1. 创建一个具有资产名称的向量
  2. 只向portfolio.spec提供名称向量

..。一切都很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30428161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档