2012年国赛高教杯数学建模C题脑卒中发病环境因素分析及干预解题全过程文档及程序

2012年国赛高教杯数学建模

C题 脑卒中发病环境因素分析及干预

  脑卒中(俗称脑中风)是目前威胁人类生命的严重疾病之一,它的发生是一个漫长的过程,一旦得病就很难逆转。这种疾病的诱发已经被证实与环境因素,包括气温和湿度之间存在密切的关系。对脑卒中的发病环境因素进行分析,其目的是为了进行疾病的风险评估,对脑卒中高危人群能够及时采取干预措施,也让尚未得病的健康人,或者亚健康人了解自己得脑卒中风险程度,进行自我保护。同时,通过数据模型的建立,掌握疾病发病率的规律,对于卫生行政部门和医疗机构合理调配医务力量、改善就诊治疗环境、配置床位和医疗药物等都具有实际的指导意义。
  数据(见Appendix-C1)来源于中国某城市各家医院2007年1月至2010年12月的脑卒中发病病例信息以及相应期间当地的逐日气象资料(Appendix-C2)。请你们根据题目提供的数据,回答以下问题:
  1.根据病人基本信息,对发病人群进行统计描述。
  2.建立数学模型研究脑卒中发病率与气温、气压、相对湿度间的关系。
  3.查阅和搜集文献中有关脑卒中高危人群的重要特征和关键指标,结合1、2中所得结论,对高危人群提出预警和干预的建议方案。

整体求解过程概述(摘要)

  本文通过建立合理的假设,对某地区2009-2010年脑卒中发病率与8种气象因素进行了相关分析,并经多元逐步回归建立了脑卒中发病率的预报模型进行了定量分析,得到了较为合理的结论。考虑到发病率与气象因素的复杂关系,在逐步线性回归模型的基础上,引进广义线性回归模型(GLM)进行推广。
  针对问题一,本文对性别、年龄段、职业和时间序列以及4年的平均发病例数进行统计和分析,在删除了一些缺失或失真数据的基础上,对数据分别进行整理分析。最后,在性别方面,得到脑卒中发病率男性比女性的高。从年龄结构看,发病人数主要集中在50~90这一年龄区间内,其所占比例达81.10%。从职业结构看,农民的发病率最大。从各年的平均发病人数看,在各年季节交替月份的患病人数较多。
  针对问题二,考虑到气温、气压和相对湿度对发病率的影响不确定,本文首先建立了Pearson相关分析模型,通过r值的大小来判断发病率与各指标是否存在着某种相关。经计算得出温度与发病率呈正相关,气压、相对湿度与发病率呈负相关,且各指标与发病率均呈弱相关,相关度并不显著。其次,考虑到发病率有可能受到多个因素的共同影响,于是用逐步线性回归模型对各因素逐步分析删除,最后得出脑卒中月平均发病率与平均气压、最大气压、最小气压、平均温度、最高温度和最高相对湿度这五个因素的一个多元回归线性预报模型,并进行了一定的定量分析。最后,考虑到逐步线性回归模型的各指标是相互独立性,而气压和温度之间存在相互作用,通过引入平均气压和平均温度交互项,对模型二进行了改进,得到了一个更优的模型。通过对模型的定量分析,本文预报模型具有实际应用价值。
  针对问题三,脑卒中高危人群的重要特征有:偏瘫、失语、精神症状等,关键指标有:高血压、吸烟醉酒、血脂异常、糖尿病等。结合问题一、二的结论,分别针对高危人群提出预警和干预的建议方案。从这两个方案中得知:减少脑卒中发病率要从提高身体素质、疾病的认知和膳食均衡这三方面去考虑。
  最后,考虑到逐步线性回归模型中脑卒中发病率与气象因素中的线性关系,而实际上,发病率与气象因素关系的复杂性线性关系并不足以充分刻画,本文在假设脑卒中发病例数与整个地区是一个小概率事件上,其实际分布接近于泊松分布,利用广义线性回归模型(GLM)进行推广,一定程度优化了逐步回归模型。

