我对R很陌生,需要您的帮助!
我正在尝试使用R中的CRSP数据构建动量策略。在我的代码中,我创建了一个xts
矩阵,该矩阵包含基于资产每月回报的排名。我的下一步是,如果排名高于N,则将所有排名替换为NA
。这样,我就可以制定一种动量策略,对N个表现最佳的股票进行投资。
但是,我的问题是我想投资样本中10%的最佳股票。由于行的长度每个月都在变化,因此无法应用N = ncol(x)/10
。我当时正在考虑应用一个rollapply
函数,该函数计算该行的最佳n:((ncol(x)-rowSums(is.na(x))/10)
,并用NA
替换与该值有关的所有值,但是我做的每种方法都做到了不能正常工作,我绝对不知道我的方法是否正确。您能帮我使用该功能吗?
我将添加我的代码以阐明我的观点。我还对短向量应用了相同的策略,在该向量中,排名被颠倒了,其余值被替换为-1。我很高兴能改善我的策略:)
ranking <- as.xts(t(apply(-monthly.returns12, 1, rank, na.last = "keep")))
lag.ranking <- lag(ranking, k = 1, na.pad = TRUE)
lag.ranking <- as.matrix(lag.ranking)
lag.ranking[lag.ranking > n] <- NA
lag.ranking[lag.ranking <= n] <- 1
long <- as.matrix(monthly.returns) * lag.ranking
vec.long.ret <- rowMeans(long, na.rm = TRUE)
vec.long.ret <- xts(x = vec.long.ret, order.by = index(monthly.returns))