提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

1 问题一

1.1 问题重述

1.2 问题分析

1.3 解决方法描述

1.4 结果

2 问题二

2.1 问题重述

2.2 问题分析

2.3 解决方法描述

总结


前言

近日参加了校内的建模比赛,小组的选题为COVID-19相关的题目,笔者将此次主要参与解题的两小问做个记录(虽然解题方法很辣鸡,但还是厚颜无耻的贴上来了),有兴趣友友可以继续研究~


1 问题一

1.1 问题重述

实际中核酸检测并不是完全准确的,一个阴性样本,检测出来是阴性的概率是q,阳性的概率是1-q(假阳);一个阳性样本,检测出来是阳性的概率是p,阴性的概率是1-p(假阴);一般对阳性的结果都会对该样本进行二次复检,所以假阳基本会被排除,而对阴性的结果不会进行二次检测,所以假阴无法得知,一般情况q∈[0.95,0.99],p∈[0.5,07]。如果有一个学生在核酸检测的后一天外出时感染了新冠病毒,且无任何症状,请问现在核酸检测有效期是72小时,那么通过学校的核酸检测,能够发现这个学生是阳性平均所需要的时间是多少天?(核酸检测当天出结果)

1.2 问题分析

我们假设:①当连续两次核酸检测结果都为阳性时,才可判定为确诊病例;②当检测结果为假阴的累计概率小于 0.05 时予以排除。

该学生在第1次核酸检测的后一天外出时感染了新冠病毒,按照常规72小时核酸检测制,那么下次核酸检测时间为 2 天后。2 天后进行第2次核酸检测时,有阴性和阳性两种核酸结果。如果是阳性,那么 24 小时后再进行第3次核酸检测,若核酸检测结果依然是阳性,则确定为感染者;如果是阴性,则 72 小时后再进行第3次核酸检测.......依此循环,并在每次循环时当检测结果为阴性时计算其概率和总检验天数。

1.3 解决方法描述

针对这个问题,笔者设计了一个循环判断方法,具体流程描述如下:

Step1:该阳性病例在核酸检测后的第二天感染,因此会在两天之后进行 72 小时制的常规核酸检测,由此定义初始筛查天数为 2 天。

Step:2:定义一个 0-1 变量 Xi , i 表示为该阳性样本第 i 次进行核酸检测,变量 Xi 表示第 i 次核酸检测结果,若 Xi = 1,表示此次核酸检测呈阳性,否则为阴性

Step3:在每一次的核酸检测中,该阳性病例,检测出来是阳性的概率为p ,阴性的概率为1- p(假阴),且p ∈ [0.5,0.7]。利用随机函数在区间 [0.5,0.7] 中随机生成概率 p,再根据概率 p 随机生成Xi = 0 或 1。

Step4:Xi = 1,则进入阳性判断循环,将此次的核酸检测次序 i 输入列表(列表记录了所有检测结果为阳性的检测次序 i),计算本次输入的次序 i 值与列表中上一个相邻元素的差值,若差值为 1,表示本次阳性的核酸检测与上一次阳性的核酸检测为连续采样,即连续两次核酸检测结果为阳性,该病例确诊,停止循环,计算当前累加的筛查天数并输出结果,若判断为否,则令筛查天数加 1,表示下一次进行核酸检测为 24 小时后;若Xi = 0,则进入阴性判断循环,计算累乘假阴性的概率P = (1 − p)n,并判断 P 是否小于 0.05,若判断为是,停止循环,计算当前累加的筛查天数,并输出结果,若判断为否,则令筛查天数加 3,表示下一次进行核酸检测为 72 小时后。

Step5:分别进行小、中、大三个规模实例的随机实验,对每次输出的筛查天数求均值,得到最终的平均筛查天数。

上述思路的流程图如图所示

代码如下:

import numpy as np
import randomsum_days = 0# 定义每次随机实验筛查耗费天数之和for j in range(0,5000):print("随机实验次数:【",j+1,"】")days=2# 定义初始天数sum_results = 0# 定义初始天数probability = 1# 定义事件发生概率r1_list = []# 定义核酸检测结果为阳性次序的列表for i in range(1,20):p = random.uniform(0.5, 0.7)# 概率p的取值范围p = float(format(p, '.3f'))# 按照区间随机生成三位小数r = np.random.binomial(1,p)# 按照概率p生成每次检测结果if r == 1:results = "阳性"else:results = "阴性"print("第",i,"次随机生成概率p,p值为",p,",本次检测结果为",results)# 检测结果为阳性,进入阳性的判断条件if r == 1:r1_list.append(i)sum_results += 1# 根据相邻两次检测结果为阳性的次序,判断是否为间隔24小时的采样if r1_list[sum_results-1]- r1_list[sum_results-2] != 1:# 一次检测结果为阳性,第二天继续采样检测days += 1else:# 连续两天检测结果为阳性,确诊print("连续两次检测结果为阳,确定为阳性,确诊耗费",days,"天\n")break# 检测结果为阴性,进入阴性的判断条件else:# 根据事件发生的累计概率,作为判断条件probability = probability * (1-p)if probability < 0.05:print("确诊假阴的事件概率小于0.05,确定为阳性,确诊耗费",days,"天\n")breakelse:# 未达到约束概率约束条件,则于72小时后进行下一次核酸检测days += 3 sum_days += daysmean_days = sum_days//j
print("生成【",j+1,"】个随机实例,查找该阳性病例的平均耗费时间为",mean_days,"天")

