Rによるデータ分析

Rによる個々のサンプルの因果推論

個々のサンプルの因果推論 をRで実施する時の例です。

変数間の因果推論の方法の応用

変数間の因果推論の方法の応用としては、 Rによる変数の類似度の分析Rによる決定木 で調べる方法があります。

以下の例で使っているサンプルデータでは、X01からX05まであります。 1行目が因果推論をしたいサンプルになっていて、Yの値は「NG」となっています。X03に比較的大きな値が入っています。 1行目以外は、Yの値は「OK」となっています。
Shap値

調べたいサンプルが複数あり、それらのサンプルは特徴が共通していると考えている想定している場合は、 例えば、異常のサンプルのグループのYを「NG」として、その他を「OK」とすれば、複数のサンプルをまとめて分析できます。

決定木の場合

Rによる決定木 のページは、決定木の一般的なデータ分析での使い方になっているのですが、 個々のサンプルの因果推論に使う時は、少しアレンジする必要があります。

まず、個々のサンプルの因果推論では、調べたいサンプルは、1個から数個の事が多いので、葉に含まれる最小サンプル数がデフォルトのままだと、 木が分岐せずに調べられないです。そこで、最小サンプル数を変更します。 また、ランダムフォレストでは多数の木を作りますが、その木の中に調べたいサンプルが含まれない可能性があるので、一般的なランダムフォレストは向かないです。 ランダムフォレストにするなら、変数のランダムサンプリングのみにして、サンプルのランダムサンプリングはしない方が良いです。

以下は、rpartの実施例になります。

setwd("C:/Rtest") # 作業用ディレクトリを変更
library(partykit)
# ライブラリを読み込み
library(rpart)
# ライブラリを読み込み
Data <- read.csv("Data.csv", header=T)
# データを読み込み
treeModel <- rpart(Y ~ ., data = Data,control = rpart.control(minsplit = 1))
# rpartを実行。最小サンプル数は1
plot(as.party(treeModel))
# グラフにする。
Shap値

X03がこのサンプルの特徴になっていることが、導き出せました。

SHAPを計算する方法

以下の例で使っているサンプルデータでは、X01からX05まであり、Yは、X01、X02、X03の線形和になっていて、X04とX05はYに無関係なデータになっています。

1行目が因果推論をしたいサンプルになっていて、X03に比較的大きな値が入っています。
Shap値

SHAPを計算する方法は、1個のサンプルだけを調べる方法になっています。 複数を調べたい場合は、同じ作業を繰り返して、出てきた結果を集計することになります。

ランダムフォレストの場合

library(iml) # ライブラリを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data1 <- Data

Data1$Y <- NULL
# Yの列を消す

library(randomForest)
# ライブラリを読み込み
DataModel = randomForest(Y ~ ., data = Data)
# モデルを作成

predictor = Predictor$new(DataModel, data = Data1, y = Data$Y)
# モデルを作成
shapley = Shapley$new(predictor, x.interest = Data1[1,])
# Shap値を計算(1行目のサンプルの場合)
shapley$plot()
# グラフにする
Shap値

X03がこのサンプルの特徴になっていることが、導き出せました。

重回帰分析(一般化線形モデル)の場合

上記の方法について、モデルを変えたい場合は、真ん中あたりの2行を書き換えます。 例えば、重回帰分析(一般化線形モデル)の場合は以下の2行を入れます。

library(MASS)# ライブラリを読み込み
DataModel = glm(Y ~ ., data=Data, family= gaussian(link = "identity"))
# モデルを作成




Tweet データサイエンス教室