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

news2024/11/23 15:50:41

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');

写在最后

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP性能机制

延迟应答 为什么有延迟应答 发送方如果长时间没有收到ACK应答&#xff0c;则会触发超时重传机制&#xff0c;重新发送数据包。但如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小&#xff0c;发送方一次只能发少量数据&#xff0c;效率较低。 举个例子理解一…

高性能服务器NodejsExpress快速构建Web

目录 1 Express基本使用1.1 托管静态资源 2 Express 路由3 Express 中间件3.1 全局中间件3.2 局部中间件3.3 中间件分类 4 CORS 跨域资源共享4.1 cors 中间件解决跨域4.2 CORS4.3 CORS 常见响应头4.4 CORS 请求分类 1 Express基本使用 官网传送门(opens new window) 基于 Node.…

简单计算器的实现(含转移表实现)

文章目录 计算器的一般实现使⽤函数指针数组的实现&#xff08;转移表&#xff09; 计算器的一般实现 通过函数的调用&#xff0c;实现加减乘除 # define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int Add(int x, int y) {return x y; }int Sub(int x, int y) {retur…

计算机中找不到msvcp140.dll丢失怎么弄?程序员都是这样解决的

msvcp140.dll是Microsoft Visual C 2015 Redistributable Package的一部分&#xff0c;它是一个运行时库文件&#xff0c;提供了许多C标准库函数的实现。如果缺少这个文件&#xff0c;可能会导致一些程序无法正常运行&#xff0c;例如一些游戏、应用程序等。为了解决这个问题&a…

【Unity】如何制作小地图

我们为什么要制作小地图呢&#xff1f; 原因很简单&#xff1a; 导航和定位&#xff1a;小地图可以显示玩家当前位置以及周围环境的概览。这使得玩家能够更好地导航和定位自己在游戏中的位置&#xff0c;找到目标或避开障碍物。场景了解&#xff1a;通过小地图&#xff0c;玩…

Presto 介绍

目录 Presto 介绍Presto 架构Coordinator协调器节点发现服务&#xff08;discovery service&#xff09;工作节点基于连接器的架构查询执行模型查询优化JVM 配置Presto Web UIPresto 内存管理Presto 任务并发性Presto 工作节点调度Presto 网络数据交换Presto 资源组 Presto 介绍…

公司电脑文件数据加密系统

电脑文件透明加密软件是一种可以对文件进行加密的软件&#xff0c;这类软件能够在用户无感知的情况下对文件进行加密&#xff0c;使得文件的安全性得到保障。 PC访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 智能透明加…

Java抽象类详解

抽象类 抽象类的概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。比如&#xff1a; 说…

C语言刷题(13)

第一题 第二题 第三题 第四题 第五题 第六题 第七题 注意 1.nsqrt(n)&#xff0c;sqrt本身不会将n开根 2.初始化已经令sumn了&#xff0c;故相加的个数为m-1次

机器学习在大数据分析中的应用

文章目录 机器学习在大数据分析中的原理机器学习在大数据分析中的应用示例预测销售趋势客户细分和个性化营销 机器学习在大数据分析中的前景和挑战前景挑战 总结 &#x1f389;欢迎来到AIGC人工智能专栏~探索机器学习在大数据分析中的应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…

Java面试题(2) 两个线程,交替打印100次A和B

目录 一、实现方式一实现思路&#xff1a;代码实现&#xff1a;执行结果&#xff1a; 二、实现方式二实现思路&#xff1a;代码实现&#xff1a;执行结果&#xff1a; 三、思考 一、实现方式一 实现思路&#xff1a; 代码实现&#xff1a; ThreadTest.java package com.demo…

Elasticsearch算分优化方案之rescore_query

简介 今天来说一说Elasticsearch 的重新评分&#xff0c;即在检索出来一次结果的基础上在进行检索提升数据排序效果&#xff0c;但是仅对查询或者post_filter阶段返回的前多少条进行二次查询。在每个分片上进行二次检索的文档数量时可以通过window_size 控制的&#xff0c;该参…

PHP8中自定义函数-PHP8知识详解

1、什么是函数&#xff1f; 函数&#xff0c;在英文中的单词是function&#xff0c;这个词语有功能的意思&#xff0c;也就是说&#xff0c;使用函数就是在编程的过程中&#xff0c;实现一定的功能。即函数就是实现一定功能的一段特定代码。 在前面的教学中&#xff0c;我们已…

甜椒叶病害识别(Python代码,pyTorch框架,深度卷积网络模型,很容易替换为其它模型,带有GUI识别界面)

代码运行要求&#xff1a;Torch>1.13.1即可 1.数据集介绍&#xff1a; 第一个文件夹是细菌斑叶&#xff08;3460张&#xff09; 第二个文件夹是 健康&#xff08;4024张&#xff09; 2.整个文件夹 data文件夹存放的是未被划分训练集和测试集的原始照片 picture文件夹存放的…

系统架构:数据库

文章目录 数据库设计关系代数规范化理论求候选键特殊函数依赖Armstrong公理 数据库设计 步骤产出说明1.根据数据要求和处理要求进行需求分析数据流图、数据字典、需求说明书等分析数据流向、数据详细含义等&#xff0c;分析具体需求2.对现实世界进行抽象&#xff0c;进行概念结…

DBeaver 23.1.4发布

导读DBeaver 23.1.4发布,修复和添加了不少功能。 SQL 编辑器 修复了表别名生成问题&#xff08;重复别名问题&#xff09;自动建议现在尊重 “空行是查询分隔符 “选项在某些情况下大大提高了自动建议计算性能修复了别名补全问题&#xff08;冗余空格问题&#xff09;修复了无…

超参数的选择-手工搜索、网格搜索、随机搜索、贝叶斯搜索

超参数&#xff1a;超参数是在建立模型时用于控制算法行为的参数。这些参数不能从常规训练过程中获得。在对模型进行训练之前&#xff0c;需要对它们进行赋值。 超参数与模型的参数不同。模型参数(如神经网络的权重)是在训练过程中学习得到的,而超参数(如学习率、隐藏层数量)需…

2023-8-22 模拟队列

题目链接&#xff1a;模拟队列 #include <iostream>using namespace std;const int N 100010;int m; int q[N], hh, tt -1;int main() {cin >> m;while(m--){string op;int x;cin >> op;if(op "push"){cin >> x;q[tt] x;}else if(op …

原型链继承的缺点

记录一下原型链继承的缺点&#xff1a; 第一点是实例共享属性的问题&#xff0c;如果实例改变了继承的引用类型属性&#xff0c;那么其他实例属性也会被改变 第二点是实例对象的 constructor 属性不正确。child 的 constructor 属性并未指向它自己的构造函数 继承代码如下 …

【水平垂直居中布局】CSS实现水平垂直居中的5种方法(附源码)

文章目录 写在前面涉及知识点1、子绝对定位父相对定位&#xff0c;子节点设置位移实现1.1效果1.2实现源码 2、子绝对定位父相对定位&#xff0c;子节点设置上下边距2.1 效果2.2 实现源码 3、利用flex布局实现3.1 效果3.2 实现源码 4、利用行高和文本水平居中设置4.1 效果4.2 实…