使用 Spm1d 在 python 中嵌套方差分析。无法打印 f 统计数据和 p 值
Nested Anova in python with Spm1d. Can't print f statistics and p values
我正在寻找一种简单的解决方案来在 python 中执行多因素方差分析。我想要的是 2 因子嵌套方差分析,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 图,这个 确实 有 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 class 可以访问 p_values(使用 plot_p_values)但是 FFi.get_p_values 不能!!?任何人都可以伸出援手吗?
干杯,
K
获取p值的最简单方法是使用您提到的get_p_values
方法,您只需在末尾添加()
即可调用该方法。
p = FFi.get_p_values()
print(p)
这产生:
([0.016584151119287904], [])
要在 2+ 方差分析中查看每个效应的更多详细信息,包括 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)
您可以像这样检索集群的 p 值:
p = [F.p for F in FFi]
给出与调用 get_p_values
.
相同的结果
请注意,在这种情况下 FFi[1]
没有 p 值,因为检验统计量未能超过 alpha
定义的阈值(参见上图中的 "Main B" 面板).如果在这种情况下您还需要报告 p 值,一种选择是简单地使用 "p > alpha"。在大约 p = 0.5 之前,可以参数化地获得更精确的 p 值,但是使用参数化方法时,比该值大的 p 值不是很准确,因此如果您需要所有情况下的 p 值,请考虑使用非参数化版本:spm1d.stats.nonparam.anova2nested
.
我正在寻找一种简单的解决方案来在 python 中执行多因素方差分析。我想要的是 2 因子嵌套方差分析,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 图,这个 确实 有 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 class 可以访问 p_values(使用 plot_p_values)但是 FFi.get_p_values 不能!!?任何人都可以伸出援手吗?
干杯, K
获取p值的最简单方法是使用您提到的get_p_values
方法,您只需在末尾添加()
即可调用该方法。
p = FFi.get_p_values()
print(p)
这产生:
([0.016584151119287904], [])
要在 2+ 方差分析中查看每个效应的更多详细信息,包括 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)
您可以像这样检索集群的 p 值:
p = [F.p for F in FFi]
给出与调用 get_p_values
.
请注意,在这种情况下 FFi[1]
没有 p 值,因为检验统计量未能超过 alpha
定义的阈值(参见上图中的 "Main B" 面板).如果在这种情况下您还需要报告 p 值,一种选择是简单地使用 "p > alpha"。在大约 p = 0.5 之前,可以参数化地获得更精确的 p 值,但是使用参数化方法时,比该值大的 p 值不是很准确,因此如果您需要所有情况下的 p 值,请考虑使用非参数化版本:spm1d.stats.nonparam.anova2nested
.