2021美赛C题思路

目录

  • 0引言
  • 1、赛题要求
    • 1.1翻译后的要求:
    • 1.2赛题小结
  • 2、问题一模型思路
    • 2.1数据读入合并
    • 2.2可视化
  • 2.2回归模型
  • 2.3时间序列模型
    • 2.3.1 重塑数据
    • 2.3.2 选择模型
  • 2.4生长季模型
  • 本文涉及代码
    • 第一问代码
  • 写在最后的建议

0引言

看了一天多的美赛C题,打算这两天从编程手的角度更新一些美赛的思路以及代码资料(R语言)。
更新中… …
注意:本文的代码及思路仅供参考,切勿照抄,比赛期间勿私聊 … … 。

1、赛题要求

1.1翻译后的要求:

– 1、讨论这种害虫随着时间的推移而传播是否可以被预测,传播的特点是什么。
– 2、很多报道的目击事件都将其他黄蜂误认为是野黄蜂。使用提供的数据集文件和文件提供的图像视频文件来创建模型,并分析和预测错误分类的概率。
– 3、使用建立的模型讨论您的分类标准如何导致优先调查最有可能是阳性(野黄蜂)的目击报告。
– 4、随着时间的推移如何使用模型更新出新报告,预测发生的频率。
– 5、使用你的模型,什么时候可以说明华盛顿州已经消灭了这种害虫?

1.2赛题小结

前两问是本次问题建模的核心。分别是:
1、根据时间和空间的经纬度关系分析出该黄蜂的传播特点以及生存特性
2、结合给出的每次目击报告的文件信息:图像数据、文本评论数据作为协变量数据、识别结果:阳性阴性作为相应遍量建立可预测的回归模型
后面三问都是对前两问中的一个模型应用以及模型稳健分析

2、问题一模型思路

2.1数据读入合并

为了更好了构建模型,分析数据先读取数据进行预处理和可视化。
两个Excel数据可去链接免费下载:2021美赛excel数据
读入数据,分析字段

> str(GlobalID)
Classes ‘data.table’ and 'data.frame':  3305 obs. of  3 variables:
 $ FileName: chr  "ATT1_DSCN9647.jpg" "ATT10_67EAF187-B59C-4F5F-BAAC-9F76E06A96D6.jpg" "ATT100_inbound241937372812029587.jpg" "ATT1000_A5A50BAB-A6EF-4576-A1F8-A07862AADE3A.jpg" ...
 $ GlobalID: chr  "{5AC8034E-5B46-4294-85F0-5B13117EBEFE}" "{C4F44511-EA53-4FCF-9422-E1C57703720D}" "{43506835-18B8-46B2-A2CB-586AF9C8ECE6}" "{E0AE2F2A-38A5-463C-97B5-9F84A477F9AE}" ...
 $ FileType: chr  "image/jpg" "image/jpg" "image/jpg" "image/jpg" ...
 - attr(*, ".internal.selfref")=<externalptr> 
> str(DataSet)
Classes ‘data.table’ and 'data.frame':  4440 obs. of  8 variables:
 $ GlobalID       : chr  "{7D0E73B4-EB54-4CA5-B6B0-F36CC41EBFBC}" "{55C3DF05-0FC3-4737-98CE-2AECFA6C21DB}" "{29CAD9B0-977C-4947-BD62-5CA381CEEA33}" "{DFA7F66D-8DCB-43D7-93EC-3F2E42602600}" ...
 $ Detection Date : POSIXct, format: "2020-01-21" "2020-01-22" ...
 $ Notes          : chr  "Definitive orange color....1.5-1.75\" long...very large body....this is the same report I turned in last night,"| __truncated__ "Looked like a yellow jacket on steroids was over an inch long I stepped on it to kill my wife scooped up with s"| __truncated__ "Big and nasty" "I killed this hornet with a bug zapper it took about 30 to 40 mins to kill every time I hit it it came back wit"| __truncated__ ...
 $ Lab Status     : chr  "Unverified" "Unverified" "Unverified" "Unverified" ...
 $ Lab Comments   : chr  "If you see it again, please submit a picture with your next reported sighting." NA NA NA ...
 $ Submission Date: POSIXct, format: "2020-07-07" "2020-05-05" ...
 $ Latitude       : num  47.4 47.4 47.5 48.1 45.6 ...
 $ Longitude      : num  -119 -122 -122 -122 -123 ...
 - attr(*, ".internal.selfref")=<externalptr> 