模型假设:

  1. 假设4年中年与年间气象没有发生剧烈变化
  2. 假设发病人数不存在人口迁移的巨大变化

问题分析:

  背景分析
  脑卒中(Stroke)是脑中风的学名,是一种突然起病的脑血液循环障碍性疾病。又叫脑血管意外。是指在脑血管疾病的病人,因各种诱发因素引起脑内动脉狭窄,闭塞或破裂,而造成急性脑血液循环障碍,临床上表现为一过性或永久性脑功能障碍的症状和体征.脑卒中分为缺血性脑卒中和出血性脑卒中。根据统计中国每年发生脑卒中病人达200万,发病率高达120/10万。现幸存中风病人700万,其中450万病人不同程度丧失劳动力和生活不能自理。致残率高达75%。尽管该病与高血压、心脏病等主要危险因素有关,但其发病往往受季节气候变化及其它外界因素的影响。
  气象因素的变化对脑血管病发病的影响,国内外均有报道。多数研究指出,在冬季脑卒中的发病率有明显增加,发病率与温度有很大的关联,但也有研究指出,脑卒中发病率与季节没有明显的变化,这些日渐深入的研究结果不尽一致,主要是因为各地的地理气候特点差别较大以及社会因素、人种遗传等等方面的区别。为了更好的预防这种疾病,本文对2007-2010年某地区脑卒中发病率与该地区相应的思念气象因素指标进行分析,初步验证了气象因素与脑卒中发病率之间的关系。
  问题一分析
  根据附件1-4,本文以脑卒中发病人数,分别从发病时间、性别、年龄结构和职业进行数据整理分析,得到一些初步的结论,对脑卒中发病情况进行一些简单的分析与总结。
  通过数据的初始处理发现题目所给的数据中存在空缺,对于数据的统计问题,数据的空缺是不可忽视的地方,要综合考虑空缺数据的作用以及给数据统计造成的影响大小,乔珠峰、田凤占和黄厚宽[1]等人指出:如果缺失的数据占总数据量的比例较小,认为缺失数据对原始数据的处理影响较小,可以忽略不计,如果缺失数据在总数据量中所占比例较大可能对原始数据的处理造成很大的影响,不能直接忽略,需要通过填补来完善数据才能进行计算。
  对每个部分共计多少数据,缺失多少数据,删除多少数据以及剩余多少完整数据进行研究,通过对数据的进一步处理,得到男女患病比例的扇形图,将年龄结构处理后的数据转化成柱状图,据图分析患病人群所处的年龄段,根据这一结果结合脑卒中的患病原因分析不同年龄段患病的原因;对于按月份划分的数据,做出各年中每月患病人数与年份患病总人数比值的折线图,通过图示结果分析患病人数与月份之间的关系,从而反映气候的变化对脑卒中病发的影响情况,以及对此应做出的相关防御措施。
  对于职业这一类别的数据,通过统计缺失数据所占的比例比较大,如果要对数据进行填补将会耗费很大的人力物力,对此认为获取这类缺失数据造成的代价太大,此外由于职业之一类别的数据分析没能对解题带来较大的帮助,而且职业指标的概念比较模糊无法准确描述这类数据的处理对现实生活和相关研究有何积极作用,因此本文不再对这一类别的数据进行统计分析。
  问题二分析
  本文通过统计2007-2010年间的脑卒中月平均发病人数,对应选取4年间的8个气象因子:平均气压、最高气压、最低气压、平均温度、最高温度、最低温度、平均相对湿度以及最低相对湿度,试图建立月平均发病率与气象因子之间的数学模型。通过查询资料得知发病率等于月发病人数与发病总人数的比值,但是使用发病率建立的模型所反映的变量之间的变化趋势不明显(无量纲化处理后的原因),故本文建立发病人数与气象因素之间的模型,再用发病人数除以总人数即可得到发病率与气象因子之见的数学模型。
  首先建立基于Pearson简单相关分析的模型,分析脑卒中月均患病人数与气象指标的相关关系,然后本文利用逐步回归分析建立月发病率与多项气象因素之间的预测模型,通过t值检验,逐步剔除一些对因变量影响不大的指标,直到所有指标都通过t值检验才终止计算,得到最终脑卒中月发病数与气象因素的预报模型。最后本文认为气压与温度之间存在一定的相互关系,在逐步回归模型的基础上通过引入交叉项对模型进行改进,进一步提高模型的拟合度,完善模型。
  问题三分析
  通过查阅资料得到脑卒中高危人群的重要特征和关键指标,结合问题一和问题二得到的结论,分别对高危人群提出预警和干预的建议方案。对预警方案从生活、医疗和就医三个方面提出建议;对干预方案从脑卒中高危人群和非高危人群两方面提出建议。

