www.crosshyou.info

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

UCI の Breast Cancer Wisconsin (Diagnostic) のデータ分析3 - R の rpart パッケージで決定木モデルで予測

Bing Image Creator で生成: blue sky, green grass, white clouds, some flowers, cheerful image photo

www.crosshyou.info

の続きです。

今回は、R の rpart パッケージで決定木モデル (decision tree model) で予測をしてみます。

を参考にしてみました。

まずは、rpart パッケージと rpart.plot パッケージを読み込みます。

つぎは、rpart() 関数で剪定前の決定木 (decision tree) を生成します。

rpart.plot() 関数で生成された決定木 (decision tree) を描いてみます。

枝がいっぱいの複雑な木ですね。これだと、新しいデータでは上手く予測できないかもしれませんので、剪定をします。

cp というパラメータを使って剪定しますが、どのくらいの cp がいいかを見るために、plotcp() 関数を使います。

cp = 0.028 のところで、水平線を下回っていますので、cp = 0.028 で剪定します。

prune() 関数を使います。

こうして選定した決定木 (decision tree) を描いてみましょう。

だいぶスッキリしました。X25 < 1.3 で X30 < 1.5 だと M = 0 となります。この決定木 (decision tree) の一番左です。

X25 > 1.3 で X10 > 1.2 だと M = 1 となります。この決定木 (decision tree) の一番右です。

このモデルで予測をしてみます。

正解率は、92.1% でした。

ロジスティクス回帰や LASSO 回帰よりは正解率が悪いですね。

今回は以上です。

 

初めから読むには、

www.crosshyou.info

です。

読書記録 - 「エピジェネティクス - 新しい生命像をえがく」 仲野 徹 著 (岩波新書)

エピジェネティクスの「エピ」というのはギリシャ語の接頭辞で、「後で」とか「上の」という意味だそうです。「ジェネティクス」というのが遺伝子とか遺伝のことなので、遺伝子の後で働く現象、という意味合いということです。

例えば、遺伝子を本に例えると、エピジェネティクスは、この部分を読んでください、この部分は飛ばしてください、というようにしている付箋のようなものだったり、ある文字・文章の上にマスキングテープでテープを貼って伏字にしている、というようなものだそうです。

小さいころに愛情深く育てられたマウスは、ストレスに強くなるとか、胎児のあいだに栄養状態が悪いと将来、糖尿病にかかる確率が高くなるなどがエピジェネティクスの現象ということのようです。

遺伝子、DNAだけでは、生き物の全体像は捉えられないということだと思いました。

読書記録 - 「菜根譚: 中国の処世訓」 湯浅 邦弘 著 (中公新書)

「菜根譚」という中国の明の時代に書かれた処世訓の解説本です。

中国の3つの大きな思想、儒教、道教、仏教のうち、儒教をベースにして道教、仏教を取り入れて書かれているとのことです。

菜根譚は、いろいろな処世訓が書かれていて、それらのトピックをいろいろと解説しています。

全体的に中庸の精神が大事だ、ということが書かれているように感じました。

豆知識のようなことがらがいっぱい書かれていて面白かったです。

UCI の Breast Cancer Wisconsin (Diagnostic) のデータ分析2 - ロジスティクス回帰と LASSO 回帰で判別

Bing Image Creator で生成: Early Spring in rural area, peaceful landscape, photo

 

www.crosshyou.info

の続きです。前回はデータを R に読み込んで、分析のための前処理をしました。

今回は実際に予測をしてみます。

はじめに、データの様子を見るためにグラフに描いてみます。

boxplot() 関数で箱ひげ図を描いてみましょう。

M = 1 のほうが全体的に大きな値のように見えます。

ggcorrplot ライブラリの ggcorrplot() 関数で相関マトリックスを描いてみます。

各変数同士は正の相関のものが多いようです。

M との相関を見ると、0.7 以上の相関の変数もいくつかあります。

それでは、判別をしてみます。

まずは、トレーニング用、テスト用のデータにわけます。

t.test() 関数で、df_train と df_test の M の平均値を比較して、統計的に有意な違いが無いことを確認しておきます。

df_train のほうは、M の割合は 0.378, df_test のほうは、0.351 です。p-value が 0.59 なので、両者の比率に統計的に有意な違いはありません。

はじめに、glm() 関数でロジスティクス回帰分析で判別してみましょう。

正解率は、94.7% でした。

続いて、LASSO 回帰で判別してみます。

glmnet パッケージを読み込みします。

glmnet はデータフレームではなくて、マトリックスで動かしますので、df_train, df_test からマトリックスを作成します。

cv.glmnet() 関数で LASSO 回帰を実行します。

fit_lasso をプロットしてみます。

モデルの係数を coef() 関数でみてみましょう。

LASSO 回帰では、モデルで使わない変数の係数は . になります。

predict() 関数で予測します。

正解率を計算しましょう。

96.5% の正解率でした。

LASSO 回帰のほうが正解率は高いですが、glm() 関数では、M = 1 のものを 1 つしか誤って 0 と判別しなかったのに対して、glmnet での LASSO 回帰では、4 つも 0 と判別しています。