1.4 结果

通过实例规模为 1000 个、5000 个、10000 个的三次随机实验,实验结果如下图所示,得到平均筛查时间均为 7 天。

2 问题二

2.1 问题重述

以部分确诊数据(题目提供)为依据,建立合适的传染病模型。

2.2 问题分析

根据数据绘制散点图,大致观察确诊数量的变化情况。

可以发现规模呈现s型变化,即初期感染群体个体数很少,密度增长缓慢;中期随着感染群体中个体数增加,密度增长加快;中后期感染群体呈现爆发式扩大,密度增长最快;后期在防疫措施的加持下,感染群体的增长速度得到遏制,增长变慢。

查阅资料,发现Logistic回归模型的增长曲线与确诊数量增长线非常相似,

Logistic方程表达式如下,通过拟合数据,求解方程中的参数K、P0、r

2.3 解决方法描述

运用 Logistic模型,并进行数据拟合求解参数,代码如下:

import numpy as np #导入数值计算模块
import pandas as pd #导入数据处理模块
import matplotlib.pyplot as plt #导入绘图模块
from scipy.optimize import curve_fit #导入拟合模块plt.rcParams["font.sans-serif"]="SimHei" #黑体中文
plt.rcParams["axes.unicode_minus"]=False #显示负号data=pd.read_csv("C:/Users/TR/Desktop/数据分析/data.csv", encoding="gb18030") #读取数据
date=data['time'] #日期
confirm=data['infecter'] #确诊数
t=range(len(confirm)) #构造横轴#散点图
fig=plt.figure(figsize=(16,8)) #建立画布
ax=fig.add_subplot(1, 1, 1)
ax.scatter(t,confirm, color="red", label="确诊人数") #真实数据散点图
ax.set_xlabel("日期",  fontsize='15') #横坐标
ax.set_ylabel("累计确诊人数",  fontsize='15') #纵坐标
plt.title('3月1日-5月26日每日累计确诊病例变化图',  fontsize='25',fontweight='bold', color='black')#标题
ax.set_xticklabels(['','3月1号', '3月21号', '4月11号', '5月1号','5月22号'], rotation=30, fontsize=10) #自定义横坐标标签
plt.savefig('真实数据散点图.png', dpi = 500)#拟合
def logistic(t,K,P0,r): #定义logistic函数exp_value=np.exp(r*(t))return (K*exp_value*1)/(K+(exp_value-1)*1)coef, pcov = curve_fit(logistic, t, confirm) #拟合
print(coef) #logistic函数参数
y_values = logistic(t,coef[0], coef[1], coef[2]) #拟合y值
print(coef[0], coef[1], coef[2]) #打印参数K,P0,r
ax.plot(t,y_values,color="blue", label="拟合曲线") #画出拟合曲线plt.savefig('拟合结果图.png', dpi = 500)

总结

运用了比较简单的方法对问题进行了分析与处理。第二题的解决方法,最开始考虑的是传染病模型,如SI、SEIR等,奈何笔者基础太差,短时间内无法全部实现,所以转变思想改用Logistic模型。同样的,在翻阅Logistic模型相关的博客时,也发现有的博主利用网格调参的方法使参数更优,后续有空笔者会继续进行学习的!

参考资料:

python实现logistic增长模型拟合2019-nCov确诊人数

Logistic模型拟合COVID-19疫情以及Python实现

