4

我对编程和 R 非常陌生。我试图找到我的问题的答案,但部分问题是我不知道究竟要搜索什么。

我正在尝试为矩阵的每一行重复计算(统计距离)。这是我到目前为止所拥有的:

pollution1 <-as.matrix(pollution[,5:6])
ss <- var(pollution1)
ssinv <- solve(ss)
xbar <- colMeans(pollution1)
t(pollution1[1,]-xbar)%*%ssinv%*%(pollution1[1,]-xbar)

这让我只有第一个统计距离,但我不想用不同的矩阵行重新输入这条线来获得所有这些距离。

根据我的阅读,我可能需要一个循环或使用apply(),但我自己没有成功。对此的任何帮助,以及有关如何搜索帮助的建议,因此我不需要发布,将不胜感激。谢谢你。

4

2 回答 2

3

你也可以考虑这个mahalanobis函数: from ?mahalanobis,

返回 '​​x' 中所有行的平方马氏距离和向量 mu = 'center' 相对于 Sigma = 'cov'。这(对于向量'x')定义为

                  D^2 = (x - mu)' Sigma^-1 (x - mu)

当然,学习如何使用apply也很好......

于 2012-12-01T21:19:30.340 回答
2

只是使用呢apply

apply(pollution1, 1, function(i) t(i-xbar) %*% ssinv %*% (i-xbar))

此外,如果您使您的示例可重现,这将很有帮助,例如:

pollution1 = matrix(rnorm(100), ncol=2)
ss = var(pollution1)
ssinv = solve(ss)
xbar = colMeans(pollution1)
t(pollution1[1,]-xbar) %*% ssinv %*% (pollution1[1,]-xbar)
于 2012-12-01T20:48:53.580 回答