如何解决as.mids函数中的行名错误?

时间:2019-07-19 18:17:01

标签: r

对于R v3.6,使用软件包as.mids(v3.5.0)中的函数mice遇到错误:

Error in `.rowNamesDF<-`(x, value = value) : 
duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique values when setting 'row.names': '1', '2', '3', [...]

这里有一些背景:

我对协变量数据使用了多重插补。我估算了缺失的协变量数据,然后将结果保存为长格式的数据框:

imputed <- mice(raw.data,...)

mydata <- complete(imputed, "long", inc = TRUE)

我试图将数据框转换为mids对象以进行分析。

mydata <- as.mids(mydata)

但是,这导致了上面的错误。

我不明白该消息,因为数据框没有行名(我用rownames(mydata) <- NULL)进行了检查。

我感谢任何建议。

更新软件包手册中指出:

  

该函数期望输入数据长按归类排序   数字(默认情况下为变量“ .imp”),并且在相同的顺序内   每个插补模块。

所以我尝试了newdata <- mydata[order(mydata$.imp,mydata$.id),],然后尝试了as.mids。出现相同的错误消息。

2 个答案:

答案 0 :(得分:0)

问题是,我分别调用男女数据并在调用complete(...,action = long)之后合并了数据帧的行。 import {useEffect, useMemo} from 'react' import uniqid from 'uniqid' export const TAB_ID_KEY = 'tabId' export default () => { const id = useMemo(uniqid, []) useEffect(() => { if (typeof Storage !== 'undefined') { sessionStorage.setItem(TAB_ID_KEY, id) } }, [id]) return id } 变量确实重复了,因为它是男性1:nrow和女性1:nrow的向量。我重新编码了.id变量以对应各个ID,问题已解决。

答案 1 :(得分:-1)

由于信息稀少,我仍然会冒险猜测。在??as.mids页上记录以下示例:

library('mice')

imp <- mice(nhanes, print = FALSE)
# extract the data in long format
X <- complete(imp, action = "long", include = TRUE)
# create dataset with .imp variable as numeric

# nhanes example without .id
test1 <- as.mids(X)
is.mids(test1)

请注意,我们放入mice()的对象是一个数据帧。但是,我们放入as.mids中的对象是NEW数据帧。

str(nhanes)
'data.frame':   25 obs. of  4 variables:
 $ age: num  1 2 1 3 1 3 1 1 2 2 ...
 $ bmi: num  NA 22.7 NA NA 20.4 NA 22.5 30.1 22 NA ...
 $ hyp: num  NA 1 1 NA 1 NA 1 1 1 NA ...
 $ chl: num  NA 187 187 NA 113 184 118 187 238 NA ...

str(X)
 $ .imp: int  0 0 0 0 0 0 0 0 0 0 ... #NEW
 $ .id : int  1 2 3 4 5 6 7 8 9 10 ... #NEW
 $ age : num  1 2 1 3 1 3 1 1 2 2 ...
 $ bmi : num  NA 22.7 NA NA 20.4 NA 22.5 30.1 22 NA ...
 $ hyp : num  NA 1 1 NA 1 NA 1 1 1 NA ...
 $ chl : num  NA 187 187 NA 113 184 118 187 238 NA ...

mice()出于(我认为)附加目的在幕后这样做。但是,如果.id并非唯一,那么在as.mids()函数中分配ID时,可能会引发错误(请参阅here)。实际上,我们可以通过强制$.id变量相同来复制您的错误。

X$.id <- rep(1,nrow(X))

as.mids(X)

Error in `.rowNamesDF<-`(x, value = value) : 
  duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique value when setting 'row.names': ‘1’ 

当然,您也可以强制它们唯一,这可以解决问题。

#forcing the ids to be unique values equal to the number of rows
X$.id <- 1:nrow(X)
as.mids(X) 

Class: mids
Number of multiple imputations:  5 
Imputation methods:
  age   bmi   hyp   chl 
   "" "pmm" "pmm" "pmm" 
PredictorMatrix:
    age bmi hyp chl
age   0   1   1   1
bmi   1   0   1   1
hyp   1   1   0   1
chl   1   1   1   0