为了后面的容易处理,用DataSet做主表,对GlobalID做左连接合成一个表。
并提取年份和月份。记为变量y和m
维度:5618行13列

> str(r)
Classes ‘data.table’ and 'data.frame':  5618 obs. of  13 variables:
 $ FileName      : chr  NA NA NA NA ...
 $ GlobalID      : chr  "{7D0E73B4-EB54-4CA5-B6B0-F36CC41EBFBC}" "{55C3DF05-0FC3-4737-98CE-2AECFA6C21DB}" "{29CAD9B0-977C-4947-BD62-5CA381CEEA33}" "{DFA7F66D-8DCB-43D7-93EC-3F2E42602600}" ...
 $ FileType      : chr  NA NA NA NA ...
 $ DetectionDate : POSIXct, format: "2020-01-21" "2020-01-22" ...
 $ Notes         : chr  "Definitive orange color....1.5-1.75\" long...very large body....this is the same report I turned in last night,"| __truncated__ "Looked like a yellow jacket on steroids was over an inch long I stepped on it to kill my wife scooped up with s"| __truncated__ "Big and nasty" "I killed this hornet with a bug zapper it took about 30 to 40 mins to kill every time I hit it it came back wit"| __truncated__ ...
 $ LabStatus     : chr  "Unverified" "Unverified" "Unverified" "Unverified" ...
 $ LabComments   : chr  "If you see it again, please submit a picture with your next reported sighting." NA NA NA ...
 $ SubmissionDate: POSIXct, format: "2020-07-07" "2020-05-05" ...
 $ Latitude      : num  47.4 47.4 47.5 48.1 45.6 ...
 $ Longitude     : num  -119 -122 -122 -122 -123 ...
 $ y             : num  2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
 $ m             : num  1 1 1 1 1 1 1 1 1 1 ...
 $ m             : num  1 1 1 1 1 1 1 1 1 1 ...
 - attr(*, ".internal.selfref")=<externalptr> 

2.2可视化

赛题给了我们经纬度,先看一下具体的位置在哪里:
2021美赛C题思路_第1张图片
我找到了地图当底盘,画了散点图。左边是美国所有州的地图,我们看到只有左上角的华盛顿州有记录。所以我们调整图片的范围得到右图。但是这样画到一起看不出任何的信息,通过R语言glpot2分面的技术得到下面的图。
2021美赛C题思路_第2张图片
假设点不重叠,从点的数目上可以看出黄蜂从2017年开始有苗头2018-2019增长期,2020年份数目骤增。接下来我们还想知道该物种是否具有季性。故加下来以2020年为例分月份我们画出了下面两幅图形。
2021美赛C题思路_第3张图片
2021美赛C题思路_第4张图片
上面那一幅图的是2020年不同月份发现的黄蜂报告数目,可以看出报告多集中在夏季前后。下面的幅图是每个月份做出的具体统计与可视化。有了这些关于黄蜂的数据特点我们下面选回归模型时间序列的分解模型生长季模型来量化黄蜂生长的时间特点。

2.2回归模型

统计每年的报告数据做回归模型:
2021美赛C题思路_第5张图片
我们看到这个模型的效果不是很好无论是R2还是拟合曲线,还是曲线的方差,原因就在于这个数据在2020年有一个突增。

2.3时间序列模型

在时间序列模型中我们选择从2010年到2020年11年的时间,并细化到月份。

2.3.1 重塑数据

> Ts
      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2010    0    1    0    1    0    0    0    0    1    0    0    0
