www.crosshyou.info

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

都道府県別の趣味・娯楽の平均時間のデータ分析2 - R言語で2変数の分散と分布位置を比較する。var.test関数とwilcox.test関数

 

www.crosshyou.info

 の続きです。

前回の分析で男性のほうが趣味・娯楽の平均時間が長い、無業者のほうが有業者よりも趣味娯楽の平均時間が長い、という傾向にあることがわかりました。

今回は、このことを統計検定してみましょう。2つの平均値に差があるかどうかという検定ですね。

まずは、男性のデータ、女性のデータをまとめたベクトルを作ります。

f:id:cross_hyou:20200304194649p:plain

有業者と無業者合わせた男性の趣味・娯楽時間の平均値は、57.86分です。

f:id:cross_hyou:20200304194757p:plain

女性のほうは平均時間は35.35分とやっぱり低いですね。

boxplot関数で箱ひげ図を描いて、MaleとFemaleを比較しましょう。

f:id:cross_hyou:20200304194951p:plain

f:id:cross_hyou:20200304195004p:plain
箱ひげ図を見ると、明らかに男性のほうが趣味・娯楽の時間が長いですね。

 

ここからは、

Statistics: An Introduction Using R

Statistics: An Introduction Using R

 

 こちらの本、Statistics: An Introduction Using R の本を参考にして分析します。

まずは、分散の比較です。var.test関数を使います。

f:id:cross_hyou:20200304195116p:plain

p値が2.2e-16と0.05よりも小さいので、MaleとFemaleでは分散は有意に違います。

分散が両者で違うので、Wilcoxon rank-sum testで両者の分布位置の違いを検定します。wilcox.test関数です。

f:id:cross_hyou:20200304195352p:plain

p値は2.2e-16よりも小さいですから、MaleとFemaleは有意に分布の位置が違うということです。MaleとFemale, 男性と女性では有意に趣味・娯楽の時間が違います。

同じようにして、有業者と無業者でも比較してみます。

f:id:cross_hyou:20200304195523p:plain

有業者の趣味・娯楽時間の平均値は34.01分、無業者のほうは59.21分ですから、無業者のほうが長いようです。

boxplot関数で分布を比べてみます。

f:id:cross_hyou:20200304195909p:plain

f:id:cross_hyou:20200304195921p:plain

無業者のほうが長いですね。

var.test関数で分散、varianceを比較します。

f:id:cross_hyou:20200304200104p:plain

p値が2.2e-16よりも小さいので、有業者と無業者の分散は有意に違います。

wilcox.test関数でWilcoxon rank-sum testを実行します。

f:id:cross_hyou:20200304200359p:plain

p値が2.2e-16よりも小さいので、有業者と無業者の趣味娯楽時間の長さは有意に違うことがわかりました。

今回は以上です。

 

都道府県別の趣味・娯楽の平均時間のデータ分析1 - R言語で基本統計量を算出する。男性のほうが趣味・娯楽の時間は多い。

今回は、都道府県別の趣味・娯楽時間のデータを分析してみたいと思います。

政府統計の総合口(e-stat)からデータを取得します。

f:id:cross_hyou:20200229145445p:plain

www.s-stat.go.jp

ですね。

f:id:cross_hyou:20200229145515p:plain

度道府県別の人口増減率、1人当り県民所得、趣味・娯楽の平均時間(4種類ありました。男性/女性と有業者/無業者で区分されています。)

これをダウンロードすると、下のようなExcelファイルになります。

f:id:cross_hyou:20200229145708p:plain

9行目は私がRで読み込むときの変数名として挿入した行です。

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

f:id:cross_hyou:20200229150608p:plain

read.csv関数でR言語にデータを取り込み、na.omit関数でNAのある行を削除し、str関数で構造を確認し、summary関数でデータのサマリを表示しました。

str関数で、94 obs. of 8 variables とありますので、94 x 8 のデータフレームです。

summary関数でYearを見ると、2006年度と2011年度は47とあって、他は0なので、このデータフレームは、2006年と2011年の2時点のデータということがわかります。

