R でダミー変数を作成して解釈する

Jesse John 2023年6月21日
  1. R に fastDummys パッケージをインストールする
  2. dummy_cols() 関数を使用して R でダミー列を作成する
  3. ダミー変数の解釈
R でダミー変数を作成して解釈する

この記事では、R で fastDummies パッケージの dummy_cols() 関数を使用してダミー変数を作成する方法を説明します。ダミー変数とダミー列という言葉は同じ意味で使用されます。

R に fastDummys パッケージをインストールする

fastDummies パッケージをインストールしてロードする必要があります。

コード例:

# Install the fastDummies package.
install.packages("fastDummies")

# Load the fastDummies package.
library(fastDummies)

ここで、カテゴリ変数を含む小さなデータ フレームを作成します。

コード例:

# Vectors.
cv = c("Bd", "Ba", "F", NA, "F", "F", "Ba")
nv = seq(1:7)

# Data Frame
orig_datf = data.frame(Num_V = nv,Cat_V=as.factor(cv))

# View the data frame.
orig_datf

str(orig_datf)

出力:

> str(orig_datf)
'data.frame':	7 obs. of  2 variables:
 $ Num_V: int  1 2 3 4 5 6 7
 $ Cat_V: Factor w/ 3 levels "Ba","Bd","F": 2 1 3 NA 3 3 1

表示されているように、データ フレームには 3 因子レベルのカテゴリ変数があります。

R は、アルファベット順に基づいて因子レベルを割り当てます。 この詳細は、ダミー変数を作成するときに重要です。

dummy_cols() 関数を使用して R でダミー列を作成する

ダミー変数を作成する列を指定しない場合、関数はすべての因子または文字型の列からダミー列を作成します。

コード例:

new_datf_default_all = dummy_cols(orig_datf)
new_datf_default_all

names(new_datf_default_all)

出力:

> names(new_datf_default_all)
[1] "Num_V"    "Cat_V"    "Cat_V_Ba" "Cat_V_Bd" "Cat_V_F"  "Cat_V_NA"

列のリストで次のことを確認します。

  1. カテゴリ変数には 3つのカテゴリがあったため、3つの新しい列が表示されます。
  2. categorical 列には欠損値 (NA) があったため、値 1 の NA を示す 1つの列もあります。他のすべてのダミー列には NA がありますが、元の列には NA がありました。

R で選択した列からダミー変数を作成する

選択した列のみからダミー変数を作成するには、select_columns 引数を使用できます。 単一の列名を文字列として、複数の列をベクトルとして渡すことができます。

コード例:

# Pass a single column.
new_datf_select_cols = dummy_cols(orig_datf, select_columns = "Cat_V")

# Pass multiple columns using a vector.
new_datf_select_cols = dummy_cols(orig_datf, select_columns = c("Cat_V"))

R で多重共線性を回避するために 1つの列を削除する

因子列のすべてのレベルを使用してダミー変数を作成すると、新しい列は線形従属になります。 つまり、各行について、他のすべての列の値が与えられれば、最後の列の値を予測できます。

これは、統計分析 (線形回帰など) の結果に影響します。 したがって、ダミー変数を作成する元の列ごとに、ダミー列の 1つを削除する必要があります。

dummy_cols() 関数は 2つのオプションを提供します。 remove_first_dummy = TRUE または remove_most_frequent_dummy = TRUE のいずれかに設定できます。

次のコードは、両方のオプションを調べます。

コード例:

# Remove first.
new_datf_remove_first = dummy_cols(orig_datf, remove_first_dummy = TRUE)

# After removing first.
names(new_datf_remove_first)

# Remove most frequent.
new_datf_remove_most_frequent = dummy_cols(orig_datf, remove_most_frequent_dummy = TRUE)

# After removing most frequent
names(new_datf_remove_most_frequent)

出力:

> # After removing first.
> names(new_datf_remove_first)
[1] "Num_V"    "Cat_V"    "Cat_V_Bd" "Cat_V_F"  "Cat_V_NA"

> # After removing most frequent
> names(new_datf_remove_most_frequent)
[1] "Num_V"    "Cat_V"    "Cat_V_Ba" "Cat_V_Bd"

2つのコマンドの出力で、次の点に注意してください。

  1. 引数 remove_first_dummy = TRUE は、因子の最初のレベルに対応する列を削除しました。

  2. 引数 remove_most_frequent_dummy = TRUE は、元の列で最も頻繁に出現するレベルに対応する列を削除しました。

    ただし、NA がどこにあるかを示す列を削除する効果もありました。 ignore_na = FALSE を設定しても、出力には影響しませんでした。

NA 列を保持し、最も頻度の高い因子を削除する場合は、次の回避策を使用できます。

  1. まず、relevel() 関数を使用して因子列を relevel します。 最も頻度の高い値を第 1 レベルにします。
  2. 次に、remove_first_dummy = TRUE を使用します。

コード例:

releveled_datf = orig_datf

# Relevel the desired column manually.
releveled_datf$Cat_V  = relevel(releveled_datf$Cat_V, ref = "F")

# View the new levels.
levels(releveled_datf$Cat_V)

# NOW, remove first.
releveled_datf_remove_first = dummy_cols(releveled_datf, remove_first_dummy = TRUE)

# After removing first.
names(releveled_datf_remove_first)

出力:

> levels(releveled_datf$Cat_V)
[1] "F"  "Ba" "Bd"

> # After removing first.
> names(releveled_datf_remove_first)
[1] "Num_V"    "Cat_V"    "Cat_V_Ba" "Cat_V_Bd" "Cat_V_NA"

ダミー変数の解釈

線形回帰の設定では、切片係数には、元の列のベース レベル (または削除されたレベル) の効果が含まれていると言われています。 ダミー列を作成したときに 1つの列を削除したことを思い出してください。

削除された係数は、同じ元の列から作成されたすべてのダミー列の値が 0 であると解釈されます。 したがって、その効果は切片に含まれます。

各ダミー列の係数は、基準水準と比較したその因子水準によって生じる差に対応します。 これは、この係数の値に応じて、ベースラインと比較して正または負の効果になる可能性があります。

この解釈のため、最も頻度の高い要因に対応する列を削除すると便利です。

著者: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

関連記事 - R Variable