2017-05-04 20 views
0

一連の序数変数に欠損値代入を行っています。マウスを使用する場合、dim(X)は正の長さでなければなりません。

私は最初のデータフレームに読み込まれ、いくつかのクリーニングを実行します。その後、私は取得

# Imputation 
imputation<-function(A){ 
    B<-mice(data = A, m = 5, method = "polr", maxit = 50, seed = 500) 
    C<-complete(B, 'long', include=TRUE) #include=TRUE if include the original dataset with missing values 
print(colnames(C)) 
###pool imputed data 
for (i in 4:ncol(C)) {C[,i]<-as.numeric(as.character(C[,i]))} 
for (j in 4:ncol(C)) {for (i in 1:159) {if (is.na(C[i,j])) {C[i,j]<-round((C[i+159,j]+C[i+159*2,j]+C[i+159*3,j]+C[i+159*4,j]+C[i+159*5,j])/5)}}} 
print(nrow(C)); print(ncol(C)) 
} 

# Quality of life 
# Diet group 1 month 
seb<-subset(df3, select=c(Patient.Trial.ID, Q32a:Q32j)) 
missinganalysis(seb) 
imputation(seb) 

dietgp1m<-read.csv(file='1 Month data-diet.csv',header=TRUE,na.strings=c(""," ","NA",".")) 
for (i in 1:ncol(dietgp1m)) {dietgp1m[,i]<-as.factor(dietgp1m[,i])} 
dietgp1m<-dietgp1m[!is.na(dietgp1m$Patient.Trial.ID),] 
dietgp1m["count"]<-0 
for (i in 1:nrow(dietgp1m)) {dietgp1m$count[i]<-0; for (j in 9:298) {if (!is.na(dietgp1m[i,j])) {dietgp1m$count[i]<-dietgp1m$count[i]+1}}} 
dietgp1m<-dietgp1m[dietgp1m$count!=0,] 

は、その後、私はデータセットのサブセットと機能を実行し、値の帰属を逃すための関数を作成しますエラーメッセージ:

iter imp variable 
    1 1 Q32a 
Error in apply(draws, 2, sum) : dim(X) must have a positive length 
Called from: apply(draws, 2, sum) 

助けてください!ありがとうございました!

答えて

0

このエラーメッセージも数回受信されました。いくつかのコード実験をした後、私はそのようなメッセージを得た理由を知りました。(a)変数の欠損数が非常に少ない(その変数のみに1つのケースが欠落しています)、(b) (例えば、バイナリ変数を代入するためにpolrメソッドを使用するなど)その変数に '間違った'代入メソッドを割り当てます。これを修正したら、imputationメソッドをそのバイナリ変数の 'logreg'に設定して、エラーメッセージの表示を停止しました。

これがあなたのケースであるかどうかはわかりませんが、私はいくつかのデータスクリーニングをお勧めしたいと思います。それぞれのケースの欠損値の数をチェックし、それぞれの変数に '正しい'代入メソッドを割り当てることができます(pmm-pmmを使用していない場合は、コメントはこちら:https://statisticalhorizons.com/predictive-mean-matching)。

method=c('logreg', 'polr', 'pmm', 'polyreg', 'polr') 

希望:あなたはV1(バイナリ)、V2(注文)、V3(連続)、V4(multinom)、およびV5(注文)を持っている場合は、あなたのようにメソッドを設定することができます。例えば

、これは役に立ちます。

関連する問題