Что означает "аргумент", который "не логичен" в 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:

  • Нашел пакет на зеркале CRAN на GitHub
  • Ищите это конкретное выражение, которое дает ошибку

Являются ли классы ваших переменных символом или фактором? У меня была эта проблема. Моим решением было изменить все переменные на фактор.

#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

Другие вопросы по тегам