Что означает "аргумент", который "не логичен" в MCA FactoMineR?
Я пытаюсь запустить MCA на базе данных с использованием FactoMineR. Он содержит только 0/1 числовых столбцов, а его размер составляет 200.000 * 20.
require(FactoMineR)
result <- MCA(data[, colnames, with=F], ncp = 3)
Я получаю следующую ошибку:
Ошибка, в которой (unlist(lapply(listModa, is.numeric))): аргумент 'which' не является логическим
Я действительно не знал, что делать с этой ошибкой. Затем я попытался превратить каждый столбец в символ, и все заработало. Я думал, что это может быть полезно для кого-то еще, и что, возможно, кто-то сможет объяснить мне ошибку;)
ура
6 ответов
Трудно сказать без дальнейшего ввода, но вы можете сделать следующее:
- Найти функцию, где произошла ошибка (через
traceback()
), Установите точку останова и отладьте ее:
trace(tab.disjonctif, browser)
Я сделал следующее (в автономном режиме), чтобы найти имя tab.disjonctif
:
Являются ли классы ваших переменных символом или фактором? У меня была эта проблема. Моим решением было изменить все переменные на фактор.
#my data.frame was "aux.da"
i=0
while(i < ncol(aux.da)){
i=i+1 aux.da[,i] = as.factor(aux.da[,i])
}
Я только начал изучать R вчера, но ошибка происходит из-за того, что MCA для categorical data
поэтому ваши данные не могут быть числовыми. Затем, чтобы быть более точным, перед MCA создается "таблица disjonctif" (извините, я не знаю слова на английском языке: полная дизъюнктивная матрица). Таким образом, FactomineR использует эту функцию:
https://github.com/cran/FactoMineR/blob/master/R/tab.disjonctif.R
Где я думаю, что ищет категориальные значения, которые могут быть сопоставлены с числовым значением (например, Y = 1, N = 0).
Для других; будьте осторожны: для R категориальные данные связаны с factor
типа, так even if you have characters you could get this error
,
Это не будет работать только для числовых переменных. Если у вас есть только числа, используйте PCA. В противном случае добавьте факторную переменную во фрейм данных. Похоже, что в вашем случае вам нужно изменить свои переменные на двоичные коэффициенты.
Чтобы развить @marques, @Khaled и @Pierre Gourseaud:
Да, изменение формата ваших переменных на фактор должно устранить сообщение об ошибке, но вы не должны изменять формат числовых данных на фактор, если предполагается, что это непрерывные числовые данные. Скорее, если у вас есть как непрерывные, так и категориальные переменные, попробуйте запустить факторный анализ смешанных данных (FAMD) в одном и том же
FactoMineR
упаковка.
Если вы пойдете по маршруту FAMD, вы можете изменить формат только столбцов категориальных переменных, чтобы учитывать это:
data[,c(3:5,10)] <- lapply(data[,c(3:5,10)] , factor)
(предполагается, что номера столбцов 3,4,5 и 10 необходимо изменить).
Та же самая проблема и переход к фактору также не решили мой ответ, потому что я поставил каждую переменную как дополнительную.
Сначала я преобразовал все мои числовые данные в коэффициент:
Xfac = factor(X[,1], ordered = TRUE)
for (i in 2:29){
tfac = factor(X[,i], ordered = TRUE)
Xfac = data.frame(Xfac, tfac)
}
colnames(Xfac)=labels(X[1,])
Тем не менее, это не будет работать. Но моей второй проблемой было то, что я включил КАЖДЫЙ фактор в качестве дополнительной переменной! Итак, эти:
MCA(Xfac, quanti.sup = c(1:29), graph=TRUE)
MCA(Xfac, quali.sup = c(1:29), graph=TRUE)
Будет генерировать ту же ошибку, но эта работает:
MCA(Xfac, graph=TRUE)
Не преобразование данных в факторы также породило проблему.
Я отправил тот же ответ в связанную тему: /questions/38070734/oshibka-mca-factominer-otnositelno-chislovyih-znachenij/38070740#38070740