1

问题

我有两个数组,我们称它们为 ar1 和 ar2(大小 (192,289)),它们代表标准差的经纬度图,并且我有一个大小相似的它们的差异数组。我想绘制差异,并在顶部绘制一个点画图案,其中两个数组之间的差异在 95% 置信水平(alpha = 0.05)上具有统计显着性。

编码

我正在使用此示例进行编码-

如何在 python 中进行 F 测试

我使用了 Joel Cornett 的解决方案,用ar1andar2代替 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 x 289)。len(ar1)并且len(ar2)在这里不起作用,因为那些只给出第一个维度的长度,所以我尝试将数组展平以获得正确的长度。

df1 = len(np.ndarray.flatten(sdmod)) - 2
df2 = len(np.ndarray.flatten(sdcon)) - 2
print df1, df2

55486 55486

但是,继续前进,我的 p 值为 9.88365269356e-289(基本上为 0)。这是一个单一的值,正如我在这种特殊情况下所期望的那样,在统计上是微不足道的,但我需要一组值来进行点画,以便我可以查看网格上是否存在差异显着的地方。我只是不确定如何在二维数组上执行此测试,因为我找到的所有示例都使用列表或其他一维数据类型,而且我以前也从未做过这样的分析。(我是应我的顾问的要求做的,他不使用 Python)。

问题

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

如果可能的话,我可以修改它以填写由于对主题缺乏了解而可能遗漏的任何内容(让我知道我得到的 p 值似乎不正确),但如果它太复杂或不完整求大神帮忙,我删了

4

1 回答 1

0

这取决于您的阵列。如果步长足够大,可以将 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])

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

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

这产生 (14,22) 数组。

于 2017-12-03T00:27:50.017 回答