r - R for 循环以获得最佳投资组合权重(使用 glasso 估计)
问题描述
library(glasso)
library("readxl")
library(tidyverse)
data1 <- read_xlsx("Dataset1")
dataframe1 <- as.data.frame(data1)
df1 <- subset(dataframe1, select = -c(1) )
df1 = as.data.frame(sapply(df1,as.numeric))
wts_matrix <- matrix(NA, nrow=330, ncol=100)
for(i in 1:330) {
returndata1 <- df1[(120 + i:239 + i),]
samplecov <- cov(returndata1)
glassoresult <- glasso(s = samplecov, rho=1.7)
ones <- replicate(100,1)
firstpartwts_gmv <- 1/(t(ones)%*%glassoresult$wi%*%ones)
firstpartwts_gmv <- as.numeric(firstpartwts_gmv)
lastpartwts_gmv <- glassoresult$wi%*%ones
lastpartwts_gmv <- as.numeric(lastpartwts_gmv)
wts_gmv <- firstpartwts_gmv*lastpartwts_gmv
wts_gmv <- as.vector(wts_gmv)
wts_matrix[i,] <- wts_gmv
}
亲爱的用户,
对于一个研究项目,我需要获得全局最小方差 (gmv) 投资组合的最佳权重,其中逆协方差矩阵是使用 glasso 包估计的。要估计逆 cov 矩阵的 glasso 估计量,我首先需要使用 T = 120 月收益来获得样本协方差矩阵。然后将此样本协方差矩阵用作 glasso 函数中的参数,如我的代码 (s=samplecov) 中所示。rho 是一个正则化参数。整个想法是使用 120 个月的回报,直到 T = t,获得一个 glasso 估计量,并在 gmv 公式中使用这个估计量来获得 T = t+1 的权重。测试期总共包括 330 个期。df1 包含所有返回值,所需的第一个返回值是从第 121 行到第 240 行。所以我尝试创建一个 for 循环,其中 i 从 1 到 330,
第一个错误是我的 wts_matrix 只填充到第 220 行(应该到 330)。我也有一个错误:glasso 中的错误(s = samplecov,rho = 1.7):外部函数调用中的 NA/NaN/Inf(参数 2)。
第二个错误是权重本身。如果我不使用 for 循环并且只计算第一个时期 t+1 的权重,就像在底层代码中一样,那么权重似乎是准确的。但是如果我使用for循环和权重矩阵,第一行权重已经不一样了。
firstdata <- df1[(121:240),]
covar <- cov(firstdata)
glasso1 <- glasso(s=covar, rho=1.7)
onevector <- replicate(100,1)
firstwts_gmv <- 1/(t(onevector)%*%glasso1$wi%*%onevector)
firstwts_gmv <- as.numeric(firstwts_gmv)
lastwts_gmv <- glasso1$wi%*%onevector
lastwts_gmv <- as.numeric(lastwts_gmv)
weights_gmv <- firstwts_gmv*lastwts_gmv
我真的不知道我在这里做错了什么,而且我对 R 没有太多经验。错误似乎存在于 for 循环或矩阵中。希望有人可以帮助我,我将不胜感激!
祝你今天过得愉快。
忠实于你的
解决方案
推荐阅读
- jestjs - 什么是 nestjs typeorm 中的 getRepositoryToken 以及何时使用它?
- python - 检查元组列表中的字符串是否包含空格,如果为真则删除元组
- python - UnicodeDecodeError:将以太坊私钥的python字节串转换为字符串?
- arrays - 如何正确地将获取的对象数组设置为响应状态并在 FlatList 中呈现数据
- javascript - String.equals 不是 Web Worker 中的函数
- ruby-on-rails - NoMethodError in SessionsController#create from a rails program
- r - 选择首次启动闪亮应用时默认显示的特定 tabItem()
- php - 在 PHP 中访问 JSON 数据
- sql - 随机选择每组的一个不同的行?
- python - 2Captcha + python + selenium ERROR_ZERO_CAPTCHA_FILESIZE