我有一个不完整的资产类别回报流。我在 Frontline Solver 中所做的是生成一个回报分布,该分布将相关资产类别与其他资产类别的相关性相匹配,以获得最大数量的可用数据。我的目标函数是最小化该相关矩阵和整个时间范围的模拟相关矩阵之间的 RMSE。约束包括为正在模拟的资产类别设置风险和回报(平均值和标准差),以及每个单独观察可以在多少标准差范围内的一些界限。
我尝试使用mvrnorm
,但它也重新采样了我用来建立协方差矩阵的数据,因为我关心时间依赖性,所以我不想要它。
lpSolve
我开始研究不同的优化/求解器包,例如quadprog
但难以解释。
下面是一个数据框,因为我不能随意使用它来帮助解决这个问题。
data<-structure(list(Class1 = c(8, 4, 5, -3, 1, 1, 5, 0, -3, 4, 3,
-1, 2, 7, -2, 2, 5, 4, -1, 9, 2, 0, -2, 2, 2, -7, 1, 3), Class2 = c(4,
6, 4, 0, 0, -1, 5, 2, 0, 0, 0, -1, 1, 1, -1, 1, 2, 2, 0, 3, 0,
0, -4, 0, 0, -4, -2, 0), Class3 = c(6, 7, 4, -2, 1, 1, 5, 0,
-2, 4, 2, -2, 1, 6, -2, 2, 4, 4, 0, 7, 2, 0, -2, 2, 2, -6, 2,
2), Class4 = c(9, 5, 7, 0, 1, 0, 7, -2, -2, 3, 0, -2, 3, 6, 0,
2, 5, 5, 0, 7, 3, -1, -5, 1, 2, -8, 2, 2), Class5 = c(NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, -3, 4, 4, 1, 2, 4, 4, -2,
4, 2, 0, -6, 1, 0, -9, 3, 4)), .Names = c("Class1", "Class2",
"Class3", "Class4", "Class5"), class = "data.frame", row.names = c(NA,-28L))
#Produces the following table
Class1 Class2 Class3 Class4 Class5
1 8 4 6 9 NA
2 4 6 7 5 NA
3 5 4 4 7 NA
4 -3 0 -2 0 NA
5 1 0 1 1 NA
6 1 -1 1 0 NA
7 5 5 5 7 NA
8 0 2 0 -2 NA
9 -3 0 -2 -2 NA
10 4 0 4 3 NA
11 3 0 2 0 NA
12 -1 -1 -2 -2 -3
13 2 1 1 3 4
14 7 1 6 6 4
15 -2 -1 -2 0 1
16 2 1 2 2 2
17 5 2 4 5 4
18 4 2 4 5 4
19 -1 0 0 0 -2
20 9 3 7 7 4
21 2 0 2 3 2
22 0 0 0 -1 0
23 -2 -4 -2 -5 -6
24 2 0 2 1 1
25 2 0 2 2 0
26 -7 -4 -6 -8 -9
27 1 -2 2 2 3
28 3 0 2 2 4
我的目标是为整个 28 个观察结果获得 Class5 的回报,以匹配观察数据的相关矩阵 [12:28,]。我还想指定模拟应该是什么的自定义平均值和标准偏差。例如,如果您像现在一样计算 Class5 的mean
and sd
,您将分别得到.76
and 3.8
。但是我希望新数据可以说..1
和5
.
同样,如果您mvrnorm
使用半定制mu
,sigma
那么它也会重新模拟 Class1-Class4。