【2023深圳杯数学建模A题思路模型与代码分享】

2023深圳杯数学建模A题

  • A题 影响城市居民身体健康的因素分析
  • 解题思路
    • 第一问
    • 第二问
    • 第三问
    • 第四问
  • 技术文档
  • 第一问完整代码
  • 写在最后

A题 影响城市居民身体健康的因素分析

以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病(以下简称慢性病)已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变,慢性病的患病率持续攀升。

众所周知,健康状况与年龄、饮食习惯、身体活动情况、职业等都有密切的关系。如何通过合理地安排膳食、适量的身体运动、践行健康的生活方式,从而达到促进身体健康的目的,这是全社会普遍关注的问题。附件A1是某市卫生健康研究部门对部分居民所做的“慢性非传染性疾病及其相关影响因素流行病学”调查问卷表,附件A2是相应的调查数据结果,附件A3是中国营养学会最新修订的《中国居民膳食指南》中为平衡居民膳食提出的八条准则。

请你们团队研究解决下面问题:

  • 问题1:参考附件A3,分析附件A2中居民的饮食习惯的合理性,并说明存在的主要问题。
  • 问题2:分析居民的生活习惯和饮食习惯是否与年龄、性别、婚姻状况、文化程度、职业等因素相关。
  • 问题3:根据附件A2中的数据,深入分析常见慢性病(如高血压、糖尿病等)与吸烟、饮酒、饮食习惯、生活习惯、工作性质、运动等因素的关系以及相关程度。
  • 问题4:依据附件A2中居民的具体情况,对居民进行合理分类,并针对各类人群提出有利于身体健康的膳食、运动等方面的合理建议。

解题思路

首先,需要先进行数据预处理,主要分成三个部分:

  1. 删除空行;
  2. 给未标号的群众添加ID号;
  3. 对缺失数进行填补。

第一问

  • 根据附件A3,构建若干项得分细则
  • 依据满足条件的比例进行赋分
  • 并根据每个得分项绘制箱线图观察饮食习惯的合理性,并从中判断存在的主要问题

第二问

  • 在饮食习惯得分表的基础上添加若干项,构建生活习惯得分表
  • 然后基于AHP-TOPSIS模型计算每位居民在饮食习惯与生活习惯上的得分,并对得分进行Kolmogorov-Smirnov分布检验
  • 将影响因素分为有序因素及无序因素两类:
  • 对于有序因素,采用皮尔逊或斯皮尔曼相关性系数进行分析,并绘制热力图。
  • 对于无序因素,在进行方差齐性检验后进行Kruskal-Wallis H检验,以判断相关性。

第三问

  • 构建BP神经网络,先根据吸烟、饮酒、饮食习惯、生活习惯、工作性质、运动等因素构建若干特征,
  • 分别对高血压与糖尿病进行预测
  • 然后基于训练好的网络,进行贡献率反解,以此来表征常见慢性病与各因素的相关程度。

第四问

  • 先对各居民习惯进行因子分析,将习惯进行归类
  • 然后对降维后的因子得分进行K-means聚类分析,并绘制分布图,以此表征每位居民在习惯上的缺陷,并给予相应的建议。

技术文档

计算每位居民的饮食习惯得分,每位居民总共5个分数(另外三个准则无法量化或被下述5个准则包含)

例如,若要满足要求1,调查表的结果中需要同时满足2,3,{5,6},若调查表中只满足了其中一个,则要求1的得分为0.3333分。

记S(X)表示:当第X列的值为非0值时,取1;反之取0。
计D(X)表示:第X列的值
每个要求对应要满足的序号如下表所示:
在这里插入图片描述
在这里插入图片描述
绘制箱线图来表述得分的分布情况:
在这里插入图片描述
由图即可分析居民在各个准则下的得分分布情况。例如:居民在准则一的得分最低,说明居民的饮食在“事务多样、合理搭配”这一个方面不够合理。

第一问完整代码

clc
clear
data=xlsread('深圳杯\A-附件\附件2 慢性病及相关因素流调数据.xlsx');
data(1:2,:)=[];
label=data(:,1);
data(:,1)=[];
for i=1:size(data,1)
    for j=1:size(data,2)
        if isnan(data(i,j))
            data(i,j)=0;
        end
    end
