使用“scipy.stats”计算 t 统计量
Calculating t-statistics using `scipy.stats`
我有两个值样本,在两种不同条件下对同一组进行测量:
import numpy as np
import scipy.stats as st
v1 = np.array([ 152.65285 , 97.011475, 77.56722 , 120.19234 ])
v2 = np.array([ 149.19984, 172.08975, 143.92285, 108.60255])
我想做的是对这个特定的数据集执行 dependent t-test for paired examples。正如在维基百科 link 中看到的那样,这是通过使用以下公式计算 t 值来执行的:
其中mu_0
设置为0。我进行了这个计算,计算出t_value等于
>>> (np.average(v1 - v2) * np.sqrt(len(v1))) / (np.std(v1 - v2))
-1.6061552162815307
但是,使用 scipy.stats
包,我得到的结果略有不同:
>>> st.ttest_rel(v1,v2)
(-1.3909712197206947, 0.25844779134312651)
st.ttest_rel(v1,v2)
returns应该的第一个数字,根据scipy
manual,等于t-值,但它是不是。我是不是遗漏了什么,还是 scipy.stats
计算的统计数据不正确?
我在 python 文件夹的 site-packages
目录中查看了 scipy 的源代码。在文件 scipy/stats/stats.py
中显示了 ttest_rel 是如何计算的。我发现它的完成方式与您手动计算的情况有所不同。但由于我不是统计专家,你可能想自己看看实现。这是我目前能给的最好的建议...
不同之处似乎在于 np.std
使用 N
自由度计算标准偏差,而 ttest_rel
使用有偏估计器计算它(N-1
度的自由)。
您可以通过将 np.std
中的自由度差异指定为 1
:
来解决此问题
>>> (np.average(v1 - v2) * np.sqrt(len(v1))) / (np.std(v1 - v2, ddof=1))
-1.3909712197206947
这两个计算一致。
我有两个值样本,在两种不同条件下对同一组进行测量:
import numpy as np
import scipy.stats as st
v1 = np.array([ 152.65285 , 97.011475, 77.56722 , 120.19234 ])
v2 = np.array([ 149.19984, 172.08975, 143.92285, 108.60255])
我想做的是对这个特定的数据集执行 dependent t-test for paired examples。正如在维基百科 link 中看到的那样,这是通过使用以下公式计算 t 值来执行的:
其中mu_0
设置为0。我进行了这个计算,计算出t_value等于
>>> (np.average(v1 - v2) * np.sqrt(len(v1))) / (np.std(v1 - v2))
-1.6061552162815307
但是,使用 scipy.stats
包,我得到的结果略有不同:
>>> st.ttest_rel(v1,v2)
(-1.3909712197206947, 0.25844779134312651)
st.ttest_rel(v1,v2)
returns应该的第一个数字,根据scipy
manual,等于t-值,但它是不是。我是不是遗漏了什么,还是 scipy.stats
计算的统计数据不正确?
我在 python 文件夹的 site-packages
目录中查看了 scipy 的源代码。在文件 scipy/stats/stats.py
中显示了 ttest_rel 是如何计算的。我发现它的完成方式与您手动计算的情况有所不同。但由于我不是统计专家,你可能想自己看看实现。这是我目前能给的最好的建议...
不同之处似乎在于 np.std
使用 N
自由度计算标准偏差,而 ttest_rel
使用有偏估计器计算它(N-1
度的自由)。
您可以通过将 np.std
中的自由度差异指定为 1
:
>>> (np.average(v1 - v2) * np.sqrt(len(v1))) / (np.std(v1 - v2, ddof=1))
-1.3909712197206947
这两个计算一致。