matlab用高斯曲线拟合模型分析疫情数据
原文链接:http://tecdat.cn/?p=19211
本文用matlab分析疫情数据集。
数据源
我们检查解压缩的文件。包含:
data.csv -2020年全球病例每日水平数据
confirmed.csv-确诊病例的时间序列数据
地图上可视化
我们在地图上可视化已确诊病例的数量。我们首先加载纬度和经度变量。
opts = detectImportOptions(filenames(4), "TextType","string");
在此之前,我们需要稍微整理一下数据。现在,我们可以使用 groupsummary 将已确认的案例相加并平均经纬度来按地区汇总数据。
country = groupsummary(times_conf,"Country/Region",{'sum','mean'},vars(3:end));
输出中包含不必要的列,例如纬度和经度的总和。我们删除这些变量。
让我们使用 geobubble 可视化数据集中的第一个和最后一个日期数据。
for ii = [4, length(vars)]
times_conf_exChina.Category = categorical(repmat("<100",hmes_c
美国确诊病例
figure
t = tiledlayout("flow");
for ii = [5, length(vars)]
gb.BubbleColorList = [1,0,1;1,0,0];
gb.LegendVisible = "off";
gb.Title = "As of " + vars(ii);
gb.SizeLimits = [0,
可以看到它始于华盛顿,并在加利福尼亚和纽约爆发了大规模疫情。
按确诊病例排名地区
让我们使用covid_19比较按地区确认的病例数。日期时间格式中存在不一致之处,因此我们一开始会将其视为文本。
opts = detectImportOptions(filenames(3), "TextType","string","DatetimeType","text");
清理日期时间格式。
Data.nDate = regexprep(Data.Date,"\/20$","/2020");
Data.Date = datetime(Data.Date);
我们还需要标准化“地区”中的值。
Country_Region(Country_Region == "Iran (Islamic Republic of)") = "Iran";
让我们在“地区”级别汇总数据。
countryData = groupsummary(provData,{'ObservationDate','Country_Region'}, ...
"sum",{'Confirmed','Deaths','Recovered'});
countryData包含每日累积数据。我们只需要最新的数字。
按地区的增长
我们还可以检查这些地区病例的增长速度。
figure
plot(countryData.ObservationDate(countryData.Country_Region == labelsK(2)), ...
hold on
for ii = 3:length(labelsK)
plot(countryData.ObservationDate(countryData.Country_Region == labelsK(ii)), ...
尽管韩国显示出增长放缓的迹象,但它在其他地方正在加速发展。
按地区划分的新病例增长
我们可以通过减去两个日期之间已确认病例的累计数量来计算新病例的数量。
for ii = 1:length(labelsK)
country = provData(provData.Country_Region == labelsK(ii),:);
country = groupsummary(country,{'ObservationDate','Country_Region'}, ...
if labelsK(ii) ~= "Others"
nexttile
您可以看到,已经遏制住了疫情。
计算活跃病例。
for ii = 1:length(labelsK)
by_country{ii}.Active = by_country{ii}.Confirmed - by_country{ii}.Deaths -
figure
拟合曲线
有效案例的数量正在下降,曲线看起来大致为高斯曲线。我们可以拟合高斯模型并预测活动案例何时为零吗?
我使用 曲线拟合工具箱 进行高斯拟合。
ft = fittype("gauss1");
[fobj, gof] = fit(x,y,ft,opts);
gof
gof =
struct with fields:
sse: 4.4145e+08
rsquare: 0.9743
dfe: 47
adjrsquare: 0.9732
rmse: 3.0647e+03
让我们通过增加20天来将输出预测。
现在我们对结果进行绘制。
figure
area(ObservationDate,by_country{1}.Active)
hold on
plot(xdates,yhat,"lineWidth",2)
韩国
让我们来查看病例人数。
使用高斯模型无法获得合适的结果。
最受欢迎的见解
赞 (0)