拓端tecdat|matlab用高斯曲線擬合模型分析新冠病毒COVID-19數(shù)據(jù)
原文鏈接:http://tecdat.cn/?p=19211?
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
隨著新型冠狀病毒COVID-19的威脅遍及世界,我們生活在一個(gè)日益擔(dān)憂的時(shí)代,本文用matlab分析COVID-19數(shù)據(jù)集。
COVID-19數(shù)據(jù)源
我們檢查解壓縮的文件。包含:
data.csv -2020年各省/州的全球病例每日水平數(shù)據(jù)
confirmed.csv-確診病例的時(shí)間序列數(shù)據(jù)
deaths.csv-死亡人數(shù)的時(shí)間序列數(shù)據(jù)
recovered.csv-康復(fù)人數(shù)的時(shí)間序列數(shù)據(jù)
地圖上可視化
我們?cè)诘貓D上可視化已確診病例的數(shù)量。我們首先加載緯度和經(jīng)度變量。
opts = detectImportOptions(filenames(4), "TextType","string");
數(shù)據(jù)集包含“省/州”變量,但我們要在“國(guó)家/地區(qū)”等級(jí)匯總數(shù)據(jù)。在此之前,我們需要稍微整理一下數(shù)據(jù)。
times_conf.("Country/Region")(times_conf.("Country/Region") == "China") = "Mainland China";
times_conf.("Country/Region")(times_conf.("Country/Region") == "Czechia") = "Czech Republic";
現(xiàn)在,我們可以使用??groupsummary? 將已確認(rèn)的案例相加并平均經(jīng)緯度來(lái)按國(guó)家/地區(qū)匯總數(shù)據(jù)。
country = groupsummary(times_conf,"Country/Region",{'sum','mean'},vars(3:end));
輸出中包含不必要的列,例如緯度和經(jīng)度的總和。我們刪除這些變量。
vars = regexprep(vars,"^(sum_)(?=L(a|o))","remove_");
vars = regexprep(vars,"^(mean_)(?=[0-9])","remove_");
times_conf_exChina = times_conf_country(times_conf_country.("Country/Region") ~= "Mainland China",:);
讓我們使用??geobubble??可視化數(shù)據(jù)集中的第一個(gè)和最后一個(gè)日期數(shù)據(jù)。
for ii = [4, length(vars)]
times_conf_exChina.Category = categorical(repmat("<100",height(times_conf_exChina),1));
times_conf_exChina.Category(table2array(times_conf_exChina(:,ii)) >= 100) = ">=100";
gb.LegendVisible = "off";

我們可以看到它最初只影響了大陸周圍的國(guó)家/地區(qū)。值得注意的是,我們?cè)缭?020年1月22日就已經(jīng)在美國(guó)確認(rèn)了病例。
美國(guó)確診病例
進(jìn)入美國(guó)的省/州級(jí)別。
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, max(times_conf_us.(vars{length(vars)}))];
gb.MapCenter = [44.9669 -113.6201];
gb.ZoomLevel = 1.7678;

可以看到它始于華盛頓,并在加利福尼亞和紐約爆發(fā)了大規(guī)模疫情。
按確診病例排名國(guó)家/地區(qū)
讓我們使用covid_19_data.csv比較按國(guó)家/地區(qū)確認(rèn)的病例數(shù)。日期時(shí)間格式中存在不一致之處,因此我們一開(kāi)始會(huì)將其視為文本。
opts = detectImportOptions(filenames(3), "TextType","string","DatetimeType","text");
清理日期時(shí)間格式。
Data.nDate = regexprep(Data.Date,"\/20$","/2020");
Data.Date = datetime(Data.Date);
我們還需要標(biāo)準(zhǔn)化“國(guó)家/地區(qū)”中的值。
Country_Region(Country_Region == "Iran (Islamic Republic of)") = "Iran";
數(shù)據(jù)集包含省/州變量。讓我們?cè)凇皣?guó)家/地區(qū)”級(jí)別匯總數(shù)據(jù)。
countryData = groupsummary(provData,{'ObservationDate','Country_Region'}, ...
"sum",{'Confirmed','Deaths','Recovered'});
countryData包含每日累積數(shù)據(jù)。我們只需要最新的數(shù)字。
確認(rèn)病例按國(guó)家/地區(qū)的增長(zhǎng)
我們還可以檢查這些國(guó)家中病例的增長(zhǎng)速度。
figure
plot(countryData.ObservationDate(countryData.Country_Region == labelsK(2)), ...
hold on
for ii = 3:length(labelsK)
plot(countryData.ObservationDate(countryData.Country_Region == labelsK(ii)), ...

盡管韓國(guó)顯示出增長(zhǎng)放緩的跡象,但它在其他地方正在加速發(fā)展。
按國(guó)家/地區(qū)劃分的新病例增長(zhǎng)
我們可以通過(guò)減去兩個(gè)日期之間已確認(rèn)病例的累計(jì)數(shù)量來(lái)計(jì)算新病例的數(shù)量。
for ii = 1:length(labelsK)
country = provData(provData.Country_Region == labelsK(ii),:);
country = groupsummary(country,{'ObservationDate','Country_Region'}, ...
if labelsK(ii) ~= "Others"
nexttile
您可以看到,中國(guó)和韓國(guó)沒(méi)有很多新病例??梢?jiàn),已經(jīng)遏制住了疫情。
中國(guó)
由于中國(guó)的感染速度正在放緩,我們來(lái)看看仍有多少活躍病例。您可以通過(guò)從確診病例中減去恢復(fù)病例和死亡來(lái)計(jì)算活躍病例。
for ii = 1:length(labelsK)
by_country{ii}.Active = by_country{ii}.Confirmed - by_country{ii}.Deaths -
figure

擬合曲線
有效案例的數(shù)量正在下降,曲線看起來(lái)大致為高斯曲線。我們可以擬合高斯模型并預(yù)測(cè)活動(dòng)案例何時(shí)為零嗎?
我使用??曲線擬合工具箱??進(jìn)行高斯擬合。
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
讓我們通過(guò)增加20天來(lái)將輸出預(yù)測(cè)。
現(xiàn)在我們對(duì)結(jié)果進(jìn)行繪制。
figure
area(ObservationDate,by_country{1}.Active)
hold on
plot(xdates,yhat,"lineWidth",2)

韓國(guó)
讓我們來(lái)查看韓國(guó)的活躍病例,恢復(fù)案例和死亡人數(shù)。

使用高斯模型無(wú)法獲得任何合適的結(jié)果。
?

最受歡迎的見(jiàn)解
1.在python中使用lstm和pytorch進(jìn)行時(shí)間序列預(yù)測(cè)
2.python中利用長(zhǎng)短期記憶模型lstm進(jìn)行時(shí)間序列預(yù)測(cè)分析
3.使用r語(yǔ)言進(jìn)行時(shí)間序列(arima,指數(shù)平滑)分析
4.r語(yǔ)言多元copula-garch-模型時(shí)間序列預(yù)測(cè)
5.r語(yǔ)言copulas和金融時(shí)間序列案例
6.使用r語(yǔ)言隨機(jī)波動(dòng)模型sv處理時(shí)間序列中的隨機(jī)波動(dòng)
7.r語(yǔ)言時(shí)間序列tar閾值自回歸模型
8.r語(yǔ)言k-shape時(shí)間序列聚類方法對(duì)股票價(jià)格時(shí)間序列聚類
9.python3用arima模型進(jìn)行時(shí)間序列預(yù)測(cè)