はじめに
MatchItのバージョン4.3.0ではmatchitのformulaの共変量にcharacter型を使用すると,
Error: Non-finite values are not allowed in the covariates.
とエラーが出てしまうというお話です.
character型の共変量をfactor型に変換するか、MatchItを4.2.0にダウングレードすることで解決できます.
状況
効果検証入門〜正しい比較のための因果推論/計量経済学の基礎のコードの写経をしていた所,
傾向スコアマッチングの章で
> m_near <- matchit(formula = treatment ~ recency + history + channel,
data = biased_data,
method = "nearest",
replace = TRUE)
> ###エラー: Non-finite values are not allowed in the covariates.
というエラーが出現しました.
※ formula内のchannel
のみcharacter型.recency
とhistory
はdouble型.
環境
windwos 10
R version 4.1.1
library("tidyverse")
library("broom")
library("WeightIt")
library("cobalt")
library("Matching")
原因
MatchIt4.3.0のコード(2021/9/13更新)によると,
> if (any(!is.finite(covs[[i]]))) stop("Non-finite values are not allowed in the covariates.", call. = FALSE)
の部分が該当するようです.
!is.finite()
は数値型やfactor型はFALSE
,character型はTRUE
となり,これがcharacter型でエラーが出ている原因のようです.
> if (is.character(covs[[i]])) covs[[i]] <- factor(covs[[i]])
と次の行にはあるので順番を間違えた可能性も.
解決策
character型の共変量をfactor型に変換するか、MatchItを4.2.0にダウングレードすることで解決できます.
どちらでも解決できるので,必要に応じて使い分けてください.
character型の共変量ををFactor型に変換する
共変量として渡すものをfactor型に変換します.
> biased_data <- mutate(biased_data,channel=as.factor(channel)) #factorへ変換
> m_near <- matchit(formula = treatment ~ recency + history + channel,
data = biased_data,
method = "nearest",
replace = TRUE)
再現にこだわらないのであればこちらで問題ないと思います.
MatchItを4.2.0にダウングレードする
CRANからMatchIt4.2.0をダウンロード,再実行します.
R パッケージのバージョンを修正するによるとダウングレードの方法は以下の三通りあるそうです.
- devtools パッケージ を使用します.
- CRAN アーカイブ からパッケージ ファイルをダウンロードして インストールします.
- CRAN スナップショットを使用します.
今回はCRANアーカイブからパッケージファイルをダウンロードしてインストールする方法で実行しています.
MatchItのアーカイブは以下のリンクからダウンロードできます.
適当な場所に保存して
> remove.packages("MatchIt") #MatchItパッケージの削除
> install.packages("パッケージをダウンロードしたディレクトリ/MatchIt_4.2.0.tar.gz", repos = NULL, type = "source")
読み込めれば完了です.
> Warning in install.packages :
パッケージ ‘MatchIt’ は使用中のため,インストールされません
とエラーが出る場合は
> detach("package:MatchIt", unload=TRUE)
> remove.packages("MatchIt") #MatchItパッケージの削除
> install.packages("パッケージをダウンロードしたディレクト/MatchIt_4.2.0.tar.gz", repos = NULL, type = "source")
Rで読み込んだライブラリをunloadしてからパッケージを削除して再インストールすれば完了です.
参考文献