これまでの記事で日最高気温と平均水蒸気圧,各都道府県65歳以上人口および月から熱中症の搬送人員数を予測する回帰式の回帰係数を推定してきた.
今回はその回帰式を元に実際のデータと比較してみたい.対象は2019年の47都道府県とする.
クエリ
下記クエリを発行してSQL Serverからデータを抽出する.結果をEXCELにコピペしてテーブル化する.
USE HeatStrokeDB; GO SELECT Year(H.日付) AS Year , MONTH(H.日付) AS Month , H.日付 AS Date , P.都道府県コード AS PrefCode , P.都道府県 AS Pref , T.日最高気温 AS Temp , V.日平均蒸気圧 AS Vapor , P.[15歳未満人口] AS Pop14 , P.[15~64歳人口] AS Pop14_65 , P.[65歳以上人口] AS Pop65 , H.[搬送人員(計)] AS Num , CAST(EXP(-21.43 + 0.2858 * T.日最高気温 + 0.08022 * V.日平均蒸気圧 - 0.3035 * MONTH(H.日付) + LOG(P.[15歳未満人口] + P.[15~64歳人口] + P.[65歳以上人口])) AS int) AS MODEL1 , CAST(EXP(-20.50 + 0.2850 * T.日最高気温 + 0.08056 * V.日平均蒸気圧 - 0.2976 * MONTH(H.日付) + LOG(P.[15歳未満人口] + P.[65歳以上人口])) AS int) AS MODEL2 , CAST(EXP(-20.11 + 0.2844 * T.日最高気温 + 0.08155 * V.日平均蒸気圧 - 0.2957 * MONTH(H.日付) + LOG(P.[65歳以上人口])) AS int) AS MODEL3 FROM dbo.T_HeatStroke AS H INNER JOIN dbo.T_MaxTemperature AS T ON H.都道府県コード = T.都道府県コード AND H.日付 = T.年月日 INNER JOIN dbo.T_VaporPressure AS V ON H.都道府県コード = V.都道府県コード AND H.日付 = V.年月日 INNER JOIN dbo.T_Population AS P ON H.都道府県コード = P.都道府県コード AND YEAR(H.日付) = P.調査年 ORDER BY H.都道府県コード, H.日付
VBAでグラフ作成
下記コードを実行する.
Option Explicit
Sub makechart()
Dim mySh1 As Worksheet
Dim mySh2 As Worksheet
Set mySh1 = Worksheets("Sheet1")
Set mySh2 = Worksheets.Add
Dim myLstObj As ListObject
Set myLstObj = mySh1.ListObjects(1)
Dim myRng1 As Range
Dim i As Long
Dim Cht As Chart
Dim j As Long
Dim myXValue() As Date
Dim myValue1() As Integer
Dim myValue2() As Integer
Dim SeriesM As Series
Dim SeriesR As Series
Dim myPref As String
With mySh2
For i = 1 To 47
Set Cht = .Shapes.AddChart2(XlChartType:=xlColumnClustered, _
Left:=200 * ((i - 1) Mod 6), _
Top:=200 * ((i - 1) \ 6), _
Width:=200, _
Height:=200).Chart
With myLstObj
.Range.AutoFilter field:=1, Criteria1:="2019"
.Range.AutoFilter field:=4, Criteria1:=i
Set myRng1 = Intersect(.DataBodyRange, _
.Range.SpecialCells(xlCellTypeVisible))
myPref = myRng1.Cells(1, 5)
For j = 0 To myRng1.Rows.Count - 1
ReDim Preserve myXValue(j)
ReDim Preserve myValue1(j)
ReDim Preserve myValue2(j)
myXValue(j) = myRng1.Cells(j + 1, 3)
myValue1(j) = myRng1.Cells(j + 1, 14)
myValue2(j) = myRng1.Cells(j + 1, 11)
Next j
Set SeriesM = Cht.SeriesCollection.NewSeries
With SeriesM
.Name = "Model"
.XValues = myXValue
.Values = myValue1
.ChartType = xlLine
.Format.Line.Weight = 1#
'.Format.Line.ForeColor.ObjectThemeColor = msoThemeColorAccent2
End With
Set SeriesR = Cht.SeriesCollection.NewSeries
With SeriesR
.Name = "Real"
.XValues = myXValue
.Values = myValue2
.ChartType = xlColumnClustered
End With
.Range.AutoFilter field:=4
.Range.AutoFilter field:=1
End With
With Cht
.HasTitle = True
.ChartTitle.Caption = myPref
.ChartGroups(1).GapWidth = 0
End With
Next i
End With
End Sub
結果
下図に示す.青の折れ線グラフが予測データ,橙の棒グラフが実際のデータである.予測がうまく行っている県もあれば過小推定,過大推定している県もある.回帰式に取り込めなかった地域差が関係していると思いたい.

まとめ
最高気温と平均水蒸気圧,都道府県人口および月から熱中症搬送人員数を予測し実際の搬送人員数と比較した.


“2019年の熱中症搬送人員数の予測と実際をEXCELの組み合わせグラフで描く” への1件の返信