質問:
単に平均を代入するよりも洗練されたビッグデータのRでの高速欠測データの代入?
user5054
2014-05-20 07:10:52 UTC
view on stackexchange narkive permalink

Rでの欠測データ補完用のパッケージが必要です。しかし、ビッグデータを扱っているため、欠測データエントリの数も多くなる可能性があります。平均または中央値を使用して代入するパッケージはもちろん高速に動作しますが、回帰またはPCAを使用して代入するより複雑なパッケージは、多数の欠落値に対して時間がかかりすぎます。 missMDA missForest を試しましたが、私が言ったように、それらは永遠にかかるように見えます。 FastImputation という名前のパッケージがありますが、一部のトレーニングデータからパターンがない場合、その使用方法がわかりませんでした。迅速に帰属するパッケージの提案はありますか?

あなたのビッグデータはどれくらい*大きい*ですか?
これは、列として約10000個の遺伝子、行として数百人の患者の遺伝子発現マトリックスです。また、欠落している値の数は、すべてのマトリックスエントリの80%になる可能性があります
「missMDA」パッケージの「imputePCA」の「threshold」および「maxiter」パラメーターを操作すると、「imputePCA」によって実行される入力を固定するのに大いに役立ちます(もちろん、非常に高い精度が必要ない場合)。
本当に代入が必要だと何を分析したいですか?利用可能なケース分析が機能しないのはなぜですか?
二 答え:
Helgi Guðmundsson
2014-09-07 03:21:48 UTC
view on stackexchange narkive permalink

マウス(連鎖方程式による多重代入)を使用しました。それはかなり速く、そして非常に簡単です。私は3000obsでそれを使用しました。 c.a. 10個の変数。古いコンピューターで10分で完了。さらに、これは世の中で最高の多重代入パッケージの1つだと思います。回帰を使用して、他の方法の中でも特に代入できます。

代入する変数を使用してデータフレームを作成する必要があり、その変数の値を予測する可能性のあるすべての変数を含めます(したがって、モデル内のすべての変数+場合によっては他の変数も)。マウスパッケージは、そのデータフレーム内のすべての欠落値を代入します。

代入の最も簡単な方法。 5つの代入データと元のデータを含むデータフレーム Datimp を提供します。データ。

  library(mice)#m = 5多重代入の数#maxit = 10反復の数。 10〜20で十分です。imp<-マウス(Dat1、m = 5、maxit = 10、printFlag = TRUE)Datimp <- complete(imp、 "long"、include = TRUE)write.table(Datimp、 "C:/ ... / impute1.txt "、sep =" \ t "、dec ="、 "、row.names = FALSE) 

これを行うためのより良い方法は次のとおりです。

  library(mice)Dat1 <-サブセット(Dat、select = c(id、faculty、gender、age、job、salary))#変数のサブセットを作成#代入するか、代入の予測子として使用するのが好きです。ini<-mouse(Dat1、maxit = 0、pri = F)pred <- ini $ pred pred [、c( "id"、 "faculty")] <-0#予測子として使用したくない変数(ただし、#データセットに含めたいので、後で追加することはできません。meth<-ini $ methmeth [c( "id"、 "faculty"、 "gender"、 "age" 、 "job")] <- ""#変数を代入するための予測方法を選択します。ここではこれらの変数を代入したくないので、 ""(空、mehodなし)を選択します。imp<-mouse (Dat1、m = 5、maxit = 10、printFl ag = TRUE、pred = pred、meth = meth、seed = 2345)Datimp <- complete(imp、 "long"、include = TRUE)write.table(Datimp、 "C:/.../ impute1.txt"、
sep = "\ t"、dec = "、"、row.names = FALSE) 

入力が適切かどうかを確認します:

  library(lattice)com <- complete(imp、 "long"、inc = T)col <- rep(c( "blue"、 "red")[1 + as.numeric(is.na( imp $ salary))]、6)stripplot(salary〜.imp、data = com、jit = TRUE、fac = 0.8、col = col、pch = 20、xlab = "Imputation number"、cex = 0.25)densityplot(salary 〜.imp、data = com、jit = TRUE、fac = 0.8、col = col、pch = 20、xlab = "Imputation number"、cex = 0.25)long <- complete(imp、 "long")levels(long $ .imp)<- paste( "Imputation"、1:22)long <- cbind(long、salary.na = is.na(imp $ data $ salary))densityplot(〜salary | .imp、data = long、group = salary、plot.points = FALSE、ref = TRUE、xlab = "Salary"、scales = list(y = list(draw = F))、par.settings = simpleTheme(col.line = rep(c( "blue" 、 "red")))、auto.key = list(columns = 2、text = c( "Observed"、 "Imputed"))) 

最後に、そして重要なことに。新しいデータセットを保存して、代入された値を通常の観測値として使用することはできません。 プールされた回帰またはプールされたlmer を使用します...したがって、入力された値の不確実性が考慮されます。

  fit1 <- with (imp、lm(salary〜gender、na.action = na.omit))summary(est <- pool(fit1))pool.r.squared(fit1、adjusted = FALSE) 
実際、 `mice`を使用すると、欠落している値をどのように埋めるかを指定できます。単純な回帰は、多くの方法の1つにすぎません。また、コードチャンクは不正確です。 `complete(imp)`を指定すると、5つの代入のうち最初の代入のみが返されます。
はい、その通りです。この回答を書いてから、コードを改善しました。私の記憶が正しければ、コマンドは `long(imp)`であり、すべての代入を取得します。 `Datimp <-long(imp、include = TRUE)`は、代入されたデータセットを含む元のデータセットを含みます。
コードを改善し、改善点を共有したい場合は、回答の左下隅に「編集」ボタンがあります。
Adam Robinsson
2014-08-01 01:11:31 UTC
view on stackexchange narkive permalink

Hmiscパッケージは、おそらくインピュテーション関数(aregImpute)を使用してこれを実行できます。列はたくさんありますが、行は少ないことに同意します。おそらくHiscによって処理されるはずです...

これについて詳しく説明し、 `Hmisc`パッケージを使用してこれを行う例を提供できますか?


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...