python中带有Spm1d的嵌套方差分析。Can';t打印f统计数据和p值

python中带有Spm1d的嵌套方差分析。Can';t打印f统计数据和p值,python,statistics,anova,matlab-spm,Python,Statistics,Anova,Matlab Spm,我正在寻找一个简单的解决方案,用python执行多因素方差分析。我追求的是2因素嵌套方差分析,SPM1D python模块是实现这一点的一种方法,但我遇到了一个问题 对于任何嵌套方法示例,都不会打印任何F-统计量或p_值,我也无法找到任何方法打印它们或将它们发送到变量 要了解运行其中一个示例的动作,其中B嵌套在A中,带有Y观察值: import numpy as np from matplotlib import pyplot import spm1d dataset = spm1

我正在寻找一个简单的解决方案,用python执行多因素方差分析。我追求的是2因素嵌套方差分析,SPM1D python模块是实现这一点的一种方法,但我遇到了一个问题

对于任何嵌套方法示例,都不会打印任何F-统计量或p_值,我也无法找到任何方法打印它们或将它们发送到变量

要了解运行其中一个示例的动作,其中B嵌套在A中,带有Y观察值:

import numpy as np
from matplotlib import pyplot
import spm1d

dataset      = spm1d.data.uv1d.anova2nested.SPM1D_ANOVA2NESTED_3x3()
Y,A,B        = dataset.get_data()

#(1) Conduct ANOVA:
alpha        = 0.05
FF           = spm1d.stats.anova2nested(Y, A, B, equal_var=True)
FFi          = FF.inference(0.05)
print( FFi )

#(2) Plot results:
pyplot.close('all')
FFi.plot(plot_threshold_label=True, plot_p_values=True)
pyplot.show()
提供的唯一统计显著性指标是h0假设是否被拒绝

> print( FFi )

SPM{F} inference list
   design    :  ANOVA2nested
   nEffects  :  2
Effects:
   A     z=(1x101) array      df=(2, 6)    h0reject=True
   B     z=(1x101) array      df=(6, 36)   h0reject=False
事实上,这应该足够了。然而,在科学领域,科学家们喜欢把一些事情想得或多或少有意义,这实际上是一种垃圾。。。意义是二元的。但他们就是这么想的,所以我必须配合,才能让作品出版

示例代码生成一个matplotlib图,该图上有f统计值和p_值

#(2) Plot results:
pyplot.close('all')
FFi.plot(plot_threshold_label=True, plot_p_values=True)
pyplot.show()
但我似乎无法得到任何打印它的输出

FFi.get_p_values

产生输出:

<bound method SPMFiList.get_p_values <kabammi edit -- or get_f_values> of SPM{F} inference list
   design    :  ANOVA2nested
   nEffects  :  2
Effects:
   A     z=(1x101) array      df=(2, 6)    h0reject=True
   B     z=(1x101) array      df=(6, 36)   h0reject=False

获取p值的最简单方法是使用您提到的
get\u p\u values
方法,您只需通过在末尾添加
()
来调用该方法

p = FFi.get_p_values()
print(p)
这将产生:

([0.016584151119287904], [])
要在2+方式方差分析中查看每个效应的更详细信息,包括p值,请使用
print
以及如下的单个F统计数据:

print( FFi[0] )
print( FFi[1] )
SPM{F} inference field
   SPM.effect    :   Main A
   SPM.z         :  (1x101) raw test stat field
   SPM.df        :  (2, 6)
   SPM.fwhm      :  11.79254
   SPM.resels    :  (1, 8.47993)
Inference:
   SPM.alpha     :  0.050
   SPM.zstar     :  24.30619
   SPM.h0reject  :  True
   SPM.p_set     :  0.017
   SPM.p_cluster :  (0.017)
p = [F.p  for  F in FFi]
第一个print语句将生成如下输出:

print( FFi[0] )
print( FFi[1] )
SPM{F} inference field
   SPM.effect    :   Main A
   SPM.z         :  (1x101) raw test stat field
   SPM.df        :  (2, 6)
   SPM.fwhm      :  11.79254
   SPM.resels    :  (1, 8.47993)
Inference:
   SPM.alpha     :  0.050
   SPM.zstar     :  24.30619
   SPM.h0reject  :  True
   SPM.p_set     :  0.017
   SPM.p_cluster :  (0.017)
p = [F.p  for  F in FFi]
您可以如下方式检索群集的p值:

print( FFi[0] )
print( FFi[1] )
SPM{F} inference field
   SPM.effect    :   Main A
   SPM.z         :  (1x101) raw test stat field
   SPM.df        :  (2, 6)
   SPM.fwhm      :  11.79254
   SPM.resels    :  (1, 8.47993)
Inference:
   SPM.alpha     :  0.050
   SPM.zstar     :  24.30619
   SPM.h0reject  :  True
   SPM.p_set     :  0.017
   SPM.p_cluster :  (0.017)
p = [F.p  for  F in FFi]
这与调用
get\u p\u值
的结果相同


请注意,在这种情况下,
FFi[1]
没有p值,因为测试统计数据未能通过
alpha
定义的阈值(参见上图中的“主B”面板)。如果在这种情况下也需要报告p值,一个选项就是简单地使用“p>alpha”。更精确的P值是参数可用的,直到p=0.5,但较大的p值比使用参数方法不是非常精确,因此如果对于所有情况都需要p值,则考虑使用非参数版本:<代码> SPM1D.STATS。我真傻。好极了谢谢托德。所以FFi[0]是A组,嵌套值B是FFi[1]。。等等。是的,你也可以像字典一样访问单独的效果:
FFi['a']
FFi['B']
。另外,如果存在交互项,则为
FFi['AB']