在 Python 中执行随机性运行测试
简介
随机性的概念在洞察力、密码学和模拟等不同领域发挥着至关重要的作用。确定数据序列是否真正随机或显示一些基本模式在许多应用中是至关重要的。为此目的而常用的一种可测量测试是随机性运行测试。在本文中,我们深入研究随机性运行测试,并说明如何使用 Python(一种广泛用于事实分析的灵活编程语言)执行它。通过利用 Python 和 scipy.stats 模块的强大功能,能够有效地应用运行测试来评估给定数据集的随机性。
了解运行测试
运行测试是一种非参数可测量测试,它查看数据集中值的分组以确定它们是否随机或显示一些有效模式。它基于"运行"的概念,运行被定义为超过或低于某个边界值的连续事件。通过分析样本中的运行次数,我们可以评估数据的随机性。
运行检验的基本原理是,在非常随机的样本中,运行次数倾向于遵循特定的分布。如果观察到的运行次数与预期的分布有显著差异,则表明数据中存在模式或偏差。
Z 检验统计方程
Z 检验度量是理论测试中使用的度量,用于确定数据点或测试平均值与总体平均值之间的标准差。当已知总体标准差时,通常会使用它。 Z 检验测量的公式为:
Z = (X − μ) / (σ / √n)
其中:
Z 是 Z 检验测量,
X 是检验平均值,
μ 是总体平均值,
σ 是总体标准差,
n 是检验规模。
此公式允许我们将检验平均值转换为 Z 分数,如果无效理论为真,这将决定获得此类检验平均值的可能性。通过将 Z 检验测量与标准正态分布的临界值进行比较,我们可以选择接受或拒绝无效假设。
在 Python 中实现运行测试
算法
步骤 1:输入信息序列。
步骤 2:初始化因子:num_runs = 1 和 n = 信息序列的长度。
步骤 3:通过比较顺序元素对信息序列内的运行进行编号。
步骤 4:使用 expected_runs 计算预期运行。
步骤 5:使用 std_deviation 计算标准差。
示例
def run_test(data): n = len(data) num_runs = 1 for i in range(1, n): if data[i] != data[i - 1]: num_runs += 1 expected_runs = (2 * n - 1) / 3 std_deviation = ((16 * n - 29) / 90) ** 0.5 z_score = (num_runs - expected_runs) / std_deviation return num_runs, expected_runs, std_deviation, z_score if __name__ == "__main__": data = [12, 10, 8, 9, 7, 5, 4, 6, 8, 10] num_runs, expected_runs, std_deviation, z_score = run_test(data) print("Data:", data) print("Number of Runs:", num_runs) print("Expected Runs:", expected_runs) print("Standard Deviation:", std_deviation) print("Z-Score:", z_score) print("Conclusion:") if abs(z_score) <= 1.96: print("The Run Test result is not statistically significant.") else: print("The Run Test result is statistically significant.")
输出
Data: [12, 10, 8, 9, 7, 5, 4, 6, 8, 10] Number of Runs: 10 Expected Runs: 6.333333333333333 Standard Deviation: 1.2064640713902572 Z-Score: 3.039184301975457 Conclusion: The Run Test result is statistically significant.
限制和注意事项
虽然随机性游程检验是一种有用的事实工具,但必须注意其局限性和注意事项。在 Python 中执行游程检验时,需要注意以下几点:
样本估计:游程检验需要足够大的测试估计才能提供可靠的结果。如果数据集太小,测试可能不够敏感,无法准确识别随机性偏差。建议测试量至少为 20 以获得可靠的结果。
独立性假设:游程检验认为数据集中的值彼此独立。如果数据集不独立或显示某种形式的自相关,则游程检验结果可能是片面的或可疑的。因此,在使用测试时确保数据集的自由度非常重要。
阈值确定:运行测试涉及定义一个阈值,以识别超出和低于该限制的值的运行。边界的选择会极大地影响测试结果。选择与所分析数据性质相符的合适边界非常重要。边界不应太极端或太宽松,因为这可能导致误导性结论。
结果解释:虽然运行测试提供了有关数据集随机性的信息,但谨慎解释结果至关重要。测试不会权威地证明随机性或非随机性,但可能会测量随机性的偏离程度。较大的 p 值表明随机性有所降低,但并未提供有关数据性质或特定模式的信息。
与预期分布的比较: 运行检验将观察到的运行次数与基于随机性的预期分布进行比较。但值得注意的是,预期分布可能会根据数据的特性和所使用的运行检验的具体变体而变化。因此,在解释结果时,考虑正确的预期分布至关重要。
结论
随机性运行检验是评估数据序列随机性的重要工具。通过分析数据集中的运行次数,我们可以确定数据是否显示任何基本模式或偏差。Python 拥有丰富的库环境,提供了一个执行可度量测试(如运行检验)的有用平台。在本文中,我们研究了运行测试的概念,并概述了使用 scipy.stats 模块在 Python 中执行该测试的步骤。请记住,事实测试不是对随机性或非随机性的最终验证,而是分析信息的重要工具。