end
score=[]; %用于存放得分
%% 计算第一个得分
SumA=2; %A的得分条款数
temp_record=zeros(size(data,1),1);
for i=1:size(data,1) %遍历每一个人
    if ((data(i,53)>0||data(i,58)>0||data(i,63)>0)||data(i,68)>0)&&(data(i,143)>0||data(i,173)>0)&&(data(i,78)>0||data(i,83)>0||data(i,88)>0||data(i,93)>0||data(i,98)>0||data(i,103)>0||data(i,108)>0||data(i,113)>0||data(i,118)>0)&&(data(i,123)>0||data(i,128)>0||data(i,133)>0||data(i,138)>0)
        temp_record(i,1)=temp_record(i,1)+1;
    end
    A=[data(i,53),data(i,58),data(i,63),data(i,68),data(i,73),data(i,78),data(i,83),data(i,88),data(i,93),data(i,98),data(i,103),data(i,108),data(i,113),data(i,118),data(i,123),data(i,128),data(i,133),data(i,138),data(i,143),data(i,148),data(i,153),data(i,158),data(i,163),data(i,168),data(i,173),data(i,178),data(i,183)];
    B=[data(i,54),data(i,59),data(i,64),data(i,69),data(i,74),data(i,79),data(i,84),data(i,89),data(i,94),data(i,99),data(i,104),data(i,109),data(i,114),data(i,119),data(i,124),data(i,129),data(i,134),data(i,139),data(i,144),data(i,149),data(i,154),data(i,159),data(i,164),data(i,169),data(i,174),data(i,179),data(i,194)];
    for k=1:size(A,2)
        if A(k)>0||B(k)>0
            C(k)= 1;
        end
    end
    if ((sum(A)>12)&&(sum(C)>25))&&((data(i,78)||data(i,83)||data(i,88)||data(i,93)||data(i,98)||data(i,103)||data(i,108)||data(i,113)||data(i,118))&&((data(i,53)||data(i,58)||data(i,63))||data(i,68))&&(data(i,143)||data(i,173)))
        temp_record(i,1)=temp_record(i,1)+1;
    end
    score(i,1)=temp_record(i,1)/SumA;
end
%% 计算第二个得分
SumB=2; %A的得分条款数
temp_record=zeros(size(data,1),1);
for i=1:size(data,1) %遍历每一个人
    if 18.5<=data(i,222)/((data(i,221)*0.01).^2)&&data(i,222)/((data(i,221)*0.01).^2)<=24
        temp_record(i,1)=temp_record(i,1)+1;
    end
    if data(i,197~=0)&&((data(i,198)*7)>150)
        temp_record(i,1)=temp_record(i,1)+1;
    end
    score(i,2)=temp_record(i,1)/SumB;
end
%% 计算第三个得分
SumC=4; %A的得分条款数
temp_record=zeros(size(data,1),1);
for i=1:size(data,1) %遍历每一个人
    if (data(i,143)>0||data(i,173)>0)&&((data(i,53)>0||data(i,58)>0||data(i,63)>0)||data(i,68)>0)&&(data(i,108)>0||data(i,113)>0)
        temp_record(i,1)=temp_record(i,1)+1;
    end
    if data(i,143)>0&&((data(i,146)*50)>=300)
        temp_record(i,1)=temp_record(i,1)+1;
    end
    if data(i,173)>0&&(200<=(data(i,176)*50)&&(data(i,176)*50)<=350)
        temp_record(i,1)=temp_record(i,1)+1;
    end
    if (data(i,108)>0||data(i,113)>0)&&(((data(i,111)+data(i,116))*50)>=500)
        temp_record(i,1)=temp_record(i,1)+1;
    end
    score(i,3)=temp_record(i,1)/SumC;
