www.crosshyou.info

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

都道府県別の1人当り最終エネルギー消費量のデータ分析2 - 山口県、大分県、岡山県のエネルギー消費量は外れ値レベル。

 

www.crosshyou.info

 の続きです。

今回は、Pratio(15-64歳人口割合), Shotoku(1人当り県民所得), Energy(1人当り最終エネルギー消費量)の3つの変数について、箱ひげ図やヒストグラムを描いでみます。

まず、前段階として、9年間の値を平均して都道府県別のデータを作成しましょう。tapply関数とmean関数を使います。

f:id:cross_hyou:20200321151611p:plain

島根県が一番、15-64歳の人口割合が低いのですね、57.3%です。以下、高知県(58.3%)、秋田県(58.5%)、山口県(58.5%)と続きます。

東京都が一番割合が高く、67.4%です。以下、神奈川県(65.8%)、埼玉県(65.4%)、愛知県(64.6%)となっています。

f:id:cross_hyou:20200321152115p:plain

沖縄県が一番、1人当り県民所得が低いです。202万3千円です。鳥取県が214万2千円、宮崎県が215万4千円、長崎県が224万9千円と続いています。

東京都が一番所得が高く、529万3千円です。愛知県が342万4千円、三重県が329万9千円、富山県が319万3千円となります。

f:id:cross_hyou:20200321152827p:plain

奈良県が一番、1人当り最終エネルギー消費量が少ないです。71.6GJ、沖縄県が73.0GJ、埼玉県が80.4GJ、長崎県が82.8GJとなっています。

山口県が一番、エネルギー消費量が多いです。340.3GJです。大分県が331.1GJ、岡山県が306.6GJ、和歌山県が221.6GJです。私の想像とはぜんぜん違う都道府県が上位でした。

それでは、これらの変数のヒストグラムを見てみましょう。hist関数です。

f:id:cross_hyou:20200321153532p:plain

f:id:cross_hyou:20200321153544p:plain

青が15-64歳人口割合、オレンジが1人当り県民所得、緑が1人当り最終エネルギー消費量です3つのヒストグラムすべてが右側の裾が広い分布形状ですね。

boxplot関数で箱ひげ図を描きましょう。

f:id:cross_hyou:20200321154037p:plain

f:id:cross_hyou:20200321154052p:plain

青の人口割合は外れ値は無いですが、オレンジの所得は上方に外れ値が一つります。東京都ですね。緑のエネルギー消費量は外れ値が3つあります。山口県、岡山県、大分県です。

3つの変数の相関マトリックスと散布図を作成してみましょう。

まずは相関マトリックスです。data.frame関数で一つのデータフレームにしてから、cor関数をつかいました。

f:id:cross_hyou:20200321154653p:plain

15-64歳人口割合と1人当り県民所得の相関係数は0.56です。

15-64歳人口割合と1人当りエネルギー最終消費量は-0.21です。

1人当り県民所得と1人当りエネルギー最終消費量は0.03です。

県民所得とエネルギー消費量は相関が無いのですね。

散布図はpairs関数を使いました。

f:id:cross_hyou:20200321155216p:plain

f:id:cross_hyou:20200321155227p:plain

こんどは、各変数の対数をとった値での相関マトリックス、散布図マトリックスを作成してみましょう。

f:id:cross_hyou:20200321155852p:plain

f:id:cross_hyou:20200321155902p:plain

どうでしょうか?

対数変換した後の相関は、

1人当りエネルギー消費量と人口割合の相関係数は、-0.19です。

1人当りエネルギー消費量と1人当り県民所得の相関係数は、0.12です。

絶対値の平均は、0.158です。

対数変換しない相関は、

1人当りエネルギー消費量と人口割合の相関係数は、-0.21です。

1人当りエネルギー消費量と1人当り県民所得の相関係数は、0.03です。

絶対値の平均は、0.118です。

対数変換した後の相関のほうが高いので、次回は対数変換した値で回帰分析をしてみましょう。

今回は以上です。

 

都道府県別の1人当り最終エネルギー消費量のデータ分析1 - R言語で基本統計量を計算する。

www.e-stat.go.jp

今回は、都道府県別の1人当り最終消費エネルギーのデータを分析してみたいと思います。データはs-Stat(政府統計の総合窓口)から取得しました。

f:id:cross_hyou:20200321112834p:plain

1人当り最終エネルギー消費量の他に、15-64歳人口割合(%)と1人当り県民所得(平成23年基準)(千円)も一緒にデータを取り込みました。

