Python-如何做2D数组的f测试?

问题Python-如何做2D数组的f测试?

我有两个数组,我们会打电话给他们AR1和AR2(大小(192289)),代表LAT-LON标准偏差的地图,我有一个同样大小的数组区别。我想绘制这个差异,并且在两个阵列之间的差异在统计上显着的95%置信水平(α= 0.05)上的点状模式上。

我是用我的coding-这个例子的代码

How do I do a F-test in python

我用乔尔·科内特的解决方案,替代ar1并在X ar2和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

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

如何执行上的两个2 d阵列,其中的结果给出了一个类似尺寸的阵列,让你为每个网格点的p值的t-检验的问题?

我可以修改这个,如果可能的话填写任何我可能由于缺乏对主题的理解而丢失的东西(并且让我知道是我得到的p值看起来不正确),但是如果这样复杂或不完整的帮助,我会删除它。

回答:

这取决于你的数组。如果步长足够大,经纬度/长度数组可以分成较小的块,则可以评估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)阵列,因为24×24平方的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)数组。

以上是 Python-如何做2D数组的f测试? 的全部内容, 来源链接: utcz.com/qa/258860.html

回到顶部