end
%% 计算第四个得分
SumD=2;
temp_record=zeros(size(data,1),1);
for i=1:size(data,1) %遍历每一个人
    if 120<=(((data(i,78)>0)*data(i,81))+((data(i,79)>0)*data(i,81)/7)+((data(i,80)>0)*data(i,81)/31)+...
                ((data(i,83)>0)*data(i,86))+((data(i,84)>0)*data(i,86)/7)+((data(i,85)>0)*data(i,86)/31)+...
                ((data(i,88)>0)*data(i,91))+((data(i,89)>0)*data(i,91)/7)+((data(i,90)>0)*data(i,91)/31)+...
                ((data(i,93)>0)*data(i,96))+((data(i,94)>0)*data(i,96)/7)+((data(i,95)>0)*data(i,96)/31)+...
                ((data(i,98)>0)*data(i,101))+((data(i,99)>0)*data(i,101)/7)+((data(i,100)>0)*data(i,101)/31))...
                *50 ...
            &&...
                (((data(i,78)>0)*data(i,81))+((data(i,79)>0)*data(i,81)/7)+((data(i,80)>0)*data(i,81)/31)+...
                ((data(i,83)>0)*data(i,86))+((data(i,84)>0)*data(i,86)/7)+((data(i,85)>0)*data(i,86)/31)+...
                ((data(i,88)>0)*data(i,91))+((data(i,89)>0)*data(i,91)/7)+((data(i,90)>0)*data(i,91)/31)+...
                ((data(i,93)>0)*data(i,96))+((data(i,94)>0)*data(i,96)/7)+((data(i,95)>0)*data(i,96)/31)+...
                ((data(i,98)>0)*data(i,101))+((data(i,99)>0)*data(i,101)/7)+((data(i,100)>0)*data(i,101)/31))...
                *50<=200
            
        temp_record(i,1)=temp_record(i,1)+1;        
    end
    if data(i,99)==2&&data(i,118)==1
        temp_record(i,1)=temp_record(i,1)+1;  
    end
    score(i,4)=temp_record(i,1)/SumD;
end
%% 计算第五个得分
SumE=3;
temp_record=zeros(size(data,1),1);
for i=1:size(data,1) %遍历每一个人
    if 25<=((data(i,187)+data(i,188))*500/2.5/31) &&  ((data(i,187)+data(i,188))*500/2.5/31)<=30
        temp_record(i,1)=temp_record(i,1)+1;  
    end
    if (data(i,178)==0) && (data(i,183)==0) && (data(i,200)==1&&data(i,14)==2)
        temp_record(i,1)=temp_record(i,1)+1;
    end
    if ((data(i,189)*50/2.5/31)<5) && (data(i,17)+data(i,18)+data(i,20)+data(i,21)+data(i,23)+data(i,24)+data(i,26)+data(i,27)+data(i,29)+data(i,30))*50/7<15
        temp_record(i,1)=temp_record(i,1)+1;
    end
    score(i,5)=temp_record(i,1)/SumE;
end

%% 绘制箱线图
h = boxplot(score,'Colors','k','Symbol','o','labels',{'一、食物多样,合理搭配','二、吃动平衡,健康体重','三、多吃蔬果、奶类、全谷、大豆','四、适量吃鱼、禽、蛋、瘦肉','五、少盐少油,控糖限酒'});
% hTitle = title('Miles per Gallon by Vehicle Origin');
hXLabel = xlabel('准则');
hYLabel = ylabel('得分');
% 线宽
set(h,'LineWidth',1.5)
% 坐标轴美化
set(gca, 'Box', 'on', ...                                % 边框
'LineWidth', 1,...                                       % 线宽
'XGrid', 'off', 'YGrid', 'off', ...                      % 网格
'TickDir', 'in', 'TickLength', [.015 .015], ...          % 刻度
'XMinorTick', 'off', 'YMinorTick', 'off', ...            % 小刻度
'XColor', [.1 .1 .1],  'YColor', [.1 .1 .1])             % 坐标轴颜色
% 字体和字号
set(gca, 'FontName', '宋体')
set([hXLabel, hYLabel], 'FontName', '宋体')
set(gca, 'FontSize', 12)
set([hXLabel, hYLabel], 'FontSize', 15)
% set(hTitle, 'FontSize', 11, 'FontWeight' , 'bold')
% 背景颜色
set(gcf,'Color',[1 1 1])

