全部版块 我的主页
论坛 新商科论坛 四区(原工商管理论坛) 商学院 创新与战略管理
51 0
2025-11-19

统计函数在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检验主要应用于以下三种场景:

  1. 通过样本检验总体均值;
  2. 比较两组数据是否存在显著差异;
  3. 评估同一组数据前后的显著变化。

值得注意的是,单样本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拒绝原假设:性别与偏好可能相关")
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群