本当は悪性腫瘍(M = 1)なのに、0 と見逃してしまったのが 4 つもあるので、glm() でのロジスティクス回帰のほうが実用的かもしれないです。

今回は以上です。

 

次回は、

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。

UCI の Breast Cancer Wisconsin (Diagnostic) のデータ分析1 - R にデータを読み込み、分析のための前処理をする

Bing Image Creator で生成: Tropical rainforest with a big flower, photo

今回は、UCI の Breast Cancer Wisconsin (Diagnostic) のデータを R で分析してみようと思います。
Wolberg,William, Mangasarian,Olvi, Street,Nick, and Street,W.. (1995). Breast Cancer Wisconsin (Diagnostic). UCI Machine Learning Repository. https://doi.org/10.24432/C5DW2B.

569 の観測データがあって、30 の変数があるデータです。

まず、tidyverse パッケージを読み込みします。

read_csv() 関数を使ってデータを読み込みます。

元のデータファイルは、変数の名前がないので、col_names = FALSE にしています。

glimpse() 関数を使ってデータフレームの概要を見てみます。

データの説明文章を読むと、1番目の変数は、ID で、2番目の変数が被説明変数で、M だと悪性腫瘍(癌)で、Bだと良性(癌ではない)という意味で、残りの30個の変数は細胞のデータということです。NA は無いそうです。

データを分析しやすいように、

1. はじめの変数 (ID) は削除
2. 2番目の変数を M にして、M なら 1, B なら 0 のダミー変数にする

3. 説明変数を標準化する (後で対数変換するかもしれないので、最小値 1, 最大値 2 にする)

という処理をします。

summary() 関数で前処理が正しくできているか確認します。

X3 ~ X32 までの変数が最小値 1, 最大値 2 と標準化できています。

M の平均値は 0.3726 なので、このデータセットは、37.26% は M(悪性腫瘍) ということですね。

これで前処理は終わりました。

今回は以上です。

 

次回は、

www.crosshyou.info

です。

 

都道府県別の水質汚濁物排出量総合調査のデータ分析7 - R で階層的クラスタリング

Bing Image Creator で生成: Summer season, Landscape, Green Mountains which have snow on the top, yellow flowers, Photo

 

www.crosshyou.info

の続きです。

今回は、R で階層的クラスタリングをしてみようと思います。

まずは、クラスタリングのためのマトリックスを作成します。

それぞれの変数を標準化します。

for loop で各変数を (変数 - 変数の最小値) / (変数の最大値 - 変数の最小値) で最大値が  1、最小値が 0 に変換しました。summary() 関数でマトリックスを処理してみると、どの変数の最小値が 0 、最大値が 1 になっていることがわかります。

dist() 関数で dist オブジェクトを作成します。

hclust() 関数で階層的クラスタリングを実行します。

plot() 関数で結果をグラフにします。

青森県と佐賀県、北海道と鹿児島県、山形県と奈良県が隣同士になっているなど、地理的な位置関係とは全然違うクラスターですね。

5のグループに分けてみます。

左の3つのグループは統合したいですね。

まず、cutree() 関数で5つのグループのラベルを作ります。

2, 3, 5 のグループを統合するといいですね。

3 と 5 を 2 にしてしまいます。

これを、元の mtx に統合します。

続いて、都道府県名も変数に戻し、label3をファクター型に変換します。

各変数同士の散布図を描いて、クラスタリングがうまくできているかどうかをみてみます。

けっこういい感じにわかれています。

他の変数同士の散布図もみてみます。

こちらもクラスタリングを反映していますね。

今回は以上です。

最初から読むには、

www.crosshyou.info

です。

都道府県別の水質汚濁物排出量総合調査のデータ分析6 - R で水質が改善した都道府県、悪化した都道府県を調べた。

Bing Image Creator で生成: Blue image landscape, Japanese local area, splendid moment, photo style

 

www.crosshyou.info

の続きです。

前回は、R でシミュレーションベースの回帰分析を実行しました。l_quality は l_quantity, l_fuka と関連があることがわかりました。

今回は、l_quality が増えたところ、減ったところがどこかを調べたいと思います。

最初に l_quality: 平均水質【mg/l】の対数変換値をグラフにして全体の傾向をみてみます。

前に、l_quality は年度によって大きな違いは無い、ということは確認していましたが、このグラフでも全体的に大きな変化はなくて、2011 年度と 2019 年度を比べると上昇しているところもあれば下落しているところもありますね。

2011年度だけのデータフレームと2019年度だけのデータフレームを作成します。

こうして作成した 2 つのデータフレームを inner_join() 関数で結合します。

inner_join() 関数で 2 つのデータフレームを結合して、mutate() 関数で差分を計算し、relocate() 関数で変数の順番を並び替えました。

これで、どの都道府県が BOD の平均水質を改善させたかわかります。

佐賀県、大分県、静岡県などは水質が改善しました。和歌山県、福島県、宮城県などは水質が悪化しました。

今回は以上です。

次回は、

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。