2011    1    0    0    1    1    0    1    2    1    0    0    0
2012    0    0    0    0    0    2    2    1    0    0    0    0
2013    0    0    0    0    0    0    2    2    0    0    0    0
2014    0    0    0    1    0    0    0    0    0    0    0    0
2015    0    0    0    2    1    1    1    2    0    0    0    0
2016    0    0    0    0    0    1    3    2    0    0    0    0
2017    3    0    0    0    0    2    0    0    1    0    0    0
2018    0    1    0    1    5    7    9    3    1    0    0    0
2019    2    0    1    1   11   18   39   50   26    7    3    2
2020   12    7   25  205  649  435 1296 1719  811  227    3    1

从统计数据中我们可以看到一定的季节性,和周期性。下面我们通过建模进行提取关键信息。

2.3.2 选择模型

2021美赛C题思路_第6张图片
qq图告诉我们这幅图不是纯随机的图也不是正态图。从时序图中我们看到该序列具有明显趋势,故不平稳。从acf、pacf中可以看出,虽然有截尾特征,但是他的不满足平稳时间序列的前提,所以不能够建立ARMA模型。可以考虑ARIMA以及SARIMA,就这个题目而言SARIMA比较贴切。
这里我们用加法模型来拟合数据,因为乘法模型对数据突变的数据处理总是不好。
2021美赛C题思路_第7张图片
季节指数图:
2021美赛C题思路_第8张图片
上图是1-12月份的季节指数,可以看出5月份季节指数最高。3月份达到低谷。
最后我们给出分解模型的三个组成部分:
2021美赛C题思路_第9张图片
第一行是原始的时间序列图,第二行是长期的趋势,第三行是模型的周期性,第四行是模型的随机因素。如果想具体到几月份达到峰值,周期长度是多少,骤变结点是哪一个,可以直接处理数据的数据,篇幅原因就不把每个模型的数据输出了。
当然我个人不是和喜欢这个图的风格,想改的下面的代码可以实现。

function (x, ...) 
{
     
    xx <- x$x
    if (is.null(xx)) 
        xx <- with(x, if (type == "additive") 
            random + trend + seasonal
        else random * trend * seasonal)
    plot(cbind(observed = xx, trend = x$trend, seasonal = x$seasonal, 
        random = x$random), main = paste("Decomposition of", 
        x$type, "time series"), ...)
}

2.4生长季模型

生长季模型是一类模型常用来处理植被的时空变化的NDVI(生长指数)值。这节通过不同时间节点的报告数,并计算黄蜂的频率指数。建立生长季模型,最终计算出不同年份中黄蜂的快速增长点,快速下降点,以及出现的时间长度。
本文建模的代码方法参考的包phenofit,给出他的代码示例网站链接。
2021美赛C题思路_第10张图片
左图是20210-2020的昆虫的报告情况。右图是2020年的的一个情况。(AG方法的例子)

> myfit(df[241:264,])  # 2020 
     flag     origin TRS2.sos TRS2.eos TRS5.sos TRS5.eos TRS6.sos TRS6.eos DER.sos DER.pop
1: 2020_1 2020-01-01      124      276      160      260      170      256     171     229
   DER.eos  UD  SD  DD  RD Greenup Maturity Senescence Dormancy
1:     255 113 209 238 282      94      214        290       NA

可以看到TRS2方法的生长季(sos: start of season)节的开始是这年的第124天,结束(eos)是这年的276天,持续存在了153天。
模型的参数和形式,这是对称的模型曲线。

$fFIT
$fFIT$AG
 formula:       mn + (mx - mn) * exp(-((t0 - t) * rsp)^a3)
  formula:      mn + (mx - mn) * exp(-((t - t0) * rau)^a5)
pars:
             t0         mn       mx        rsp a3        rau a5
nlminb 7533.309 0.03075173 5.477063 0.01217213  2 0.02732946  2

本文涉及代码

每一题目(只更新前两问)在发布完思路后,统一发布合集链接,更新中 … …
会陆续发布思路代码,感兴趣的下面链接自取。

第一问代码

注意:代码在安装包之后可正常运行,不需要改动参数,但是这是R语言的代码,没有R语言基础的同学不推荐购买下载。
第一问代码链接。
2021美赛C题思路_第11张图片

写在最后的建议

比赛期间合理安排作息,注意休息。O奖冲呀!!!

你可能感兴趣的:(数学建模,2021美赛C,图像识别)