LoginSignup
2
0

More than 1 year has passed since last update.

Error: Non-finite values are not allowed in the covariates.

Last updated at Posted at 2021-10-13

はじめに

MatchItのバージョン4.3.0ではmatchitのformulaの共変量にcharacter型を使用すると,
Error: Non-finite values are not allowed in the covariates.
とエラーが出てしまうというお話です.

character型の共変量をfactor型に変換するか、MatchItを4.2.0にダウングレードすることで解決できます.

状況

効果検証入門〜正しい比較のための因果推論/計量経済学の基礎のコードの写経をしていた所,
傾向スコアマッチングの章で

ch3_pscore.R
> 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型.recencyhistorydouble型.

環境

windwos 10
R version 4.1.1

MatchIt以外で使用しているライブラリ
library("tidyverse")
library("broom")
library("WeightIt")
library("cobalt")
library("Matching")

原因

MatchIt4.3.0のコード(2021/9/13更新)によると,

matchit.r
> if (any(!is.finite(covs[[i]]))) stop("Non-finite values are not allowed in the covariates." call. = FALSE)

の部分が該当するようです.
!is.finite()は数値型やfactor型はFALSEcharacter型はTRUEとなり,これがcharacter型でエラーが出ている原因のようです.

matchit.r
> if (is.character(covs[[i]])) covs[[i]] <- factor(covs[[i]])

と次の行にはあるので順番を間違えた可能性も.

解決策

character型の共変量をfactor型に変換するか、MatchItを4.2.0にダウングレードすることで解決できます.
どちらでも解決できるので,必要に応じて使い分けてください.

character型の共変量ををFactor型に変換する

共変量として渡すものをfactor型に変換します.

> biased_data <- mutate(biased_datachannel=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してからパッケージを削除して再インストールすれば完了です.

参考文献

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0