我试图找到一个参数的值,其中参数小于此值的投资组合的所有成分总和达到整个投资组合的25%。
当然,使用R。
例如,我有一个市场指数的投资组合,该投资组合拥有100个成份股本证券。该投资组合的25%意味着总市值的25%。我想找到一个参数的值,让我们说P / E比率,所有P / E比率小于这个值的证券占该投资组合市场价值的25%。
我知道我可以使用'分位数'功能找到P / E比率的25%,
Bottom_Quartile <- data[(data$PE < quantile(data$PE,0.25),]
但该值不一定与市场价值的25%相对应,上述结果并未给出总市值=原始总市值的25%。
我想知道是否有一个函数可以帮助我们根据另一个参数的给定分位数(在这种情况下为25%市场价值)找到特定参数的值(在这种情况下是市盈率)。 / p>
先谢谢你的帮助!!!
好的,这是更新。 我已经尝试了一些方法来做到这一点,下面的一个工作正常,但是,它看起来非常低效。
#compute % market weight first
data$MarketValuePct <- data$MarketValue / sum(data$MarketValue)
#sort the result by descend order of P/E
sort_data <- data[order(data$PE),]
#calculate cumulative sum for percentage market value
sort_data$cumsum_MarketValuePct <- cumsum(sort_data$MarketValuePct)
#Locate the edge of bottom quartile
Bottom_quartile <- sort_data[sort_data$cumsum_MarketValuePct < 0.25, ]
#The bottom value of PE is what I was looking for
4th_Qartile_PE <- Bottom_quartile [nrow(Bottom_quartile),(col# of PE)]
我仍然在寻找一种更优雅,更准确的方法。如果您有任何想法,请帮忙。
谢谢!
答案 0 :(得分:1)
您不需要市场价值的分位数,而是总市值的25%。
您可以使用order
通过增加PE来对股票进行排序,并使用cumsum
进行计算
低于某个PE的股票总市值。
i <- order(PE)
tail( which( cumsum(MCap[i]) < .25 * sum(MCap) ), 1 )