2017-02-10 10 views
0

私は半疎である行列を持っています。すべての細胞の半分が空白(na)なので、私が 'マウス'を走らせようとするとき、それらはすべてマウスで動こうとします。私はサブセットに興味があります。'R'、 'mice'、変数代用がありません - スパース行列で1列のみを行う方法

質問:次のコードでは、「マウス」を最初の2つの列でのみ動作させる方法を教えてください。以前の行の内容が現在の行のパッチホールに役立つように、行遅延または行頭を使用してこれを行うためのきれいな方法がありますか?私は答えを見ている

set.seed(1) 

#domain 
x <- seq(from=0,to=10,length.out=1000) 

#ranges 
y <- sin(x) +sin(x/2) + rnorm(n = length(x)) 
y2 <- sin(x) +sin(x/2) + rnorm(n = length(x)) 

#kill 50% of cells 
idx_na1 <- sample(x=1:length(x),size = length(x)/2) 
y[idx_na1] <- NA 

#kill more cells 
idx_na2 <- sample(x=1:length(x),size = length(x)/2) 
y2[idx_na2] <- NA 

#assemble base data 
my_data <- data.frame(x,y,y2) 

#make the rest of the data 
for (i in 3:50){ 


    my_data[,i] <- rnorm(n = length(x)) 
    idx_na2 <- sample(x=1:length(x),size = length(x)/2) 
    my_data[idx_na2,i] <- NA 

} 

#imputation 
est <- mice(my_data) 

data2 <- complete(est) 

str(data2[,1:3]) 

場所:

+1

多くの欠損値代入メソッドは、すべての変数の結合分布を推定することによって機能するため、すべての列の欠損値を再帰的に埋めてすべての値の結合分布をより正確に推定します。あなたがすべての列でそれを行うなら、帰属はより良いです。帰属している値を削除したい場合は、欠損値のデータフレームを保存するだけで、失われているカラムに帰属している値をリセットすることができます: 'is.na(dataframe)' –

答えて

0

あなたの質問ではありません私には完全に明確です。 2つの列だけを操作したいと言っていますか?その場合はmice(my_data[,1:2])が動作します。または、すべてのデータを使用したいが、一部の列に欠損値のみを記入したいとしますか?これを行うために、私は次の行に沿って指標のマトリックスを作成したい:あなたの最後の質問については

isNA <- data.frame(apply(my_data, 2, is.na)) 
est <- mice(my_data) 

mapply(function(x, isna) { 
    x[isNA == 1] <- NA 
    return(x) 
}, <each MI mice return object column-wise>, isNA) 

、「私はデータ代入ローリングためmiceを使用することができますか?」私は答えがノーだと信じています。しかし、ドキュメントをもう一度確認してください。

+0

私は、それは、関連する列とメソッドを持つ構造体を構築したため、「マウス」をゼロにします。それから私はすべての列のメソッドを設定しますが、関心の1つは ""と考えられていませんでした。行列を使用して、どの列が代入のためにどの変数に供給されているかを言うことができます。 – EngrStudent

+0

@EngrStudentあなたのコメントは私には完全にはっきりしていません。私は文字通りそれを全く理解していない...そしてあなたのOPはまだ私には不明だ –

+0

私は月曜日にここにコードを入れたいと思う。 – EngrStudent

関連する問題