ttest_1samp 给出的错误 P_value
Wrong P_value given by ttest_1samp
这是一个单样本 t 检验示例:
from scipy.stats import ttest_1samp
import numpy as np
ages = [32., 34., 29., 29., 22., 39., 38., 37.,38, 36, 30, 26, 22, 22.]
ages_mean = np.mean(ages)
ages_std = np.std(ages, ddof=1)
print(ages_mean)
print(ages_std)
ttest, pval = ttest_1samp(ages, 30)
print("ttest: ", ttest)
print("p_value: ", pval)
#31.0
#6.2634470725607025
#ttest: 0.5973799001456603
#p_value: 0.5605155888171379
# check analytically:
my_ttest = (ages_mean - 30.0)/(ages_std/np.sqrt(len(ages)))
print(t)
#0.5973799001456603
勾选 p_value
根据定义p_value = P(t>=0.59) = 1 - P(t<=.59).
使用 Z-table,我们得到 p_value = 1 - 0.7224 = 0.2776 # 0.56!!!
如果您检查 ttest_1samp 的小插图,它会写道:
所以这是一个双侧 p 值,意思是获得比这更极端的绝对 t 统计量的概率之和。
t 分布是对称的,因此我们可以取 -abs(t stat) 并乘以 2 进行双侧检验,p 值将为:
from scipy.stats import t
2*t.cdf(-0.5973799001456603, 13)
0.5605155888171379
您的派生值对于单侧 t 检验是正确的:)
这是一个单样本 t 检验示例:
from scipy.stats import ttest_1samp
import numpy as np
ages = [32., 34., 29., 29., 22., 39., 38., 37.,38, 36, 30, 26, 22, 22.]
ages_mean = np.mean(ages)
ages_std = np.std(ages, ddof=1)
print(ages_mean)
print(ages_std)
ttest, pval = ttest_1samp(ages, 30)
print("ttest: ", ttest)
print("p_value: ", pval)
#31.0
#6.2634470725607025
#ttest: 0.5973799001456603
#p_value: 0.5605155888171379
# check analytically:
my_ttest = (ages_mean - 30.0)/(ages_std/np.sqrt(len(ages)))
print(t)
#0.5973799001456603
勾选 p_value
根据定义p_value = P(t>=0.59) = 1 - P(t<=.59).
使用 Z-table,我们得到 p_value = 1 - 0.7224 = 0.2776 # 0.56!!!
如果您检查 ttest_1samp 的小插图,它会写道:
所以这是一个双侧 p 值,意思是获得比这更极端的绝对 t 统计量的概率之和。
t 分布是对称的,因此我们可以取 -abs(t stat) 并乘以 2 进行双侧检验,p 值将为:
from scipy.stats import t
2*t.cdf(-0.5973799001456603, 13)
0.5605155888171379
您的派生值对于单侧 t 检验是正确的:)