【问题标题】:How to compute this in R? [closed]如何在 R 中计算这个? [关闭]
【发布时间】:2015-01-24 21:51:33
【问题描述】:

我有一个如下所示的数据集:

y1 y2 1 2 3 4 2 5 7 2 等等。所以每个观察都是二维的。调用这个矩阵y

我想计算

现在每个yi 都是一个向量。

我怎么能用 R 做到这一点?有预定义的功能吗?非常感谢!

【问题讨论】:

  • 尝试了什么?
  • 我尝试了“cov”和“var”函数,但我得到了不同的东西,在谷歌上搜索我没有发现这两者之间的区别:(在最坏的情况下我正在考虑编码它adhoc 但我觉得如果 R 已经有这样的功能是没有意义的
  • 那么您认为这个计算被称为什么名称?公式中的 y-bar 是 y1 和 y2 的平均值吗?
  • 公式是协方差,但 R 中的 cov 函数没有给我正确的值,我认为...

标签: r statistics


【解决方案1】:

这显然不是协方差。让我们看看它是什么。

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

你的答案又来了。

【讨论】:

  • 但我应该得到一个矩阵。总之,我们有 (2x1) 乘以 (1x2) 的乘积,所以我们应该得到 (2x2) 矩阵还是我错了?
  • 公式中的 y_i 不是您的 y1 和 y2 列向量吗?然后 (y1 - ybar) 的长度为 4。如果公式中的 y_i 不是,那么请更改您的符号,或者更清楚地了解您对行和列的操作。 放弃
  • 我的符号很清楚,我用列 y1 和 y2 调用了矩阵 y,所以是的 yi 是一个向量。没关系。
猜你喜欢
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 2021-04-15
相关资源
最近更新 更多