我有一个DF(dfNA),每列中包含少量缺失数据。此数据帧是较大数据帧(wideRawDF)的子集,我想要将其丢失。
为了估算数据,我需要确定数据是否缺少MCAR / NMAR / MAR,以便我可以应用正确的插补方法。
colsNA是包含NA值的列的字符串,它的推导如下:
colsNA <- colnames(wideRawDF)[colSums(is.na(wideRawDF)) > 0]
> str(colsNA)
chr [1:9] "DO0182U09A3" "DO0182U09B3" "DO0182U09C3" "DO0182U21A1" "DO0182U21A2" "DO0182U21A3" "DO0182U21B1" ...
为了简化并更好地理解为什么我在使用TestMCARNormality时出错,我决定只传递NA值的列,而不是包含完整值的列。
我将wideRawDF子集化如下:
dfNA <- wideRawDF[colsNA]
TestMCARNormality
是一个测试缺失数据是否为MCAR的函数。
使用此功能,当我将dfNA传递给它时,我收到以下错误:
R> library("MissMech")
R> TestMCARNormality(dfNA)
Warning: More than one missing data pattern should be present.
Error in TestMCARNormality(dfNA) :
由于我的数据框中缺少值,我无法弄清楚错误的含义:
> apply(dfNA, 2, function(x) any(is.na(x)))
DO0182U09A3 DO0182U09B3 DO0182U09C3 DO0182U21A1 DO0182U21A2 DO0182U21A3 DO0182U21B1 DO0182U21B2 DO0182U21B3
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
我的数据框中还包含数字数据:
> str(dfNA)
'data.frame': 1343 obs. of 9 variables:
$ DO0182U09A3: num -102 -101 -101 -101 -101 ...
$ DO0182U09B3: num -103.4 -102.8 -103.3 -95.9 -103 ...
$ DO0182U09C3: num -103.9 -104.2 -103.9 -99.2 -104.1 ...
$ DO0182U21A1: num -105 -105 -105 -104 -102 ...
$ DO0182U21A2: num -105 -104 -105 -105 -105 ...
$ DO0182U21A3: num -105 -105 -105 -105 -105 ...
$ DO0182U21B1: num -102 -103 -104 -104 -104 ...
$ DO0182U21B2: num -99.4 -102 -104 -101.4 -104.1 ...
$ DO0182U21B3: num -104 -104 -104 -104 -104 ...
我已经搜索了错误,并在此page找到了源代码,但我不是一个强大的程序员并且很难理解它。任何帮助我们都会非常感激。
下面是我正在使用的文件的dput()输出。
wideRawDF 这是包含缺失值和完整值的列的原始DF
colsNA 这是包含NA值的列的字符串
dfNA 是包含NA值的列的子集DF