Yearはファクタになっています。2011年や1976年などの必要のないファクタ水準を削除しましょう。

f:id:cross_hyou:20200229151111p:plain

as.factor関数でデータ型を文字列型に変換して、as.factor関数でファクタ型に戻しますとファクタ型がデータが存在しないファクタ水準が整理できます。summary関数、levels関数で見てみると、2006年度と2011年度しかファクタ水準がないことがわかります。

それでは、もう一度、趣味・娯楽の平均時間を見てみましょう。

f:id:cross_hyou:20200229151613p:plain

summary関数を、df1[ , 5:8]に適用して趣味・娯楽の平均時間のデータだけを表示しました。平均値に注目すると、男性の有業者は、40.87分、男性の無業者は74.85分、女性の有業者は27.14分、時世の無業者は43.56分でした。男性のほうが、趣味・娯楽の時間が長いということでした。これは私にとっては意外でした。

有業者、無業者の観点で見ると、有業者のほうが時間は短く、無業者のほうが長いという結果です。これは意外ではありませんでした。

それぞれの変数の変動係数(CV)を計算しましょう。変動係数は、標準偏差 / 平均値 で計算します。

f:id:cross_hyou:20200229152502p:plain

apply関数でdf1の5列目から8列目を一度に処理しています。sd関数が標準偏差、mean関数が平均値を計算する関数です。

一番変動係数が大きいのはFWork, 女性の有業者です。一番低いのはFFree, 女性の無業者です。

今回は以上です。

WHOの新型コロナウィルスのデータの分析1 - R言語で全体の死亡率や国別の死亡率を計算する。

今回は新型コロナウィルスの感染数と死者数のデータを使って死亡率を計算してみようと思います。

f:id:cross_hyou:20200229130558p:plain

https://www.who.int/docs/default-source/coronaviruse/situation-reports/20200227-sitrep-38-covid-19.pdf?sfvrsn=9f98940c_2

このレポートに掲載されているデータです。2月27日時点ですね。

f:id:cross_hyou:20200229130744p:plain

こういう中国の都市別のデータと

f:id:cross_hyou:20200229130807p:plain

こういう世界の国別のデータを手入力でExcelに入力して、

f:id:cross_hyou:20200229130944p:plain

こういうCSVファイルにしました。

それでは、read.csv関数でデータを読込みます。

f:id:cross_hyou:20200229131349p:plain

WHOの表では、香港、台湾、マカオも中国の中に含まれていましたが、この3つはCountryの分類をOtherとして中国とは別にしました。

それでは早速全体の死亡率を計算してみます。

Deathの合計 / Caseの合計

で計算できますね。

f:id:cross_hyou:20200229132006p:plain

全体の死者数は、2818人、全体の患者数は、8万2293人なので、全体の死亡率は、3.4%です。

それでは、それぞれの死亡率を計算してみましょう。

f:id:cross_hyou:20200229132429p:plain

マレーシアは感染者数が22人で死亡者数が9人で死亡率が41%と一番高いですね。

日本は、感染者数が186人、死亡者が3人で死亡率は1.7%です。

感染者数が100人以上の都市・国だけにしてみましょう。

f:id:cross_hyou:20200229133103p:plain

感染者が100人以上いる都市・国の中ではイランが一番死亡率が高いです。

イランは感染者は141人、死亡者は27人で死亡率が19%です。

そうだ、死亡率の分布をヒストグラムにしてみましょう。

f:id:cross_hyou:20200229133706p:plain

f:id:cross_hyou:20200229133715p:plain

ほとんどが一番左の範囲になってしまって、これではよくわからないですね。plot関数とsort関数を組み合わせて小さい順に死亡率をプロットしてみます。

f:id:cross_hyou:20200229134226p:plain

f:id:cross_hyou:20200229134235p:plain

多くの都市・国は死亡者は0なので、死亡率は0ですね。

感染者数をX軸、死亡率をY軸にした散布図を描いてみます。

f:id:cross_hyou:20200229134924p:plain

f:id:cross_hyou:20200229135008p:plain


