You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kolmogorov Smirnov Test结果异常求助:数据正态性与测试结果不符

KS检验结果与QQ图矛盾的排查求助

我按照Sam Mason的建议修改了高斯参数相关代码,但Kolmogorov-Smirnov检验的结果仍不符合预期。从QQ图判断,数据应该近似服从正态分布,附上更新后的代码及数据文件,恳请协助排查问题。

数据文件:Z079_test_mc.csv


可能的问题点及修正后的代码

import pandas as pd
import numpy as np
from scipy import stats  # 原代码遗漏该导入,运行会直接报错

alpha = 0.05
df = pd.read_csv("Z079_test_mc.csv")
columns = df.columns
with open('matrix.txt', 'a') as f:
    for col in columns:
        print([col])
        # 提取一维无缺失值数据:避免原代码中二维数组导致的检验逻辑异常
        data = df[col].dropna().values
        # 使用样本标准差(ddof=1,除以n-1),更贴合统计检验的样本假设
        mean_val = np.mean(data)
        std_val = np.std(data, ddof=1)
        # 传入一维数据执行KS检验
        stat, p_val = stats.kstest(data, stats.norm.cdf, args=(mean_val, std_val))
        print('Statistics', stat, 'p-value', p_val)
        if p_val < alpha:
            result = '原假设可被拒绝'
            print(f"{result}\n")
            f.write(f"{col},Kolmogorov Smirnov\n        ,{stat},{p_val},{result}\n")
        else:
            result = '原假设不可被拒绝'
            print(result)
            f.write(f"{col},Kolmogorov Smirnov\n        ,{stat},{p_val},{result}\n")

关键修正说明

  1. 补全模块导入:原代码未导入scipy.stats,运行会直接抛出NameError
  2. 数据维度修正:df[[col]]返回的是DataFrame,其values为二维数组,而kstest要求输入一维数据,改用df[col].dropna().values获取正确格式的样本数据
  3. 标准差计算修正:默认np.std计算的是总体标准差(除以n),针对样本数据应使用ddof=1计算样本标准差,符合统计检验的前提假设
  4. 代码可读性优化:简化变量命名与文件写入逻辑,降低维护成本

额外排查建议

  • KS检验对样本量极度敏感:若样本量极大,即使数据与正态分布仅有微小偏差,也可能导致p值小于显著性水平而拒绝原假设
  • 细化QQ图分析:重点观察尾部数据的拟合情况,KS检验对尾部偏差的敏感度远高于视觉判断
  • 交叉验证检验结果:尝试Shapiro-Wilk检验(适用于小样本)或Anderson-Darling检验,对比不同方法的结论是否一致

内容的提问来源于stack exchange,提问作者NotAnotherName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:06:38