循环判断核酸检测结果+logistics模型拟合确诊数据相关推荐

  1. 广州上海高比例无症状感染者数据从何而来——基于核酸检测准确性的分析

    (本文仅代表原作者的观点.授权转发自公众号:越秀山边.) 请大家参与无症状感染者比例的一个调查,看看身边到底有多少无症状的情况,参与人越多结果越准确: 小调查:无症状感染者知多少 越秀山边 统计数据表 ...

  2. qPCR与新冠病毒核酸检测

    qPCR与新冠病毒核酸检测 这篇文章简单记录一下qPCR核酸定量的原理以及它在新型冠状病毒检测中的应用,分享给身边好奇核酸检测的朋友,参考视频链接:https://www.bilibili.com/v ...

  3. 网易北京:全员核酸检测为阴性 园区环境检测为阴性

    1月23日消息,据网易通报,1月22日,居住在大兴区天宫院街道融汇社区的网易北京某员工被诊断为新冠肺炎确诊病例. 网易北京紧急采取防控措施,于1月22日对全体北京员工进行核酸检测,结果均为阴性,并在当 ...

  4. 互联网晚报 | 07月02日 星期六 | ​​​北京健康宝核酸检测天数计算规则调整;​上海鼓励用人单位吸纳失业3个月及以上人员...

    北京健康宝核酸检测天数计算规则调整 近日,北京健康宝发布新版,结合北京市最新防疫政策及用户反馈,对扫码结果展示.到访人登记簿.疫苗接种状态等功能进行优化升级.调整后,健康宝核酸检测天数严格按照日历日计 ...

  5. 新冠病毒变异株核酸检测引物设计——代码实现1

    上一期我们对新冠变异株核酸检测的方法原理进行了简介,本期我们主要讲一下,如何利用python语言实现我们特异性检测的目标. 一.文件读取 接着上一期我们下载新冠Alpha.Beta.Delta.Gam ...

  6. 动态规划 | 可以用在核酸检测的算法:莱文斯坦算法

    核酸检测经此一疫已经成为了人尽皆知的检测手段,但是你可曾想过经过仪器检测出来的 DNA序列是如何与正常情况下的 DNA 序列做对比的呢?面对整村的核酸检测结果,计算工作肯定需要电脑来完成,如果我们想知 ...

  7. 核酸检测识别系统——总章

    目录 核酸检测结果识别系统 源代码(FOR FREE) 产品介绍 产品功能 技术栈 使用说明 技术算法讲解 组成部分 easyocr opencv excel表和数据库 Pyecharts可视化界面 ...

  8. 核酸检测抽签系统(每次在每个班级选择%22)easyexcel+ZipOutputStream

    一.前情提要 根据通知,每天从每个年级抽22%的人数去做核酸,五天做到全覆盖,那么问题来了,前四天做完之后是88%的人做完了,第五天12%的人没做,剩下的10%就要从做过的人中抽取,那么要怎么实现,而 ...

  9. 【项目实战:核酸检测平台】第二章 大卸八块

    本章目标 完成项目架构设计和数据库结构设计 重点:全是重点 文章目录 本章目标 总体设计(架构设计) 技术选型 部署结构设计 工程文档结构设计 第一步:项目和模块命名 第二步:约定项目工程文件内容 第 ...

最新文章

  1. 和12岁小同志搞创客开发:手撕代码,做一款温湿度检测器
  2. Spartan-6的MCB模块、GTP模块、PCIe端点模块
  3. 使用池来实现并发服务器
  4. Bochs安装FreeDOS与调试
  5. MySQL Execution Plan--执行计划中的Type列
  6. [蓝桥杯2017初赛]方格分割-dfs+思维
  7. 加法变乘法(蓝桥杯)
  8. SQL Server 板机
  9. Kubernetes 云原生 容器类型有哪些
  10. 设为首页加入收藏代码_兼容各浏览器ie系列Firefox
  11. 逛街游戏html5,HTML5购物商城app源码
  12. mysql误操作删除数据后数据恢复
  13. 手游游戏资源提取 (破解、AssetStudio、VGMToolbox、disunity、Il2CppDumper、 .NET Reflector)...
  14. booth算法原理的简单化理解
  15. 微信小程序商城开发记录一之需求分析
  16. 360大战QQ演义之一:一场腾讯可能连底裤都输掉的战争!
  17. BZOJ4516 [Sdoi2016]生成魔咒 后缀自动机/后缀数组
  18. 第二章 装配bean
  19. 大物下(大学物理知识点回顾与典型题解析
  20. 将swolidwroks文件导出URDF,导入v-rep\CoppeliaSim

热门文章

  1. 立创开源 U盘测试架2199
  2. 颜色模型与颜色应用---RGB颜色模型
  3. 【Gin-v1.9.0源码阅读】version.go
  4. react里面的接口调用方法
  5. 京东英特尔联手布局企业级市场,引领中小企业PC采购新趋势
  6. 第三方百度网盘同步盘设置
  7. 年终奖太少?小灰送书给大家!
  8. 【Labplus 3】Scratch时钟表盘角度解析
  9. 管理系统中计算机应用实践报告,管理系统中的计算机应用实践报告.docx
  10. ROS vim退出快捷键