%箱子颜色
color = [250/255,127/255,111/255;
    130/255,176/255,210/255;
    190/255,184/255,220/255;
    231/255,218/255,210/255;
    153/255,153/255,153/255];
h = findobj(gca,'Tag','Box');
for j=1:length(h)
   patch(get(h(j),'XData'),get(h(j),'YData'),color(j,:),'FaceAlpha',.5);
end
c = get(gca, 'Children');
%图注
% hleg1 = legend(c(1:2:8,:), 'MSE','MAE','MAPE');

写在最后

下面是学姐自己整理的完整代码与运行结果,需要的同学欢迎咨询~
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/93243.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件设计师学习笔记7-输入输出技术+总线+可靠性+性能指标

目录 1.输入输出技术 1.1数据传输控制方式 1.2中断处理过程 2.总线 3.可靠性 3.1可靠性指标 3.2串联系统与并联系统 3.3混合模型 4.性能指标 1.输入输出技术 即CPU控制主存与外设交互的过程 1.1数据传输控制方式 (1)程序控制&#xff08;查询&#xff09;方式&…

如何保证缓存和 MySQL 的双写一致 ?

1. 如何保证缓存和 MySQL 的双写一致 &#xff1f; 什么叫做如何保证缓存和 MySQL 双写一致&#xff0c;这个问题就是指当应用程序执行写&#xff08;增删改&#xff09;操作时&#xff0c;如何保证 Redis 和 MySQL 的数据一致性。 当用户发送请求时&#xff0c;程序的执行流程…

深眸科技创新赋能视觉应用产品,以AI+机器视觉解决行业应用难题

随着工业4.0时代的加速到来&#xff0c;我国工业领域对于机器视觉技术引导的工业自动化和智能化需求持续上涨&#xff0c;国内机器视觉行业进入快速发展黄金期&#xff0c;但需求广泛出现同时也对机器视觉产品的检测能力提出了更高的要求。 传统机器视觉由人工分析图像特征&am…

threejs特殊几何体(一:文字几何体对象)

threejs中文字几何体通过newTextGeometry&#xff08;&#xff09;生成&#xff0c;它被单独作为一个类存在于threejs中const txtGeo new TextGeometry("threejs", { ...opts, font: font }); 我们先看效果&#xff1a; <template><div></div> &…

Compose - 交互组合项