あら、一番右のプロットがあるせいで、よくわからない散布図になってしまいました。

Hubeiの感染者数が6万人以上で突出しているためですね。これを除外して散布図を描いてみます。

f:id:cross_hyou:20200229135416p:plain

f:id:cross_hyou:20200229135428p:plain

4つ死亡率が10%を越えている都市・国がありますがその他は同じような死亡率ですね。

それでは最後にクロス表を作成してカイ二乗検定をしてみましょう。

中国かそれ以外かで二つに分けて、Case-Deathで生存者数を計算して、Deathとクロス表にします。

まず、中国かその他かの生存者数、死亡者数を計算します。

f:id:cross_hyou:20200229140250p:plain

この4つの数字でマトリックスを作ります。

f:id:cross_hyou:20200229140623p:plain

こんな感じです。

それぞれの死亡率を計算してみます。

f:id:cross_hyou:20200229140907p:plain

中国は3.5%でその他は1.9%の死亡率です。この違いは統計的に有意な違いなのかどうか? chisq.test関数でわかります。

f:id:cross_hyou:20200229141128p:plain

p値が3.963e-07と0.05よりも小さいので、中国とその他では、死亡率が有意に違うことがわかりました。

今回は以上です。

 

建設総合統計のデータ分析5 - R言語で重回帰分析。民間の建設額を公共の建設額で重回帰分析。

 

www.crosshyou.info

 の続きです。

今回は、Minkan(民間)をKoKen(公共建築), KoHou(公共住宅), KoDob(公共土木)という3つの変数で回帰分析してみます。

まずは、plot関数で散布図を描いてみます。

f:id:cross_hyou:20200226200751p:plain

f:id:cross_hyou:20200226200802p:plain

正の相関がある感じです。

cor関数で相関係数も調べましょう。

f:id:cross_hyou:20200226201120p:plain

MinkanとKoKen, KoHou, KoDobは緩い相関ですが、KoKen, KoHou, KoDobの3つの変数同士かかなり強い相関ですね。こういうのは多重共線性といって良くないのですが、とりあえずやってみます。

lm関数で重回帰分析をします。

f:id:cross_hyou:20200226201523p:plain

KoHou:KoDobは必要ないですね。update関数で削除したモデルを作り、anova関数で比較します。

f:id:cross_hyou:20200226201833p:plain


p値が0.7195ですので、model1とmodel2で有意な違いは無いです。model2を見てみます。

f:id:cross_hyou:20200226202001p:plain

これでいいですね。model2の残差プロットを見てみます。

f:id:cross_hyou:20200226202142p:plain

f:id:cross_hyou:20200226202152p:plain

残差が特定のパターンでないのでいいと思います。

このmodel2と前回作成したmodel4を比較してみましょう。

f:id:cross_hyou:20200226202350p:plain

前回作成したモデルは、Minkan ~ Kokyo * Year というモデルでした。p値が0.00715と0.05よりも小さいので、model2とmodel4では有意な違いがあります。

AIC関数でどちらのモデルが良いモデルか見てみます。

f:id:cross_hyou:20200226202556p:plain

AICは値が小さいほどいいので、model2のほうが良いモデルということですね。

前回と同じように残差を箱ひげ図にして比べてみます。

f:id:cross_hyou:20200226203103p:plain

f:id:cross_hyou:20200226203114p:plain

model2のほうが狭い範囲に残差が集まっていますね。

hist関数でヒストグラムも比較してみましょう。

f:id:cross_hyou:20200226203746p:plain

f:id:cross_hyou:20200226203758p:plain

model2のヒストグラムのほうが両サイドのグラフが低いですね。

今回は以上です。

 

建設総合統計のデータ分析4 - R言語のlm関数で回帰分析。

 

www.crosshyou.info

 の続きです。

今回は、Total(総計)をresponse variable, Minkan(民間)をexplanatory variableにして回帰分析をしてみます。

まずは、plot関数で散布図を描きます。

f:id:cross_hyou:20200222134805p:plain

f:id:cross_hyou:20200222134814p:plain