f:id:cross_hyou:20200321113111p:plain

CSVファイルはこんな感じです。

R言語のread.csv関数でファイルを読込みます。

f:id:cross_hyou:20200321113524p:plain

read.csv関数でCSVファイルを読み込むときに、skip = 8と指定しているので、9行目からデータを読込みます。また、na.strings = で***, X, - はNAとするように指定しています。

na.omit関数でNAを含む行をすべて削除しています。

str関数でdf1のデータ構造を確認しています。432の観測と5つの変数があります。

summary関数でそれぞれの変数を見てみます。

f:id:cross_hyou:20200321114128p:plain

Year変数は2005年度や2018年度など0(データが無い)のファクターレベルがあります。これを無くしてしまいましょう。

f:id:cross_hyou:20200321114258p:plain

as.character関数でファクタ型のデータだったのを文字列型のデータにしました。それをas.factor関数で再度ファクタ型に戻すとデータの無いファクターレベルが削除されます。2007年度から2015年度まで9年間のデータがあるとわかります。すべて47とありますから、どの年度も47都道府県のデータが揃っていることがわかります。

次は、Pref変数を見てみます。

f:id:cross_hyou:20200321114709p:plain

愛知県から和歌山県まですべて9とあります。9年間のデータですね。

Pratio, Shotoku, Energyはいっぺんにやってしまいましょう。

f:id:cross_hyou:20200321115031p:plain

Pratioは15-64歳人口割合です。最低は55%, 最大は68.6%, 中央値は61.2%, 平均値は61.42%です。

