首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数之间的差异,以获得方差-协方差矩阵(var和cova)

函数之间的差异,以获得方差-协方差矩阵(var和cova)
EN

Stack Overflow用户
提问于 2019-09-14 12:14:20
回答 1查看 106关注 0票数 1

我正在尝试优化一个函数(NbCluster),使其能够处理更大的矩阵,这是我在前面发布的内容:Reducing NbClust memory usage这让我创建了一个(仍然非常实验性的) NbClust分支,它在这里:https://github.com/jbhanks/BigNbClust

其中一个主要的瓶颈是使用var()函数,所以我在Rfast中用cova替换了它。结果并不完全相同,我需要弄清楚它们是否足够接近,可以互换使用。会不会出现其他差异更大的情况?

代码语言:javascript
复制
> bigm <- matrix(rnorm(1000*1000,mean=0,sd = 3), 1000, 1000)
> v <- var(bigm)
> cvm <- cova(bigm)
> sum(v != cvm)
[1] 954579
> sum(v == cvm)
[1] 45421
> cor(c(v), c(cvm), method = "pearson")
[1] 1
> cor(c(v), c(cvm), method = "spearman")
[1] 1
> diff = v - cvm
> mean(diff)
[1] -4.557742e-19
> max(diff)
[1] 2.4869e-14
代码语言:javascript
复制
> bigm <- matrix(rnorm(10000*10000,mean=0,sd = 3), 10000, 10000)
> v <- var(bigm)
> cvm <- cova(bigm)
> sum(v != cvm)
[1] 97986031
> sum(v == cvm)
[1] 2013969
> cor(c(v), c(cvm), method = "pearson")
[1] 1
> cor(c(v), c(cvm), method = "spearman")
[1] 1
> diff = v - cvm
> mean(diff)
[1] -3.875792e-20
> max(diff)
[1] 9.05942e-14

然而,在某些实际情况下(不幸的是我不能分享实际数据),var不会抛出错误,而cova会抛出错误。

代码语言:javascript
复制
Error in sqrt(n) : non-numeric argument to mathematical function

这似乎是cova在特定循环迭代中获取向量而不是矩阵的结果(cova在早期步骤中获取dim() )。我通过总是将对象强制转换为矩阵来修复它,但我仍然担心我的更改可能会产生意想不到的后果。我不能说我真的掌握了函数的内部工作原理,我只是用我理解为等价的函数替换了几个函数。

EN

回答 1

Stack Overflow用户

发布于 2019-09-24 22:36:53

cova和var给出了相同的结果,你可以从平均差异中看到它。"sum(v != cvm)“不给零是合理的。结果并不是所有的小数位都相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57932385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档