正の相関の散布図です。

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

f:id:cross_hyou:20200222135022p:plain

モデルのp値は2.2e-16と0.05よりも小さいので有意なモデルです。切片項、Minkanの係数のp値も0.05以下で有意です。R-squaredは0.8801となっています。Minkanの動きでTotalの動きが88%説明できるということですね。

散布図に回帰直線を重ねてみます。

f:id:cross_hyou:20200222135413p:plain

f:id:cross_hyou:20200222135424p:plain

このモデルの式は、

Total = 979億90百万円 + 1.386 x Minkan

です。Minkan(民間)の建設工事が1億円増えると、全体の建設工事は1億3860万円増えるということですね。

この回帰モデルに、Yearを追加したらどうなるでしょうか?

f:id:cross_hyou:20200222140122p:plain

anova関数でmodel1とmodel2を比較しましたが、p値が0.9949と0.05よりも大きいので、Yearを追加しても意味は無いようです。

f:id:cross_hyou:20200222140312p:plain

summary関数でmodel2を見てみましたが、Yearの係数のp値は0.995と0.05よりも大きいので、やはりYearは関係ないですね。

model1の残差プロットを表示してみます。

f:id:cross_hyou:20200222141552p:plain

f:id:cross_hyou:20200222141603p:plain

今度は、Minkan(民間)をKokyo(公共)で回帰分析してみます。

f:id:cross_hyou:20200222142259p:plain

p値は0.0001025と0.05よりも小さいので有意なモデルです。切片項、Kokyoの係数ともにp値は0.05より小さいです。R-squaredは0.3625なのでKokyoの動きでMinkanの動きが36%説明できます。

散布図と回帰直線を描いてみます。

f:id:cross_hyou:20200222142716p:plain

f:id:cross_hyou:20200222142726p:plain

Yearを追加してみます。

f:id:cross_hyou:20200222142916p:plain

Yearを追加する際、今回はKokyo:Yearという交差項も加えてみました。anova関数でmodel3とmodel4を比較すると、model3とmodel4では有意な違いがあります。

model4をsummary関数で見てみます。

f:id:cross_hyou:20200222143254p:plain

モデルのp値は3.284e-07と0.05よりも小さく有意なモデルです。Intercept, Kokyo, Year, Kokyo:Yearの係数のp値がすべて0.05よりも小さくなっています。R-squaredは0.6378なので、63%の説明力です。Kokyoだけのときと比べると大幅に良くなっています。

model3とmodel4の残差を箱ひげ図で比較しましょう。

f:id:cross_hyou:20200222143959p:plain

f:id:cross_hyou:20200222144012p:plain

resid関数で残差を出力できますので、yrange <- のコマンドで箱ひげ図の上限の値と下限の値を設定しています。model3よりも、model4のほうが上下の幅が狭くなっていることがわかります。

今回は以上です。

建設総合統計のデータ分析3 - R言語で2変数のデータ分析の練習。Minkan(民間)とKokyo(公共)を例にして。var.test関数、t.test関数、wilcox.test関数、cor.test関数。

 

www.crosshyou.info

 の続きです。

今回は2変数のデータ分析の練習をしてみます。Minkan(民間)とKokyo(公共)の2変数を例にします。

まずは、boxplot関数で2つ変数の箱ひげ図を見てみます。

f:id:cross_hyou:20200222113421p:plain

f:id:cross_hyou:20200222113435p:plain

 

Minkan(民間)のほうがvariance, 平均値が大きそうです。

次に、var.test関数で2つの変数のvarianceが同じかどうかを調べてみます。

f:id:cross_hyou:20200222110234p:plain

Minkanのvarianceは8,077,995,287で、Kokyoのvarianceは3,313,504,246です。Minaknのほうが2.5倍くらい大きいですね。variance.testの結果はp値は0.009992と0.05よりも小さいので、帰無仮説を棄却します。つまり二つの変数のvarianceは違う、ということです。

次は、2つの変数の平均値に有意な違いがあるかどうかを、t.test関数で調べます。

