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