我正在寻找一种在python中执行多因素ANOVA分析的简单解决方案。我想要的是2因子嵌套ANOVA,SPM1D python模块是一种方法,但是我遇到了问题。
http://www.spm1d.org/doc/Stats1D/anova.html#two-way-nested-anova
对于任何嵌套的方法示例,都不会打印任何F统计或p_values,也无法找到打印它们或将它们发送到变量的任何方法。
要完成运行其中一个示例的动作,其中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图,这个 DOES 上面有f统计和p_values!
#(2) Plot results:
pyplot.close('all')
FFi.plot(plot_threshold_label=True, plot_p_values=True)
pyplot.show()
FFi.get_p_values
和
FFi.get_f_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
所以我不知道该怎么做。很明显,FFi.plot类可以访问p_values(使用plot_p_values)但是FFi.get_p_values不能!!任何人都可以伸出援手吗?
欢呼声, ķ
答案 0 :(得分:1)
获取p值的最简单方法是使用您提到的get_p_values
方法,只需在最后添加()
即可调用该方法。
p = FFi.get_p_values()
print(p)
这会产生:
([0.016584151119287904], [])
要查看2 + -way ANOVA中每种效果的更多详细信息,包括p值,请使用print
以及各个F统计信息,如下所示:
print( FFi[0] )
print( FFi[1] )
第一个print语句将产生如下输出:
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)
您可以检索群集&#39; p值如下:
p = [F.p for F in FFi]
与调用get_p_values
的结果相同。
请注意,FFi[1]
在这种情况下没有p值,因为测试统计信息无法越过alpha
定义的阈值(请参阅&#34;主B&#34;面板中的如上图)。如果您在这种情况下也需要报告p值,一个选项就是使用&#34; p&gt;阿尔法&#34 ;.参数化可以获得更精确的p值,直到大约p = 0.5,但是使用参数方法得到的p值不是很准确,因此如果您需要p值,请考虑使用非参数版本:spm1d.stats.nonparam.anova2nested
。< / p>