我有一个不完整的资产类返回流。我在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
和sd
,则分别会得到.76
和3.8
。不过我希望新数据可以说是1
和5
。
同样,如果您mvrnorm
使用半自定义mu
和sigma
,那么它也会重新模拟Class1-Class4。