模型的建立与求解整体论文缩略图

在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

import pandas as pd
from pyecharts.charts import Page  #页面
from pyecharts.charts import Bar  #柱状图
from pyecharts.charts import Pie  #饼状图
from pyecharts.charts import Line #折线图
from pyecharts.charts import Scatter #散点图
from pyecharts import options as opts

# 定义日期转换函数
def convert_date(date_str):
    try:
        return pd.to_datetime(date_str, errors='coerce').strftime('%Y-%m-%d')
    except:
        return ''


def analyze():
    df1 = pd.read_excel('Appendix-C1/data1.xls', index_col=0)
    df1 = df1.reset_index()
    df2 = pd.read_excel('Appendix-C1/data2.xls', index_col=0)
    df2 = df2.reset_index()
    df3 = pd.read_excel('Appendix-C1/data3.xls', index_col=0)
    df3 = df3.reset_index()
    df4 = pd.read_excel('Appendix-C1/data4.xls', index_col=0)
    df4 = df4.reset_index()

    df = df1.append(df2, ignore_index=True)
    df = df.append(df3, ignore_index=True)
    df = df.append(df4, ignore_index=True)

    print("去除脏数据前总数据量:" + str(df.shape[0]))

    target_column = "Sex"
    df_cleanNullSex = df.dropna(subset=[target_column])
    print("去除Sex数据为空的数据量:" + str(df_cleanNullSex.shape[0]))
    df_Sex = df_cleanNullSex[df_cleanNullSex[target_column].isin([1.0, 2.0])]  # 筛选值为 1 或 2 的行
    print("去除Sex脏数据的数据量:" + str(df_Sex.shape[0]))

    target_column = "Age"  # 将列转换为数值类型,非数字值会被置为 NaN
    df_cleanNullSex = df_Sex
    df_cleanNullSex[target_column] = pd.to_numeric(df_cleanNullSex[target_column], errors='coerce')
    # 筛选值在 0 到 110 范围内的行,并删除空值和乱码
    df_cleanSex = df_cleanNullSex.dropna(subset=[target_column])  # 删除空值
    df_cleanSex = df_cleanSex[
        (df_cleanSex[target_column] >= 0) & (df_cleanSex[target_column] <= 110)]  # 筛选值在 0 到 110 范围内的行
    print("去除Age数据为空的数据量:" + str(df_cleanSex.shape[0]))

    df = df_cleanSex
    # 将Occupation列的空值替换为 9
    target_column = "Occupation"  # 替换为目标列的名称
    df[target_column] = df[target_column].fillna(9)

    # 将日期转换为日期时间类型并统一格式Report time
    df['Time of incidence'] = df['Time of incidence'].apply(convert_date)
    df['Report time'] = df['Report time'].apply(convert_date)

    # 将日期列转换为 datetime 类型
    df['Time of incidence'] = pd.to_datetime(df['Time of incidence'], format='%Y-%m-%d')
    # 筛选出2007-2010年之前的数据
    df = df[(df['Time of incidence'].dt.year > 2006) & (df['Time of incidence'].dt.year < 2011)].copy()
    df = df[df['Time of incidence'].dt.month < 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值