我的数据集如下所示:
y1 y2
1 2
3 4
2 5
7 2
等等。所以每次观察都是二维的。调用此矩阵y
我想计算
现在每个yi
都是一个向量。
我怎么能用R这样做?有预定义的功能吗?非常感谢!
答案 0 :(得分:2)
显然不是协方差。让我们看看它是什么。
y-bar是y1和y2的平均值:
> d=data.frame(y1=c(1,3,2,7),y2=c(2,4,5,2))
> ybar = mean(c(d$y1, d$y2))
> ybar
[1] 3.25
现在在你的总和中我们有一个轻微的混乱点。 A * A'将取决于A是行矩阵还是列矩阵。 R只是在一个维度上有向量。你可以通过一种方式得到一个标量答案,另一方面,你得到一个4x4矩阵,因为你有四个观察值。我想你想要前者。所以总和的内部位是这些的总和:
> t(d$y1-ybar) %*% (d$y1-ybar)
[,1]
[1,] 20.75
> t(d$y2-ybar) %*% (d$y2-ybar)
[,1]
[1,] 6.75
总和为20.75 + 6.75,即27.5。你有答案。
但这些事情并不关心他们是y1还是y2。这些只是与平均值的平方差的总和。我们可以使用unlist
获取所有值的向量,并在其中使用:
> unlist(d)
y11 y12 y13 y14 y21 y22 y23 y24
1 3 2 7 2 4 5 2
> sum( (unlist(d) - mean(unlist(d)) )^2 )
[1] 27.5
再次得到你的答案。