这是我想做的事情:
我有一个时间序列数据框,让我们说 100 个长度为 600 的时间序列 - 每个都在数据框的一列中。
我想随机选取 4 个时间序列,然后为它们分配总和为 1 的随机权重(即 0.1、0.5、0.3、0.1)。使用那些我想计算 4 个加权时间序列变量(例如凸组合)之和的平均值。
我想这样做让我们说 100k 次并将每个结果存储在表格中
ts1.name, ts2.name, ts3.name, ts4.name, weight1, weight2, weight3, weight4, mean
这样我就得到了 9*100k df。
我已经尝试了一些东西,但是 R 在循环方面非常糟糕,而且我知道由于 R 设计,面向矢量的解决方案更好。
这就是我所做的,我知道这很可怕
df 的形式为
v1,v2,v2.....v100
1,5,6,.......9
2,4,6,.......10
3,5,8,.......6
2,2,8,.......2
etc
e=NULL
for (x in 1:100000)
{
s=sample(1:100,4)#pick 4 variables randomly
a=sample(seq(0,1,0.01),1)
b=sample(seq(0,1-a,0.01),1)
c=sample(seq(0,(1-a-b),0.01),1)
d=1-a-b-c
e=c(a,b,c,d)#4 random weights
average=mean(timeseries.df[,s]%*%t(e))
e=rbind(e,s,average)#in the end i get the 9*100k df
}
该程序运行缓慢。
编辑:
感谢我的帮助,我不习惯思考 R,也不太习惯将每个问题转换为 R 中需要的矩阵代数方程。如果我想计算,问题就会变得有点复杂标准差。我需要协方差矩阵,我不确定我是否可以/如何从原始 timeseries.df 协方差矩阵中为每个样本选择随机元素,然后计算样本方差
t(sampleweights)%*%sample_cov.mat%*%sampleweights
最终得到 ts.weighted_standard_dev 矩阵
最后一个问题如果我想引导原始 df x 次然后应用相同的计算来测试我的数据的稳健性,最好的方法是什么
谢谢