按钮 Button OutLinedButton带外边框、TextButton只是文字、IconButton只是图标形状。 Button(onClick { }, //点击回调modifier Modifier,enabled true, //启用或禁用interactionSource MutableInteractionSource(),elevation ButtonDefaults.elevatedButtonElevation( /…

大语言模型之六- LLM之企业私有化部署

数据安全是每个公司不得不慎重对待的&#xff0c;为了提高生产力&#xff0c;降本增效又不得不接受新技术带来的工具&#xff0c;私有化部署对于公司还是非常有吸引力的。大语言模型这一工具结合公司的数据可以大大提高公司生产率。 私有化LLM需要处理的问题 企业内私有化LLM…

聊一聊微前端框架的选型和实现 | 业务平台

一、项目背景 目前&#xff0c;我们开发维护的项目主要有 6 个&#xff0c;但是分别对应 PC 和 H5 两个端&#xff1a; 如上图所示&#xff0c;我们 6个项目最开始是一个一个进行开发维护的&#xff0c;但是到后期&#xff0c;这几个项目之间有的部分会有业务逻辑不同&#xff…

攻防世界-Web_php_unserialize

原题 解题思路 注释说了flag存在f14g.php中&#xff0c;但是在wakeup函数中&#xff0c;会把传入的文件名变成index.php。看wp知道&#xff0c;如果被反序列话的字符串其中对应的对象的属性个数发生变化时&#xff0c;会导致反序列化失败而同时使得__wakeup 失效&#xff08;CV…

4.14 HTTPS 中 TLS 和 TCP 能同时握手吗?

目录 实现HTTPS中TLS和TCP同时握手的前提&#xff1a; 什么是TCP Fast Open&#xff1f; TLS v1.3 TCP Fast Open TLSv1.3 HTTPS都是基于TCP传输协议实现的&#xff0c;得先建立完可靠得TCP连接才能做TLS握手的事情。 实现HTTPS中TLS和TCP同时握手的前提&#xff1a; 1、…

【CP2K学习】-在Ubuntu上安装CP2K的全过程(包括gcc,gfortran,MKL等配置)

在Ubuntu中安装CP2K CP2K的安装检查系统是否安装gcc,gfortranMKL数学库的安装CP2K安装包下载CP2K的编译CP2K的测试ssmp版本测试popt版本测试 CP2K是第一性原理计算程序中发展迅速的程序之一&#xff0c;因其开源性、速度性等优点&#xff0c;是广大计算化学研究者的选择。 本文…

Git企业开发控制理论和实操-从入门到深入(三)|分支管理

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

原生web实现不固定列数的表格、随机列、document、querySelector、forEach、hasOwnProperty、call、includes

文章目录 效果图公共样式第一种解决方案(不推荐)第二种解决方案(强烈推荐) 效果图 公共样式 .d_f {display: flex; }.flex_1 {flex: 1; }.jc_sb {justify-content: space-between; }.ai_c {align-items: center; }.bc_ccc {background-color: #cccccc; }/* ------------paddin…

Ribbon:listOfServers ,${variableName:defaultValue}

解释&#xff1a; 配置了address的地址,请求会走address&#xff0c;也就是http://127.0.0.1:8081&#xff0c;通常用户与别的后端服务进行联调设置为其本地服务的ip。 如果address的地址被注释掉&#xff0c;如下面所示&#xff0c;类似这样的占位符${variableName:defaultVa…

Kafka学习笔记

目录 常见术语如何解决数据重复和数据乱序幂等性幂等性的缺陷事务事务原子性事务原理流程图 如何解决数据积压解决方法 Kafka的高水位&#xff08;HW&#xff09;和Leader Epoch副本同步机制解析Leader Epoch是如何解决消息丢失和消息不一致的问题的 常见术语 Kafka的三层消息…

Web安全测试(三):SQL注入漏洞

一、前言 结合内部资料&#xff0c;与安全渗透部门同事合力整理的安全测试相关资料教程&#xff0c;全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试&#xff0c;覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬&#xff01; 全部…

简述docker映射(Mapping)和挂载(Mounting)

映射的概念&#xff1a; 将容器内的端口映射到主机的端口上&#xff0c;这样就可以通过主机的网络接口与容器内部进行通信。主机上对应端口的请求会被转发到容器内部&#xff0c;从而实现对容器内部程序的通信访问&#xff08;注意&#xff01;这里提到的容器内部的端口并不一定…

arcgis的MapServer服务查询出来的结果geometry坐标点带*的问题

不知道小伙伴使用arcgis server服务做查询的时候&#xff0c;有没有遇到下面的问题 原因是查询结果中出现*字符 这个问题一直困扰了我很久&#xff1a;因为从数据库查询的坐标点是没有问题的。 一开始有同事遇到过&#xff0c;说重新插入下就好了&#xff0c;有时候确实能解决…

Qt 获取文件图标、类型 QFileIconProvider

Qt中获取系统图标、类型是通过QFileIconProvider来实现的&#xff0c;具体如下&#xff1a; 一、Qt获取系统文件图标1、获取文件夹图标QFileIconProvider icon_provider;QIcon icon icon_provider.icon(QFileIconProvider::Folder);2、获取指定文件图标QFileInfo file_info(n…

最详细jdk安装以及配置环境(保姆级教程)

一.进入oracle官网&#xff0c;下载jdk oracle官网&#xff1a;Oracle | Cloud Applications and Cloud Platform ps:不同的浏览器&#xff0c;可能进入oracle官网&#xff0c;会只显示部分内容&#xff0c;所以建议使用google Chrome浏览器 在下载之前&#xff0c;首先需要去…

UML四大关系

文章目录 引言UML的定义和作用UML四大关系的重要性和应用场景关联关系继承关系聚合关系组合关系 UML四大关系的进一步讨论UML四大关系的实际应用软件开发中的应用其他领域的应用 总结 引言 在软件开发中&#xff0c;统一建模语言&#xff08;Unified Modeling Language&#x…