python中带有Spm1d的嵌套方差分析。Can';t打印f统计数据和p值
我正在寻找一个简单的解决方案,用python执行多因素方差分析。我追求的是2因素嵌套方差分析,SPM1D python模块是实现这一点的一种方法,但我遇到了一个问题 对于任何嵌套方法示例,都不会打印任何F-统计量或p_值,我也无法找到任何方法打印它们或将它们发送到变量 要了解运行其中一个示例的动作,其中B嵌套在A中,带有Y观察值: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
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']
。