Python如何对2D数组进行ftest?

2024-06-16 11:06:26 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

我有两个数组,我们称它们为ar1和ar2(size(192289)),它们代表标准差的lat lon映射,我有一个大小相似的数组来表示它们的差异。我要绘制差异,并在顶部绘制一个点画图案,其中两个数组之间的差异在95%置信水平(α=0.05)下具有统计学意义。在

代码

我用这个例子来编写代码-

How do I do a F-test in python

我使用了Joel Cornett的解,用ar1和{}代替X和Y

F = np.var(ar1) / np.var(ar2)
print np.var(ar1), np.var(ar2)
print F

0.118586507371 0.161485609461 0.734347213766

下一部分,我需要N-2个自由度来进行分析,其中N是数组中的点数,在本例中为55848(192×289)。len(ar1)len(ar2)在这里不起作用,因为它们只给出第一维的长度,所以我尝试将数组展平以获得正确的长度。在

^{pr2}$

55486 55486

然而,继续下去,我得到的p值是9.88365269356e-289(基本上是0)。这是一个单一的值,正如我在这个特殊的例子中所预期的,统计上不重要,但是我需要一个数组值来做点画,这样我就可以看到网格上是否有任何地方的差异是显著的。我只是不知道如何在二维数组上执行这个测试,因为我发现的所有示例都使用列表或其他一维数据类型,而且我以前也从未做过这样的分析。(我是应导师的要求来做的,他不使用Python)。在

问题

如何在两个二维数组上执行f检验,结果给出了一个大小相似的数组,并为每个网格点提供了一个p值?在

如果可能的话,我可以修改它,以填补由于对主题缺乏理解而遗漏的任何内容(让我知道我得到的p值似乎不正确),但如果这太复杂或不完整,无法获得帮助,我将删除它。在


Tags: 代码网格sizelenvarnp绘制数组
1条回答
网友
1楼 · 发布于 2024-06-16 11:06:26

这取决于你的阵列。如果步长足够大,可以将lat/long数组拆分成更小的部分,则可以计算24x24的正方形,而不是整个数组。你可以检查不同的比例,看看什么是合理的。要实现这一点,请尝试以下方法:

F = np.zeros((derp.shape[0]-24, derp.shape[1]-24))
for a in np.arange(0, F.shape[0]):
    for b in np.arange(0, F.shape[1]):
        F[a,b] = np.var(ar1[a:a+24, b:b+24])/np.var(ar2[a:a+24, b:b+24])

这将产生类似大小的输出(168265)数组,因为24x24的平方在上面的步骤1的代码中求值可能不再有意义。对于较小的步长,半重叠正方形将产生更合理的结果:

^{pr2}$

这将产生(14,22)数组。

相关问题 更多 >