我非常非常喜欢编程和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()
,但我自己没有成功。任何有关这方面的帮助,以及如何寻求帮助的建议,所以我不需要发布,将不胜感激。
谢谢。
答案 0 :(得分:3)
您可能还会考虑mahalanobis
功能:来自?mahalanobis
,
返回'x'和'中所有行的平方Mahalanobis距离 关于Sigma ='cov',向量mu ='center'。这是 (对于矢量'x')定义为
D^2 = (x - mu)' Sigma^-1 (x - mu)
当然,学习如何使用apply
也很好......
答案 1 :(得分: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)