统计函数在Stats类中的应用
1. 统计描述 - describe函数
此函数提供了一系列统计数据,包括但不限于样本数量、最大值与最小值、平均值、方差、偏度及峰度等。
x = np.array([1,2,3,4,5,6,7,8,9,10])
print(stats.describe(x))
#输出很多量依次为:样本数、最大最小值、平均值、方差、偏度、峰度
2. 常见统计量
除了基本的统计描述外,还包括几何平均数、中位数、众数、方差、标准差、协方差以及相关系数等多种统计指标。
#几何平均数
print(stats.gmean(x))
#中位数
print(np.median(x))
#众数
print(stats.mode(x))
#方差
print(np.var(x))
#标准差
print(np.std(x))
#协方差
print(np.cov(x))
#相关系数
print(np.corrcoef(x))
3. T检验的应用
T检验主要应用于以下三种场景:
- 通过样本检验总体均值;
- 比较两组数据是否存在显著差异;
- 评估同一组数据前后的显著变化。
值得注意的是,单样本T检验的前提条件是样本需符合正态分布且数据间相互独立;若涉及两组样本,则还需确保它们的方差相等。
3.1 样本检验总体均值
此方法用于验证样本均值与假设的总体均值之间的关系。输出结果包括t_stat和p_value两个值,t_stat的绝对值越大,表明样本均值与假设均值之间的差距越大,而p_value则反映了置信度,通常当p_value大于0.05时,我们倾向于接受原假设。
np.random.seed(42)
data = np.random.normal(loc=5, scale=2, size=100)
# 均值为5、scale是标准差的正态分布数据
# 进行单样本t检验,检验均值是否等于5
t_stat, p_value = stats.ttest_1samp(data, 5)#数据+检验均值
print(f"单样本t检验结果:")
print(f"t统计量 = {t_stat:.4f}")
print(f"p值 = {p_value:.4f}")
# 解释结果
if p_value > 0.05:
print("不能拒绝原假设:样本均值可能等于5")
else:
print("拒绝原假设:样本均值显著不等于5")
3.2 比较两组数据的显著性差异
#双样本t检验
# 生成两组示例数据
np.random.seed(42)
group1 = np.random.normal(loc=5, scale=2, size=100) # 第一组:均值为5
group2 = np.random.normal(loc=5.5, scale=2, size=100) # 第二组:均值为5.5
t_stat, p_value = stats.ttest_ind(group1, group2)
print(f"\n独立样本t检验结果:")
print(f"t统计量 = {t_stat:.4f}")
print(f"p值 = {p_value:.4f}")
# 解释结果
if p_value > 0.05:
print("不能拒绝原假设:两组均值可能相等")
else:
print("拒绝原假设:两组均值存在显著差异")
3.3 评估数据前后的显著变化
np.random.seed(42)
before = np.random.normal(loc=5, scale=2, size=100) # 处理前
after = before + np.random.normal(loc=0.5, scale=1, size=100) # 处理后
t_stat, p_value = stats.ttest_rel(before, after)
print(f"\n配对样本t检验结果:")
print(f"t统计量 = {t_stat:.4f}")
print(f"p值 = {p_value:.4f}")
# 解释结果
if p_value > 0.05:
print("不能拒绝原假设:处理前后没有显著差异")
else:
print("拒绝原假设:处理前后存在显著差异")
4. K-S检验
K-S检验可用于判断数据是否遵循特定分布,例如正态分布或均匀分布等。
4.1 正态分布检验
输出示例:
KstestResult(statistic=0.019564968167023827, pvalue=0.8311892490632018, statistic_location=-1.2235290568288415, statistic_sign=-1)
其中,statistic值表示经验分布函数与理论分布函数间的最大绝对差异,数值越小越好;pvalue反映了显著性水平,通常大于0.05时接受原假设;statistic_location指出当x为此值时,statistic达到最大;statistic_sign的值为-1表示理论分布高于经验分布,+1则相反。
x = np.random.randn(1000)
print(stats.kstest(x,'norm'))
4.2 均匀分布检验
print(stats.kstest(x,'uniform'))
4.3 卡方分布检验
print(stats.kstest(x,stats.chi2(df=1).cdf))#检验是否属于卡方分布
#要制定卡方维度,这里指定为1 主要看第二个参数,如果大于0.05则通常可以认为是
5. 卡方检验
卡方检验适用于两种情形:一是检查观测频率与期望频率的一致性(拟合优度检验);二是考察变量间的独立性(独立性检验)。
5.1 拟合优度检验
# 检验骰子是否公平
# 观测频数:掷骰子100次的结果
observed = np.array([15, 20, 18, 16, 17, 14]) # 6个面的观测次数
# 期望频数:如果是公平骰子,每个面应该出现100/6次
expected = np.array([100/6] * 6) # 6个面的期望次数
# 进行卡方拟合优度检验(参数:观察值,预期值)
chi2_stat, p_value = stats.chisquare(f_obs=observed, f_exp=expected)
print("卡方拟合优度检验结果:")
print(f"卡方统计量 = {chi2_stat:.4f}")
print(f"p值 = {p_value:.4f}")
if p_value > 0.05:
print("不能拒绝原假设:骰子可能是公平的")
else:
print("拒绝原假设:骰子可能不公平")
5.2 独立性检验
# 示例:检验性别与偏好是否独立
# 创建列联表
# 行:性别(男、女)
# 列:偏好(A、B、C)
observed = np.array([
[50, 30, 20], # 男性
[40, 45, 15] # 女性
])
#observed=observed.T一样
# 进行卡方独立性检验
chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed)
print("\n卡方独立性检验结果:")
print(f"卡方统计量 = {chi2_stat:.4f}")
print(f"p值 = {p_value:.4f}")
print(f"自由度 = {dof}")
print("\n期望频数表:")
print(expected)
if p_value > 0.05:
print("\n不能拒绝原假设:性别与偏好可能独立")
else:
print("\n拒绝原假设:性别与偏好可能相关")

雷达卡


京公网安备 11010802022788号







