FactoMineR MCA中“哪个'不符合逻辑”的含义是什么意思?

时间:2015-12-14 11:42:35

标签: r principal-components

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

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

我收到以下错误:

  

其中的错误(unlist(lapply(listModa,is.numeric))):     “哪个”不合逻辑的论证

我真的不知道如何处理这个错误。然后我尝试将每一列变为字符,一切正常。我认为它可能对其他人有用,也许有人能够向我解释错误;)

干杯

6 个答案:

答案 0 :(得分:3)

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

#my data.frame was "aux.da"
i=0
while(i < ncol(aux.da)){
  i=i+1  aux.da[,i] = as.factor(aux.da[,i])
}

答案 1 :(得分:2)

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

  • 找到发生错误的函数(通过traceback()),
  • 设置断点并对其进行调试:

    trace(tab.disjonctif, browser)
    

我执行了以下操作(离线)以查找tab.disjonctif的名称:

  • 在CRAN镜像on GitHub
  • 上找到了包
  • Search用于提供错误的特定表达式

答案 2 :(得分:1)

我昨天刚刚开始学习R,但错误来自MCA用于categorical data这一事实,这就是为什么您的数据不能数字化的原因。然后更准确地说,在MCA a&#34; tableau disjonctif&#34; (抱歉,我不知道英文单词:完整的析取矩阵)。 所以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

答案 3 :(得分:0)

建立@marques、@Khaled 和@Pierre Gourseaud:

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

如果你走 FAMD 路线,你可以改变只是你的分类变量列的格式来考虑这个:

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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

同样的问题,改为因素也没有解决我的答案,因为我把每个变量都作为补充

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

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