f:id:cross_hyou:20200222111422p:plain

Minkan(民間)の平均値は、3648億22百万円。Kokyo(公共)の平均値は、2386億63百万円です。t.testの結果、p値は1.802e-09と0.05よりも小さいので、帰無仮説(2つの平均値は同じ)を棄却します。Minkan(民間)とKokyo(公共)の2つの変数は平均値は違うということです。

wilcox.test関数でも確認します。

f:id:cross_hyou:20200222112241p:plain

p値は3.11e-10なので0.05よりも小さいので帰無仮説を棄却して対立仮説を採用します。true location shift is not equal to 0です。2つの変数の分布は同じではないということですね。

こんどは、plot関数で散布図を描いてみます。

f:id:cross_hyou:20200222114124p:plain

f:id:cross_hyou:20200222114133p:plain

正の相関があるように見えます。

cor.test関数で相関関係があるかどうかをテストします。

f:id:cross_hyou:20200222114410p:plain

p値は0.0001025と0.05よりも小さいので帰無仮説を棄却して対立仮説(相関は0ではない)を採用します。二つの変数には相関があって、その相関係数は0.6020464という値です。

今回は以上です。

 

建設総合統計のデータ分析2 - R言語で1変数のデータ分析の練習。Total(総計)を例にして。

 

www.crosshyou.info

 の続きです。

今回は、R言語で1変数のデータ分析の練習をします。

参考図書は、Michael J. CrawleyのStatistics An Introduction Using Rです。

 

Statistics: An Introduction Using R

Statistics: An Introduction Using R

  • 作者:Michael J. Crawley
  • 出版社/メーカー: Wiley
  • 発売日: 2014/11/24
  • メディア: ペーパーバック
 

 Total(総計)の変数を題材にして練習します、

まずはsummary関数で基本統計量を算出します。

f:id:cross_hyou:20200219194745p:plain

 

これは前回もやりました。

次は、boxplot関数で箱ひげ図を描きます。

f:id:cross_hyou:20200219194947p:plain

f:id:cross_hyou:20200219194957p:plain

外れ値は無いことがわかります。黒い水平線は中央値で、箱の上の線は75%、下の線は25%の水準です。大きい方に広がっている分布ですね。

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

f:id:cross_hyou:20200219195336p:plain

f:id:cross_hyou:20200219195314p:plain

次はtable関数とlength関数を使って、値の違うデータが何個あるか数えます。

f:id:cross_hyou:20200219195528p:plain

36個です。36年間のデータ全部、値が違います。

rug plotというのを作成してみます。

f:id:cross_hyou:20200219200023p:plain

f:id:cross_hyou:20200219200047p:plain

次はqqnorm関数とqqline関数でQ-Q Plotを描いてみみます。

f:id:cross_hyou:20200219200359p:plain

f:id:cross_hyou:20200219200429p:plain

S字型にプロットされていますね。

wilcox.test関数で平均値が60兆3485億円かどうかをテストしてみます。

f:id:cross_hyou:20200219200901p:plain

p値が0.7621ですから平均値は60兆3485億円と言えます。

The Central Limit Theoremというのがあります。母集団からサンプルをいくつか取り出してその平均値を計算します。これを何回も繰り返すと平均値は正規分布する、というものです。これを実際に試してみましょう。

f:id:cross_hyou:20200219202215p:plain

f:id:cross_hyou:20200219202228p:plain

右の青いヒストグラムがTotalを5個取り出して平均値を計算する、という作業を1万回繰り返した結果のヒストグラムです。左側はTotalを1個取り出す、という作業を1万回繰り返したものです。左側のヒストグラムの形状はもとのTotalのヒストグラムと同じようなかたちです。

mean_outcomeのsummaryを見てみます。

f:id:cross_hyou:20200219202732p:plain

平均値は60兆3215億円、標準偏差が5兆4991億円です。

こんどは、mean_outcomeのQ-Q Plotを描いてみます。

f:id:cross_hyou:20200219204226p:plain

f:id:cross_hyou:20200219204241p:plain

今回は以上です。