在R中将一个大向量分割成区间。
在R中将一个大向量分割成区间。
我不太擅长R语言。我运行了这个循环,得到了一个包含11,303,044行的巨大结果向量。我还有另一个由另一个循环得到的向量,大小为1681行。\n我希望运行一个chisq.test
来比较它们的分布,但由于它们的长度不同,所以无法工作。\n我尝试从大小为11,303,044的向量中取出大小为1681的样本,以使第二个向量的长度相同,但每次运行时得到不同的chisq.test
结果。\n我考虑将这两个向量分割成相等数量的区间。\n假设\n向量1:\n
temp.mat<-matrix((rnorm(11303044))^2, ncol=1) head(temp.mat) dim(temp.mat)
\n向量2:\n
temp.mat<-matrix((rnorm(1681))^2, ncol=1) head(temp.mat) dim(temp.mat)
\n如何将它们分割成相等长度的向量?
在R中,chisq.test是用于离散数据的Pearson卡方检验。当使用两个输入向量时,它会将输入强制转换为因子,并测试独立性,而不是分布的相等性。这意味着数据的顺序会产生差异。
问题的出现原因是chisq.test函数无法比较分布,因此需要使用其他方法来解决。可以尝试使用ks.test函数,它可以处理不同长度的向量和连续数据。
但是,在使用kolmogorov的测试时,由于第一个向量的大小为11,303,044,R会打印出错误信息:无法分配大小为86.2 Mb的向量。解决方法之一是在进行KS测试之前调用gc()函数来释放内存。或者可以使用t.test函数进行测试。
另一个选项是对数据进行随机子集的KS测试。例如,ks.test(x, sample(y, 10000))。
作者进一步解释了自己的数据集,其中包含相关和无关的个体。作者希望证明两个向量来自于不同的循环,并且这两个向量在直方图上看起来完全不同。最终,作者使用ks.test(x, sample(y, 10000))成功地解决了问题。
通过使用ks.test函数和随机子集的方法,成功解决了将大向量分割为间隔的问题。
这段代码中,首先生成了一个大小为1130300的矩阵mat1,然后从mat1中随机抽取了100000个元素组成了矩阵smat。接下来,又生成了一个大小为1681的矩阵mat2。最后,将smat和mat2作为参数传入qqplot函数,进行了多次抽样并绘制了图形。
从统计学角度来看,我们可以看到一些有趣的现象。在“偏离平均值”的较高水平上,大样本总是从“良好拟合”中偏离,这并不奇怪,因为它包含了更多的极端值。
感谢DWin的帮助,这生成了一张有趣的图。
你的努力进行定性比较并使用相同的“breaks”约束条件是合理的。qqplot的结果可以进行更精细的比较,并揭示任何“高频”差异或奇怪的“尾部行为”。但是在如此大的样本上进行“显著性检验”是不推荐的,因为它几乎总是“显著”的,但通常是无意义的。