TypeError: "'numpy.float64' object is not callable" 使用 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

因此,我认为我的错误是,我将两个样本(核心值和外围值(都提供给

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

我不知道正确的实现会是什么样子,告诉Python我想使用这两个示例进行引导,以避免出现错误消息。

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

A";可调用的";是一个函数或类似函数的东西。作为statistic自变量,sp.stats.variation((Core_values, Periphery_values), axis=None)两者都不是。它只是一个数字(特别是一个浮点值(,因此出现了错误";TypeError:numpy.float64对象不可调用`。

可能想要作为statistic参数传递的是可能类似于以下内容:lambda c,v: sp.stats.variation((c,v), axis=None)。lambda是可调用的。注意,在statistic的文档之后,lambda中的参数数量与bootstrap的第一个参数(即元组(Core_values, Periphery_values)(的长度相同。然而,这个特定的lambda可能无法实现您真正想要的功能。(是否这样做超出了这个特定问题的范围。(

最新更新