|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
我们在进行处理的时候经常会遇到计算协方差的问题,这个好解决,但是问题是,当我们每n个观测值计算协方差,而每个个体的观测值超过n个时,就出现问题啦。我们需要一点一点计算,但是,当需要观察的个体超过一个时,问题来了。讲了一通,可能晕了吧,先讲一个实例吧
如下图所示,我们需要计算3个观测值为单位的协方差,个体为a和b,需要计算个体分别与总收益的协方差,每个个体的观测值为4个
时间 个体 收益 总收益 协方差
1 a 1 3
2 a 3 2
3 a 5 2
4 a 2 6
1 b 1 3
2 b 2 2
3 b 4 2
4 b 6 1
现在我们需要求e4,也就是2到4行个体收益与总收益的协方差,我们自然想到的就是那个公式啦
e4=((c2-average(c2:c4))(d2-average(d2:d4)+(c3-average(c2:c4))(d3-average(d2:d4)+(c4-average(c2:c4))(d4-average(d2:d4))/3
然后下拉,问题来了,当求到e6和e7时,由于所计算的并非单纯b的收益与市场收益的协方差,所以没有意义。也就是说,以3个观测值为基础计算的协方差要损失掉两个样本,那怎么办来?
由于损失掉的(e6和e7)我们也计算了,但计算的函数中包含a和b的收益,一个自然想到的问题就是,当a和b并存时,值为空,我们想到了使用if函数,将第二列不是计算时不是同一个体的剔除,最终结果如下
e4=if(countif(b2:b4,b2)=1,((c2-average(c2:c4))(d2-average(d2:d4)+(c3-average(c2:c4))(d3-average(d2:d4)+(c4-average(c2:c4))(d4-average(d2:d4))/3,""
)
大家可以看出,通过一个if函数,就把这个损失掉的无意义的值定义为空啦,嘿嘿 |
|