ポアソン回帰モデルおよび負の二項分布モデルを用いて熱中症搬送人員数に対する日最高気温と平均水蒸気圧の回帰係数を推定する

 以前,熱中症搬送人員数は日最高気温と相関関係があり,片対数グラフで直線になると述べた.今回はポアソン回帰モデルおよび負の二項分布モデルで熱中症搬送人員数に対する日最高気温と平均水蒸気圧の回帰係数を推定する.

SQL Serverからデータを抽出する

 下記クエリを実行してデータベースHeatStrokeDBからデータを抽出し,結果をExcelにコピペして保存する.ファイル名をHeatStroke.xlsxとする.

USE HeatStrokeDB;
GO
SELECT	H.日付	AS Date
	,	H.都道府県コード	AS PrefCode
	,	M.都道府県	AS Pref
	,	M.日最高気温	AS Temp
	,	V.日平均蒸気圧	AS Vapor
	,	H.[搬送人員(計)]	AS HeatStroke
FROM	dbo.T_HeatStroke	AS H
INNER	JOIN	dbo.T_MaxTemperature	AS M
ON	H.都道府県コード=M.都道府県コード
AND	H.日付=M.年月日
INNER	JOIN	dbo.T_VaporPressure	AS V
ON	H.都道府県コード=V.都道府県コード
AND	H.日付=V.年月日
ORDER	BY	PrefCode, Date

ExcelのファイルをRで読み込む

 EnvironmentタブのImport Datasetを押下しFrom Excel…を選択する.

Import DatasetのFrom Excel...
Import DatasetのFrom Excel…

 ユーザーインターフェースでダイアログが開くので,先程保存した目的のファイルを開く.

Choose File
Choose File

 データ型の変更ができる.Date列を日付型に変更し,PrefCode列を文字列型に変更し,Importをクリックする.

Data Previewでデータ型の変更ができる
Data Previewでデータ型の変更ができる

 HeatStrokeという変数にExcelのデータが格納された状態.この変数はデータフレームと呼ばれ,ここからデータを取り出していく.

HeatStrokeという変数にExcelのデータが格納された
HeatStrokeという変数にExcelのデータが格納された

Rでの操作

 コンソールはデフォルトでは左下にある.データフレームから各列のデータを取り出すにはデータフレーム名$列名と記述する.

各列の抽出

 下記のように最高気温をvTemp,平均水蒸気圧をvVapor,搬送人員数をvNumと決め,それぞれ抽出する.コード補完が働き,変数名を補完してくれる.

> vTemp=HeatStroke$Temp
> vVapor=HeatStroke$Vapor
> vNum=HeatStroke$HeatStroke

散布図の描画

 下記のように記述する.

> plot(vTemp, vNum)
> plot(vVapor, vNum)
日最高気温と搬送人員数
日最高気温と搬送人員数
平均水蒸気圧と搬送人員数
平均水蒸気圧と搬送人員数

データの要約

 下記コードを実行してデータの要約を行う.

> summary(HeatStroke)

 結果は以下の通りである.

      Date                           PrefCode         Pref          
 Min.   :2008-07-01 00:00:00.00   Min.   : 1.00   Length:82785      
 1st Qu.:2012-07-18 00:00:00.00   1st Qu.:13.00   Class :character  
 Median :2015-09-17 00:00:00.00   Median :25.00   Mode  :character  
 Mean   :2015-08-29 00:12:51.26   Mean   :24.32                     
 3rd Qu.:2018-09-09 00:00:00.00   3rd Qu.:36.00                     
 Max.   :2021-09-30 00:00:00.00   Max.   :47.00                     
      Temp           Vapor         HeatStroke     
 Min.   : 8.40   Min.   : 4.20   Min.   :  0.000  
 1st Qu.:26.10   1st Qu.:19.00   1st Qu.:  1.000  
 Median :29.20   Median :23.80   Median :  2.000  
 Mean   :28.99   Mean   :23.02   Mean   :  8.171  
 3rd Qu.:32.30   3rd Qu.:27.50   3rd Qu.:  8.000  
 Max.   :40.70   Max.   :37.00   Max.   :406.000  

搬送人員数を図示する

 搬送人員数をヒストグラムにして分布を図示する.

> hist(HeatStroke$HeatStroke, breaks = 406)

 結果は以下の通りである.

搬送人員数のヒストグラム
搬送人員数のヒストグラム

ポアソン回帰モデルによる回帰係数の推定

 搬送人員数は非負の整数であり,下限は0であるが上限は不明であるため,まずはポアソン分布を仮定して解析してみる.

 下記を実行する.

> z = glm(vNum ~ vTemp + vVapor, family = poisson(link="log"))
> summary(z)

 結果は以下の通り.

Call:
glm(formula = vNum ~ vTemp + vVapor, family = poisson(link = "log"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-10.770   -1.958   -0.887    0.586   33.508  

Coefficients:
              Estimate Std. Error z value Pr(>|z|)    
(Intercept) -8.0235926  0.0142797  -561.9   <2e-16 ***
vTemp        0.2695439  0.0004490   600.3   <2e-16 ***
vVapor       0.0660829  0.0003571   185.1   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 1463940  on 82784  degrees of freedom
Residual deviance:  662439  on 82782  degrees of freedom
AIC: 879565

Number of Fisher Scoring iterations: 5

 回帰式は以下の通り.温度が1℃上昇すると搬送数が約e0.27倍(約1.3倍)になり,平均水蒸気圧が1mmHg上昇すると搬送数が約e0.07倍(約1.07倍)になるという意味である.

log(\lambda)=-8.0235926 + 0.2695439vTemp + 0.0660829vVapor

 しかし,サマリーをよく見るとResidual devianceをdegree of freedomで除した値が8.002211と1を超えており,過分散と考えられる.この場合,負の二項分布モデルを当てはめるのが妥当と考えられる.

負の二項分布モデルによる回帰係数の推定

 ポアソン回帰モデルでは過分散となったため,より分散の大きな負の二項分布モデルを適用してみる.

> y=HeatStroke$HeatStroke
> x1=HeatStroke$Temp
> x2=HeatStroke$Vapor
> library(MASS)
> Z=glm.nb(y~x1+x2)
> summary(Z)

 結果は以下の通りである.

Call:
glm.nb(formula = y ~ x1 + x2, init.theta = 1.086748839, link = log)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.6560  -1.0483  -0.4735   0.2358   5.9940  

Coefficients:
              Estimate Std. Error z value Pr(>|z|)    
(Intercept) -7.6852676  0.0329494 -233.24   <2e-16 ***
x1           0.2844962  0.0013080  217.50   <2e-16 ***
x2           0.0342140  0.0009293   36.82   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for Negative Binomial(1.0867) family taken to be 1)

    Null deviance: 193086  on 82784  degrees of freedom
Residual deviance:  89163  on 82782  degrees of freedom
AIC: 425939

Number of Fisher Scoring iterations: 1


              Theta:  1.08675 
          Std. Err.:  0.00720 

 2 x log-likelihood:  -425930.92800 

 回帰係数は若干変化しているがほぼ変わらず,AICが879565から425939に減少し,当てはまりが大きく改善されたことがわかる.

まとめ

 SQL Serverから抽出したデータをもとにRでポアソン回帰モデルおよび負の二項分布モデルを用いて日最高気温と平均水蒸気圧との回帰係数を推定した.ポアソン回帰モデルでは過分散であり,負の二項分布モデルを当てはめるのが妥当である.

“ポアソン回帰モデルおよび負の二項分布モデルを用いて熱中症搬送人員数に対する日最高気温と平均水蒸気圧の回帰係数を推定する” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください