R による欠損データの代入; MICEパッケージ (2024)

データセットを分析する場合、データの欠落はそれほど簡単な問題ではない可能性があり、それを説明することも通常はそれほど簡単ではありません。欠損データの量がデータセットのサイズに比べて非常に小さい場合、分析に偏りを生じさせないためには、欠損特徴のある少数のサンプルを除外することが最善の戦略である可能性がありますが、利用可能なデータポイントを除外すると、データの一部が失われます。直面する状況によっては、有用な可能性のあるデータポイントをデータセットから消去する前に、他の修正を探す必要がある場合があります。

アップデート

MICE パッケージを使用して欠損データを代入するための簡略化されたアプローチは、次の場所にあります。MICE パッケージを使用した欠落データの処理;シンプルなアプローチ

場合によっては、平均値の置換などの簡単な修正で問題ない場合もありますが、そのような単純なアプローチは通常、データに偏りをもたらします。たとえば、平均値の置換を適用すると、平均は変化しないままになりますが (これは望ましいことです)、分散は減少するため、望ましくない場合があります。

R のマウス パッケージは、欠損値を妥当なデータ値で代入するのに役立ちます。これらの妥当な値は、欠落しているデータポイントごとに特別に設計された分布から抽出されます。

この投稿では、 を使用して欠損値を代入します。大気質データセット (R で利用可能)。
この記事では、データセットからいくつかのデータポイントを削除します。

data <- airqualitydata[4:10,3] <- rep(NA,7)data[1:5,4] <- NA

カテゴリ変数に関する限り、通常、カテゴリ変数を置き換えることはお勧めできません。一般的な方法としては、欠落しているカテゴリ変数を観測された変数の最頻値で置き換えることが挙げられますが、それが良い選択であるかどうかは疑問です。この場合、カテゴリ変数に欠落しているデータポイントはありませんが、それらをデータセットから削除し (必要に応じて後で追加できます)、次を使用してデータを確認します。まとめ()

データ <- データ[-c(5,6)]概要(データ)オゾンソーラーR 風温 最小値 : 1.00 最小値 : 7.0 最小値 : 1.700 最小値 :57.00 第 1 四半期: 18.00 第 1 四半期:115.8 第 1 四半期: 7.400 第 1 四半期:73.00 中央値 : 31.50 中央値 :205.0 中央値 : 9.700 中央値 :79.00 平均値 : 42.13 平均値 :185.9 平均値 : 9.806 平均値 :78.28 第 3 クォーター: 63.25 第 3 クォーター:258.8 第 3 クォーター:11.500 第 3 クォーター:85.00 最大値 :168.00 最大値 :334.0 最大値:20.700 最大:97.00 NA :37 NA :7 NA :7 NA :5

明らかに、オゾンは最も欠落しているデータポイントを持つ変数です。以下では、欠落データのパターンをさらに詳しく掘り下げていきます。

欠損データの迅速な分類

欠落データには 2 つのタイプがあります。

  • MCAR: 完全にランダムに欠落します。これは、データが欠落している場合に望ましいシナリオです。
  • MNAR: ランダムではなく欠落しています。ランダムではないデータが欠落していることはより深刻な問題であり、この場合、データ収集プロセスをさらに確認し、情報が欠落している理由を理解しようとすることが賢明かもしれません。たとえば、アンケートの参加者のほとんどが特定の質問に回答しなかった場合、なぜ回答したのでしょうか?質問がわかりにくかったですか?

データが MCAR であると仮定すると、欠落データが多すぎることも問題になる可能性があります。通常、大規模なデータセットの場合、安全な最大しきい値は合計の 5% です。特定の特徴またはサンプルの欠損データが 5% を超えている場合は、おそらくその特徴またはサンプルを除外する必要があります。したがって、単純な関数を使用して、データの 5% 以上が欠落している特徴 (列) とサンプル (行) をチェックします。

pMiss <- function(x){sum(is.na(x))/length(x)*100}apply(data,2,pMiss)apply(data,1,pMiss)オゾンソーラー.R 風温 24.183007 4.575163 4.575163 3.267974 [1] 25 25 25 50 100 50 25 25 25 50 25 0 0 0 0 0 0 0 0 0 0 [22] 0 0 0 25 25 50 0 0 0 0 25 25 25 25 25 25 0 25 0 0 25 [43] 25 0 25 25 0 0 0 0 0 25 25 25 25 25 25 25 25 25 25 0 0 [64] 0 25 0 0 0 0 0 0 25 0 0 25 0 0 0 0 0 0 0 25 25 [85] 0 0 0 0 0 0 0 0 0 0 0 25 25 25 0 0 0 25 25 0 0 [106] 0 25 0 0 0 0 0 0 0 0 25 0 0 0 25 0 0 0 0 0 0 0[127] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0[148] 0 0 25 0 0 0

オゾンではデータポイントのほぼ 25% が欠落していることがわかります。そのため、オゾンを解析から除外するか、より多くの測定値を収集することを検討するかもしれません。他の変数は 5% のしきい値を下回っているため、そのまま保持できます。サンプルに関する限り、特徴が 1 つだけ欠落していると、サンプルごとに 25% のデータが欠落することになります。 2 つ以上の特徴 (>50%) が欠落しているサンプルは、可能であれば削除する必要があります。

マウスを使用して欠損データのパターンを調べる

ネズミパッケージは素晴らしい機能を提供しますmd.pattern()欠損データのパターンをより深く理解するため

ライブラリ(マウス)md.パターン(データ)温度 ソーラー.R 風力 オゾン 104 1 1 1 1 0 34 1 1 1 0 1 4 1 0 1 1 1 3 1 1 0 1 1 3 0 1 1 1 1 1 1 0 1 0 2 1 1 1 0 0 2 1 1 0 0 1 2 1 0 1 0 1 2 1 0 0 0 0 4 5 7 7 37 56

出力は、104 個のサンプルが完了し、34 個のサンプルがオゾン測定値のみを欠落し、4 個のサンプルが Solar.R 値のみを欠落していることを示します。

おそらくより役立つ視覚的表現は、VIM次のようにパッケージ化します

library(VIM)aggr_plot <- aggr(data,col=c('navyblue','red'),numbers=TRUE,sortVars=TRUE,labels=names(data),cex.axis=.7,gap=3, ylab=c("欠損データのヒストグラム","パターン"))


このプロットは、サンプルのほぼ 70% には情報が欠落しておらず、22% にはオゾン値が欠落しており、残りのサンプルには他の欠落パターンが示されていることがわかります。私の意見では、このアプローチを通じて、状況はもう少し明確になるように見えます。

もう 1 つの (できれば) 役に立つ視覚的なアプローチは、特別な箱ひげ図です。

marginplot(データ[c(1,2)])


明らかに、ここでは一度に 2 つの変数しかプロットできないという制約がありますが、それでもいくつかの興味深い洞察を収集することができます。
左側の赤いボックス プロットは、Ozone が欠落している Solar.R の分布を示し、青いボックス プロットは残りのデータポイントの分布を示します。グラフの下部にあるオゾン ボックス プロットも同様です。
MCAR データの仮定が正しければ、赤と青のボックス プロットは非常に似ていると予想されます。

欠損データの代入

マウス()関数は代入プロセスを処理します

tempData <- マウス(データ,m=5,maxit=50,meth='pmm',seed=500)summary(tempData)乗算代入データ setCall:mice(data = data, m = 5, method = "pmm", maxit = 50, seed = 500)複数代入の数: 5 列ごとの欠落セル: Ozone Solar.R Wind Temp 37 7 7 5 代入メソッド: Ozone Solar.R Wind Temp "pmm" "pmm" "pmm" "pmm" VisitSequence: Ozone Solar.R Wind Temp 1 2 3 4 PredictorMatrix: Ozone Solar.R Wind TempOzone 0 1 1 1Solar.R 1 0 1 1Wind 1 1 0 1Temp 1 1 1 0ランダム ジェネレーター シード値: 500

パラメーターに関するいくつかの注意事項:

  • m=5代入されたデータセットの数を指します。デフォルト値は 5 です。
  • meth='pmm'インピュテーション法を指します。この場合、補完方法として予測平均マッチングを使用しています。他の代入方法も使用できます。次のように入力します。方法(マウス)利用可能な補完方法のリストについては、

たとえば変数 Ozone など、代入されたデータを確認したい場合は、次のコード行を入力する必要があります。

tempData$imp$オゾン1 2 3 4 55 13 20 28 12 910 7 16 28 14 2025 8 14 14 1 826 9 19 32 8 37...

出力には、各代入データセット (上部の 1 行目) 内の各観測値の代入データ (左の 1 列目) が表示されます。
各変数に使用されている代入方法を確認する必要がある場合は、ネズミとても簡単にできます

tempData$methオゾンソーラー.R 風温 "pmm" "pmm" "pmm" "pmm"

これで、次を使用して完成したデータセットを取得できます。完了()関数。ほぼ平易な英語です:

completedData <- complete(tempData,1)

欠損値は、5 つのデータセットのうちの最初の代入値に置き換えられています。別のパラメータを使用したい場合は、完了()関数。

元のデータと代入されたデータの分布の検査

いくつかの便利なプロットを使用して、元のデータと代入されたデータの分布を比較してみましょう。
まず、散布図を使用して、他のすべての変数に対してオゾンをプロットします。

xyplot(tempData,Ozone ~ Wind+Temp+Solar.R,pch=18,cex=1)

ここにあります

