zhuifeng66666 2022-12-30 16:13 采纳率: 50%
浏览 304
已结题

使用蒙特卡洛方法对几何分布进行序贯概率比检验 (SPRT)

问题遇到的现象和发生背景

在 2 个简单假设的情况下,用计算机实施序贯概率比检验 (SPRT)。

使用蒙特卡洛方法估计其错误类型 I 和 II 的概率,以及条件预期样本大小(运行测试 10 000 次,$H_0$ 为真,
计算有利于 $H_1$ 的 FALSE 决策的数量,除以 10 000 -> 你得到 $\alpha$ 的估计值;启动一个计数器,
将你停止测试的观察次数添加到一个计数器,每次运行时 $H_0$ 为真,然后除以 10 000 ->
你将得到 $ 的估计值t_0$;$\beta$ 和 $t_1$ 的估计是相似的)。

实现:几何分布,$\theta$ 是它唯一的参数。

分析错误概率和假设接近度的预期样本大小的依赖关系。将 $\alpha$ 和 $\beta$ 用于您选择的阈值计算。

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

我找到的方法代码如下,但是仅仅只是实现几何分布的蒙特卡洛方法,不知道该怎样实现使用蒙特卡洛方法对几何分布进行序贯概率比检验 (SPRT)。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(222)

# 把计算得到的函数写成一个函数
def distribution_z(z, p, max_k=200):
    import math
    j = int(math.floor(z))
    A = 0
    for m in range(1, j + 1):
        A += (1 - p) ** (m - 1)
    A *= p

    B = 0
    for k in range(j + 1, max_k + 1):
        a = (1 - p) ** (k - 1)
        a /= k
        B += a
    B *= z * p

    return A + B


def pdf_z(z, p, max_k=200):
    import math
    j = int(math.floor(z))
    B = 0
    for k in range(j + 1, max_k + 1):
        a = (1 - p) ** (k - 1)
        a /= k
        B += a
    return B * p


p = 0.1
# 选取数据点,点越多越精确
dataPoints = 10000

Unit = np.random.rand(dataPoints)
Geom = np.random.geometric(p, dataPoints)
distri_of_Monte = Geom * Unit

# 概率密度函数 PDF
plt.hist(distri_of_Monte, bins=40, range=(0, 40))
points_of_z = np.arange(0, 41, 0.01)
pdf_of_z = np.array([pdf_z(zi, p) for zi in points_of_z]) * dataPoints
plt.plot(points_of_z, pdf_of_z)
# print(pdf_of_z)
plt.show()

hist, bin_edges = np.histogram(distri_of_Monte, bins=40, range=(0, 40))

# 概率分布函数 CDF
hist_list = np.cumsum(hist) / dataPoints

plt.plot(bin_edges[1:], hist_list)

points_of_z = np.arange(1, 41, 0.1)
distri_of_z = [distribution_z(zi, p) for zi in points_of_z]

plt.plot(points_of_z, distri_of_z)

plt.show()

import sprt as sprt
import numpy as np

# Null value
h0 = 0.5
# Alternative value
h1 = 0.55
# Type I error rate = 0.05
alpha = 0.05
# Type II error rate = 0.2
beta = 0.2
# Values
values = np.random.binomial(1, 0.55, 100)
test = sprt.SPRTBinomial(h0 = h0, h1 = h1, alpha = alpha, beta = beta, values = values)

test.plot()

# Plot the data and boundary but without fill the color
test.plot(fill = False)


我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

使用蒙特卡洛方法,对几何分布进行序贯概率比检验 (SPRT),同时满足题目的要求。

  • 写回答

1条回答 默认 最新

  • heart_6662 2022-12-30 16:15
    关注

    我现在写给你,望采纳!!点击该回答右侧的“采纳”按钮即可采纳!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 已采纳回答 12月30日
  • 创建了问题 12月30日

悬赏问题

  • ¥20 关于游戏c++语言代码问题
  • ¥15 如何制作永久二维码,最好是微信也可以扫开的。(相关搜索:管理系统)
  • ¥15 delphi indy cookie 有效期
  • ¥15 labelme打不开怎么办
  • ¥35 按照图片上的两个任务要求,用keil5写出运行代码,并在proteus上仿真成功,🙏
  • ¥15 免费的电脑视频剪辑类软件如何盈利
  • ¥30 MPI读入tif文件并将文件路径分配给各进程时遇到问题
  • ¥15 pycharm中导入模块出错
  • ¥20 Ros2 moveit2 Windows环境配置,有偿,价格可商议。
  • ¥15 有关“完美的代价”问题的代码漏洞