14

我正在尝试使用 FactoMineR 在数据表上运行 MCA。它仅包含 0/1 数字列,其大小为 200.000 * 20。

require(FactoMineR)
result <- MCA(data[, colnames, with=F], ncp = 3)

我收到以下错误:

错误其中(unlist(lapply(listModa,is.numeric))):'which'的参数不合逻辑

我真的不知道如何处理这个错误。然后我试着把每一列都变成 character,一切都奏效了。我认为它可能对其他人有用,也许有人可以向我解释错误;)

干杯

4

6 回答 6

5

你的变量的类是字符还是因子?我遇到了这个问题。我的解决方案是将 al 变量更改为因子。

#my data.frame was "aux.da"
i=0
while(i < ncol(aux.da)){
  i=i+1  aux.da[,i] = as.factor(aux.da[,i])
}
于 2016-10-03T16:38:49.253 回答
2

没有进一步的输入很难说,但你可以做的是:

  • 查找发生错误的函数(通过traceback()),
  • 设置断点并调试它:

    trace(tab.disjonctif, browser)
    

我做了以下(离线)来查找名称tab.disjonctif

  • 在 GitHub上的 CRAN 镜像上找到了包
  • 搜索给出错误的特定表达式
于 2015-12-14T14:26:10.537 回答
1

我昨天刚开始学习 R,但错误来自 MCA 用于 的事实categorical data,所以这就是为什么您的数据不能是数字的原因。然后更准确地说,在 MCA 之前创建了一个“tableau disjonctif”(对不起,我不知道英文中的单词:Complete disjunctive matrix)。所以 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.

于 2016-04-07T12:26:25.533 回答
0

以@marques、@Khaled 和@Pierre Gourseaud 为基础:

是的,将变量的格式更改为因数应该可以解决错误消息,但如果它应该是连续的数值数据,则不应将数值数据的格式更改为因数。FactoMineR相反,如果您同时具有连续变量和分类变量,请尝试在同一个包中运行混合数据的因子分析 (FAMD) 。

如果您走 FAMD 路线,您可以将分类变量列的格式更改为以下因素:

data[,c(3:5,10)] <- lapply(data[,c(3:5,10)] , factor) (假设需要更改列号 3、4、5 和 10)。

于 2021-02-03T15:57:07.077 回答
0

这不适用于数字变量。如果您只有数字,请使用 PCA。否则,将一个因子变量添加到您的数据框中。对于您的情况,您似乎需要将变量更改为二元因子。

于 2021-04-18T17:52:03.637 回答
-1

同样的问题以及更改为 factor 也没有解决我的答案,因为我已将每个变量都作为补充

我首先做的是将我所有的数字数据转换为 factor :

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)

不将数据转换为因子也会产生问题。

我在相关主题上发布了相同的答案:https ://stackoverflow.com/a/40737335/7193352

于 2016-11-22T08:53:07.753 回答