私たちが確認したいのは、マゼンタの点の形状 (推定) が青の点の形状 (観察) と一致することです。一致する形状は、代入された値が確かに「妥当な値」であることを示しています。
もう 1 つの役立つプロットは密度プロットです。

密度プロット(tempData)


各代入データセットの代入データの密度はマゼンタで示され、観測データの密度は青で示されます。繰り返しますが、以前の仮定の下では、分布は同様であると予想されます。
分布に関するもう 1 つの有用な視覚的見解は、次のコマンドを使用して取得できます。ストリッププロット()変数の分布を個々の点として表示する関数

ストリッププロット(tempData、pch = 20、cex = 1.2)

プーリング

分析の次のステップは、線形モデルをデータに適合させることだとします。どの代入データセットを選択すればよいか疑問に思うかもしれません。のネズミこのパッケージを使用すると、モデルを各代入データセットに適合させ、結果を一緒にプールすることが再び非常に簡単になります。

modelFit1 <- with(tempData,lm(Temp~ Ozone+Solar.R+Wind))summary(pool(modelFit1))est set df Pr(>|t|)(切片) 72.812078768 2.95380500 24.650266 84.18464 0.000000e+00オゾン 0.163094287 0.02607674 6.254397 57.78569 5.236 295e-08太陽光R 0.009679676 0.00789576 1.225933 37.48960 2.278691e-01風力 -0.352582008 0.21639828 -1.629320 92.89136 1.066321e-01 lo 95 hi 95 nmis fmi ラムダ(切片) 66.938301817 78.68585572 NA 0.1477818 0.1277731オゾン 0.110891894 0.21529668 37 0.2155848 0.1888975Solar.R -0.006 311604 0.02567095 7 0.3004189 0.2640672風 -0.782312735 0.07714872 0 0.1300747 0.1115442

変数モデルフィット1には、代入されたデータセットに対して実行されたフィッティングの結果が含まれます。プール()関数はそれらをすべてプールします。どうやら、オゾン変数だけが統計的に有意であるようです。
典型的な列以外にも他の列があることに注意してください。lm()モデル: fmi には欠損情報の一部が含まれますが、lambda は欠損データに起因する合計分散の割合です。詳細については、ページの下部にある論文を参照することをお勧めします。

初期化したことを思い出してください。ネズミ特定のシードを使用して関数を実行するため、結果は最初の選択に多少依存します。この影響を軽減するには、デフォルトの値を変更することで、より多くのデータセットを代入できます。m=5のパラメータマウス()次のように機能します

tempData2 <- マウス(data,m=50,seed=245435)modelFit2 <- with(tempData2,lm(Temp~ Ozone+Solar.R+Wind))summary(pool(modelFit2))EST SE T DF PR(> | T |)(INTERCEPT)73.156084276 2.803010282 26.099114 129.3154 0.00000000E+00OZONE 0.166242781 0.02492696 6.669192 118.44408 8.644431E-R 0.001010SOR.000SOR.000SOR.000101010101010101010101010101010年0.2503503510101010年0.2503503503501010101010年0.2503503503503503502 26839 114.5471 2.223989E -01WIND -0.382700790 0.202976584 -1.885443 136.6735 6.149264E -02 lo 95 hi 95 nmis fmi ラムダ(切片) 67.610387851 78.70178070 NA 0.11141367 0.0977762オゾン 0.116882484 0.21560308 37 0.16290744 0.1488906Solar.R -0.0 05560458 0.02365413 7 0.18096774 0.1667911風 -0.784081566 0.01867999 0 0.07425875 0.0608104

ランダム シードの初期化を考慮した後、(この場合) 前とほぼ同じ結果が得られ、Ozone のみが統計的有意性を示しました。

この投稿の完全なコードを含む要点は次のとおりです。ここ

この投稿をお読みいただきありがとうございます。ご質問がある場合は、以下にコメントを残してください。

注: このテクニックは、次のタイトルの論文で学びました。マウス: R の連鎖方程式による多変量代入ステフ・ヴァン・ブーレン著。これは素晴らしい論文なので、多重代入に興味があるなら読むことを強くお勧めします。

ベスト R パッケージMICEパッケージ欠損値

R による欠損データの代入; MICEパッケージ (2024)
Top Articles
Latest Posts
Article information

Author: Manual Maggio

Last Updated:

Views: 6668

Rating: 4.9 / 5 (49 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Manual Maggio

Birthday: 1998-01-20

Address: 359 Kelvin Stream, Lake Eldonview, MT 33517-1242

Phone: +577037762465

Job: Product Hospitality Supervisor

Hobby: Gardening, Web surfing, Video gaming, Amateur radio, Flag Football, Reading, Table tennis

Introduction: My name is Manual Maggio, I am a thankful, tender, adventurous, delightful, fantastic, proud, graceful person who loves writing and wants to share my knowledge and understanding with you.