Shotokuは1人当り県民所得(平成23年基準、千円です。最低は195万円、最大は590万9千円、中央値は268万円、平均値は272万3千円です。

Energyは1人当りの最終消費エネルギー量(GJ)です。最低は68.35GJ, 最大は367.29GJ, 中央値は119.24GJ, 平均値は138.73GJです。

ところで、このエネルギー量のGJってどのような単位なんでしょうか?1GJ(ギガジュール)で2憶3900万カロリーぐらいだそうです。よくわからないですが凄いエネルギー量ですね。

Pratio, Shotoku, Energyの標準偏差と変動係数も計算してみましょう。

f:id:cross_hyou:20200321120654p:plain

標準偏差はsd関数で計算できます。変動係数は標準偏差を平均値で割った値ですが、平均値はmean関数で計算できます。

Pratioの標準偏差は2.6%で変動係数は0.04です。Shotokuの標準偏差は51万1千円で変動係数は0.19です。Energyの標準偏差は61.6GJで変動係数は0.44です。

Energy(1人当りの最終エネルギー消費量)のデータが一番変動の度合いが大きいことがわかります。

今回は以上です。

 

WHOの新型コロナウィルスのデータ分析2 - R言語で3月18日時点の全体の死亡率や地域別・国別の死亡率を計算する。

 

www.crosshyou.info

 の続きです。

前回から20日ほど経過しました。世界的に感染者数が拡大しています。

この3月18日時点のCoronavirus disease 2019(COVID-19) Situation Report - 58

のデータを使って、全体の死亡率などを計算してみましょう。

f:id:cross_hyou:20200319185200p:plain

https://www.who.int/docs/default-source/coronaviruse/situation-reports/20200318-sitrep-58-covid-19.pdf?sfvrsn=20876712_2

 

f:id:cross_hyou:20200319191049p:plain

こんな感じでCSVファイルにしました。Regionが地域、Countryが国、Kansenが感染者数、Shibouが死亡者数です。

R言語のread.csv関数でファイルを読込みます。

f:id:cross_hyou:20200319191747p:plain

 

read.csv関数でCSVファイルをR言語に読込みました。

str関数でデータ構造を確認しています。4つの変数、161の観測です。161の国や地域で感染が認められたということです。前回は中国のは各省ごとに報告されていましたが、今回は中国と一つにまとめられています。

死亡率を表す変数を作成します。

f:id:cross_hyou:20200319192254p:plain

死亡率の平均は2.3%ぐらいですね。最大値が100%とあるので、どこかの国は感染者と死亡者の数が同じです。

それでは、死亡率の上位10を見てみます。

f:id:cross_hyou:20200319192745p:plain

まず、order関数でDRの大きい順に表示するようなインデックスを作ります。

そして、head関数で上位10だけを表示しました。スーダンとケイマン諸島は感染者1人、死亡者1人ですので死亡率100%です。

感染者数が100人以上の国でやってみましょう。

f:id:cross_hyou:20200319193415p:plain

サンマリノが10.6%で一番です。イタリア7.9%、イラク7.1%、フィリピン6.4%、イラン6.1%、スペイン4.4%、中国4.0%、日本3.4%、インドネシア2.9%、イギリス2.8%です。

plot関数を使って、感染者数の対数を横軸、死亡者数の対数を縦軸にして散布図を描いてみます。

f:id:cross_hyou:20200319194032p:plain

f:id:cross_hyou:20200319194044p:plain

hist関数を使って死亡率のヒストグラムを描いてみます。

f:id:cross_hyou:20200319194616p:plain

f:id:cross_hyou:20200319194630p:plain

感染者数が100人以上の国だけでヒストグラムを描きました。赤い垂線が日本の死亡率です。

地域別の死亡率をまとめてみます。tapply関数で地域別の感染者数と死亡者数を合計します。

f:id:cross_hyou:20200319195052p:plain

この二つのデータから地域別の死亡率を計算します。

f:id:cross_hyou:20200319195256p:plain

地域の中に、Diamond Princessがあります。これはクルーズ船のダイヤモンドプリンセス号です。死亡率、1%以下ですね。世界各国から日本の対応が悪かったようなことが言われていましたが、この死亡率を見る限り、日本の関係者は良くやったのではないでしょうか?Eastern Mediterranean RegionとEuropean Regionが死亡率高いですね。

barplot関数で棒グラフにしてみます。

f:id:cross_hyou:20200319200201p:plain

f:id:cross_hyou:20200319200222p:plain

一番左のバーがダイヤモンドプリンセス号の死亡率です。

そうだ、全体の死亡率を出しましょう。

f:id:cross_hyou:20200319200438p:plain

全体の死亡率は4.1%ですね。

こんどは、cbind関数でregShibouとregKansenを合体させて地域別の死亡者数と感染者数のクロス表を作成しましょう。

f:id:cross_hyou:20200319200903p:plain

このマトリックス、mtxをchisq.test関数でカイ二乗検定します。地域別で死亡率に違いはあるかどうか調べます。

f:id:cross_hyou:20200319201213p:plain

p値は2.2e-16ですから有意です。地域が違うと死亡率も違いがあります。

どの地域の死亡率が有意に高く、どの地域の死亡率が有意に低いかをみてみます。カイ二乗検定した結果の中の$stdresというのでわかります。

f:id:cross_hyou:20200319201520p:plain

調整済み残差が表示されます。だいたい、絶対値で2よりも大きいところが有意です。

ダイヤモンドプリンセス号は死亡者が有意に少ないですね。

今回は以上です。

 

都道府県別の生活習慣病による死亡者数のデータ分析4 - 2015年度と2006年度の比較。東京はほとんど変わらず。

 

www.crosshyou.info

 の続きです。

今回は、2015年度と2006年度を比較して、どの都道府県が生活習慣病による死亡者が増えたのか、減ったのかをみてみたいと思います。

まず、2006年度の人口1万人当りの死亡者数を一つのベクトルにしてみます。

tapply関数とmax関数を使いました。

f:id:cross_hyou:20200318191508p:plain

愛知県、愛媛県、茨城県とはじまって、兵庫県、北海道、和歌山県で終わる順番です。

2015年度も同じようにします。

f:id:cross_hyou:20200318191805p:plain

同じように、愛知県、愛媛県、茨城県と始まって兵庫県、北海道、和歌山県と終わりますね。tapply関数で処理すると、ある一定の規則に従って順番が決まるのでしょう。

このDR15-DR06を出せば、都道府県ごとにどれだけ変化したかわかります。

f:id:cross_hyou:20200318192359p:plain

東京都はほとんど変わらないですね。宮崎県、青森県は10人以上増えています。

hist関数でヒストグラムを描きます。

f:id:cross_hyou:20200318192642p:plain

f:id:cross_hyou:20200318192654p:plain

4から6の間が一番頻度が多いですね。

summary関数で平均値などを出しましょう。

f:id:cross_hyou:20200318192842p:plain

平均値は5.08で中央値は4.94です。

前回の分析では、人口1万人当たりの死亡者数は、人口密度の対数と関係があることがわかりました。なので、今回は都道府県別の人口密度の変化を算出して、そのデータと回帰分析してみましょう。

まず、人口密度の変化を表すベクトルを作成します。

f:id:cross_hyou:20200318194127p:plain

秋田県が一番、人口密度が低くなり、東京都が一番高くなりました。

この人口密度の変化(対数)と死亡者数の変化を散布図にしてみます。plot関数です。

f:id:cross_hyou:20200318194447p:plain

f:id:cross_hyou:20200318194432p:plain

人口密度(対数)が増えているほうが、死亡者数は減っているようですね。

lm関数で回帰分析してみます。

f:id:cross_hyou:20200318194711p:plain

p-valueが9.004e-5と0.05よりも小さいので有意なモデルです。

回帰式は、人口1万人当りの死亡者数の変化 = 3.7997 - 33.2367 x 人口密度(対数)の変化

です。やはり、人口密度が高くなった県ほど死亡者数の増加は小さいということですね。

散布図に書き直線を重ねましょう。

f:id:cross_hyou:20200318195159p:plain

f:id:cross_hyou:20200318195210p:plain

今回は以上です。

 

読書記録 - 「統計分布を知れば世界がわかる 身長・体重から格差問題まで」松下貢 著(中公新書)

 

 正規分布、べき乗分布、対数正規分布という3つの分布について教えてくれる。

このブログをやっていて、都道府県別の人口や県内総生産額が正規分布でなくて、右に裾野が広がった分布(対数正規分布)になる理由がわかった。

 

都道府県別の生活習慣病による死亡者数のデータ分析3 - R言語のlm関数で重回帰分析。人口密度が高い県ほど死亡者数は少ない。

 

www.crosshyou.info

 の続きです。

前回は2006年度よりも2014年度のほうが死亡者が多かったことがわかりました。

今回は2015年度のデータで、総人口1万人当りの死亡者数と人口密度、県内総生産の関係を見てみます。

まずは、2015年度だけのデータフレームを作成します。d15という名前のデータフレームにしました。

f:id:cross_hyou:20200314140435p:plain

Yearは必要ないので、削除します。

f:id:cross_hyou:20200314140619p:plain

Mitsudo(人口密度), GDP(一人当り県内総生産), DR(1万人当たり死亡者数)の分布の形態をヒストグラムで見てみます。hist関数です。

f:id:cross_hyou:20200314141106p:plain

f:id:cross_hyou:20200314141117p:plain

人口密度や一人当り県内総生産は右に裾野が広がっていますね。1万人当りの死亡者数は、左右対称っぽいです。

散布図を見てみましょう

f:id:cross_hyou:20200314141528p:plain

f:id:cross_hyou:20200314141701p:plain

青枠で囲った2つの散布図が縦軸がDR(死亡者数)です。左の散布図が横軸が人口密度、右の散布図が横軸がGDPですね。

人口密度も一人当り県内総生産も右の裾野が長い分布ですので、対数をとって散布図を描いてみます。

f:id:cross_hyou:20200314142405p:plain

f:id:cross_hyou:20200314142419p:plain

どちらも右肩下がりの散布図ですね。

cor関数で相関関係を調べてみます。

f:id:cross_hyou:20200314143250p:plain

死亡者数と人口密度の相関係数は、-0.569。

死亡者数と人口密度の対数の相関係数は、-0.761。

死亡者数と県内総生産の相関係数は、-0.438。

死亡者数と県内総生産の対数の相関係数は、-0.438。

人口密度と県内総生産の相関係数は、0.645。

人口密度の対数と県内総生産の対数の相関係数は、0.525。

対数をとった値のほうが死亡者数との相関が高く、かつお互いの相関係数は低いです。

なので、対数をとった値を説明変数にして、重回帰分析をしてみます。

f:id:cross_hyou:20200314144909p:plain

log(GDP)の係数のp値が0.64164と0.05よちも大きいです。log(GDP)はいらないのですね。削除しましょう。

f:id:cross_hyou:20200314145201p:plain

p値は0.6416と0.05よりも大きいので、model1とmodel2で有意な違いはありません。

単純なほうのmodel2を採用します。

f:id:cross_hyou:20200314145412p:plain

model2のp値は5.478e-10と0.05よりも小さいので有意なモデルです。

人口1万人当りの生活習慣病による死者数 = 120.615 - 8.819 x 人口密度の対数値

というモデル式です。1人当りの県内総生産額は、人口密度を考慮すると必要ない変数だとわかりました。

散布図(横軸が人口密度の対数値、縦軸が死亡者数)にモデルの回帰直線を重ねてみます。

f:id:cross_hyou:20200314150544p:plain

f:id:cross_hyou:20200314150556p:plain

直線よりも曲線のほうがうまく回帰できそうですね。2乗項を加えてみます。

f:id:cross_hyou:20200314150913p:plain

anova関数でmodel2とmodel3を比較すると、p値は0.03159と0.05よりも小さくなりました。model2とmodel3では有意な違いがあるのですね。AIC関数でどちらのモデルがいいか見てみましょう。

f:id:cross_hyou:20200314151115p:plain

model3のほうがAICの値が小さいので、良いモデルですね。みてみましょう。

f:id:cross_hyou:20200314151312p:plain

model3のp値は5.327e-10で0.05よりも小さいので、有意なモデルです。

切片、log(Mitsudo)の係数, log(Mitsudo)^2の係数それぞれのp値も0.05以下ですね。

model3は

人口1万人当りの生活習慣病の死亡者数 = 233.6892 - 40.3289 x Mitsudoの対数値 + 2.1635 x Mitsudoの対数値の2乗

です。

先ほどと同じように散布図に回帰曲線を重ねてみましょう。

まず、log(Mitsudo)の範囲に合わせてxの値を作成します。

f:id:cross_hyou:20200314152018p:plain


seq関数でスタートがmin(log(d15$Mitsudo)), 終了がmax(log(d15$Mitsudo))で個数が100個の数値ベクトルを作りました。

f:id:cross_hyou:20200314152336p:plain

次に上のようにmodel3の式を当てはめてyの値を作成しました。

さあ、散布図にmodel2の回帰直線、model3の回帰曲線をかさねます。

f:id:cross_hyou:20200314152816p:plain

f:id:cross_hyou:20200314152827p:plain

青い曲線(model3)のほうが緑の散布図にフィットしているように見えます。

今回は以上です。

都道府県別の生活習慣病による死亡者数のデータ分析2 - R言語のplot関数で年別の人口1万人当りの死亡者数を見る。

 

www.crosshyou.info

 の続きです。

今回は年別で人口1万人当りの死亡者数を見てみます。

plot関数を使います。

f:id:cross_hyou:20200314104554p:plain

f:id:cross_hyou:20200314104611p:plain

あら、1975年度とか1983年度とかデータの無い年度も表示されてしまってます。df1$Yearを見てみましょう。

f:id:cross_hyou:20200314104821p:plain

データが無い年度もファクタのレベルとして残っていますね。

整理しましょう。

f:id:cross_hyou:20200314105041p:plain

まず、as.character関数で文字列型に変換し、それをas.factor型でファクター型に変換しました。これで、1975年度などのデータの無い年度はなくなりました。

もう一度plot関数でグラフを描いてみます。

f:id:cross_hyou:20200314105445p:plain

f:id:cross_hyou:20200314105457p:plain

年度が進むほど、死亡者数は多くなっているように見えます。

tapply関数で年度別の平均値を計算してみます。

f:id:cross_hyou:20200314105909p:plain

2006年度が一番少なくて、55.25人です。2014年度が一番多くて60.44人です。

だいたい5人ぐらいの違いがありますね。2006年度と2014年度で違いがあるかどうか調べてみます。

まず、var.test関数で分散が同じかどうかを検定します。

f:id:cross_hyou:20200314110624p:plain

p値は0.314と0.05よりも大きいです。分散は同じとみなしてよいです。

分散は同じとみなしてよいので、t.test関数で平均値が同じかどうかを検定します。

f:id:cross_hyou:20200314110944p:plain

p値が0.0030408と0.05よりも小さいので2006年度の平均値55.25人と2014年度の平均値60.44人とは有意な違いがあるとわかりました。

2006年度で一番、1万人当り死亡者数の多い都道府県、少ない都道府県はどこでしょうか?tapply関数で2006年度の都道府県別の総人口1万人当りの死亡者数の平均値のテーブルを作成して、sort関数で並び替えます。平均値といっても各都道府県の2006年度のデータは一つしかありませんから、2006年度の値、ということですね。

f:id:cross_hyou:20200314111434p:plain

沖縄県が一番少なくて35.23人です。秋田県が一番多くて70.38人です。

同じように、2014年度もどの都道府県が多くて、どの都道府県が少ないかみてみましょう。

f:id:cross_hyou:20200314112240p:plain

2014年度も沖縄県が一番少なくて40.11人です。多いのは2006年度と同じで秋田県でした。80.63人です。秋田県は10人も増えていますね。

今回は以上です。