对于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
。出现相同的错误消息。
答案 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