TypeError: "'numpy.float64' object is not callable" when using scipy.stats.bootstrap

TypeError: "'numpy.float64' object is not callable" when using scipy.stats.bootstrap

我想应用 scipy.stats.bootstrap 的统计自举方法。

在下面的代码中,我将两个不同的 .txt 文件加载到 Python。每个文件都包含一列数值(浮点数)。我想计算每个文件的变异系数 (CV),并比较它们在 CV 中的差异是否具有统计显着性。这就是我使用引导程序的原因。

完整代码如下:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import scipy as sp
from scipy import stats


# Coefficient of variation
Core_values = np.loadtxt(f"pathtofile/file1.txt", comments=None, delimiter=None, converters=None,
skiprows=0, usecols=0,unpack=False, ndmin=0, encoding=None, max_rows=None, like=None)

Periphery_values = np.loadtxt(f"pathtofile/file2.txt", comments=None, delimiter=None, converters=None,
skiprows=0, usecols=0, unpack=False, ndmin=0, encoding=None, max_rows=None, like=None)

Results = sp.stats.bootstrap((Core_values, Periphery_values), sp.stats.variation((Core_values, Periphery_values), axis=None), vectorized=False, paired=True, confidence_level=0.95, n_resamples=20000)

print(Results)

当我只应用计算两个文件的 CV 的代码如下时:

Results =  sp.stats.variation((Core_values, Periphery_values), axis=None)
print(Results)

Python 给出了正确的结果,即来自两个输入文件的值的一个 CV 值。但是,如完整代码所示,在引导代码中实现 sp.stats.variation((Core_values, Periphery_values), axis=None) 时,我收到以下错误消息:TypeError: 'numpy.float64' object is not callable

因此我认为我的错误是我将两个样本(Core_values 和 Periphery_values)都提供给了

Results = sp.stats.bootstrap((Core_values, Periphery_values), sp.stats.variation...

我无法弄清楚正确的实现会告诉 Python 我想使用这两个样本进行引导以避免出现错误消息。

答案在 scipy.stats.bootstrapstatistic 的第二个参数的文档中:“统计信息必须是一个 callable [强调] 接受len(data) 样本作为单独的参数 [其中 databootstrap 的第一个参数] 和 returns 结果统计。如果设置 vectorized True , statistic 还必须接受关键字参数 axis 并进行矢量化以计算沿提供的轴的统计信息。"

“可调用”是一个函数或类似函数的东西。您作为 statistic 参数提供的内容,sp.stats.variation((Core_values, Periphery_values), axis=None) 两者都不是。它只是一个数字(特别是浮点值),因此出现错误“TypeError: numpy.float64 object is not callable`.

可能想要作为statistic参数传递的是可能这样的东西:lambda c,v: sp.stats.variation((c,v), axis=None) . lambda 可调用的。请注意,根据 statistic 的文档,lambda 中的参数数量与 bootstrap 的第一个参数的长度相同,即元组 (Core_values, Periphery_values)。然而,这个特定的 lambda 可能不会做你真正想要的。 (它是否超出了这个特定问题的范围。)