具有大量变量的二进制数据的探索性因子分析

时间:2017-11-09 19:51:34

标签: r

我有一个像这样的二进制数据集示例:

DF <- data.frame(text = c(0, 0, 0, 1), text.1 = c(0, 1, 0, 0), "text sth"=c(1, 0, 0, 0))

我尝试使用这个进行因子分析:

efa <- factanal(DF, factors=2, rotation="varimax")

但是我收到了这个错误:

Error in solve.default(cv) : 
  Lapack routine dgesv: system is exactly singular: U[11,11] = 0

我检查的例子不是二进制数据。有没有问题,因为我的数据是二进制的,我收到了这个错误?

我的数据集有53个变量和6357个对象。

如果我只为6个变量和6357个对象运行factanal(),它可以正常工作。我怎样才能为53个变量运行factanal?

2 个答案:

答案 0 :(得分:1)

我不是这方面的权威,但我相信下面的内容是正确的。

  1. factanal期望的是一组数值 - 即连续数据。您拥有的不是连续的数据,因此您的分析即使有效,也可能误导您。

  2. factanal所做的是协方差矩阵的分解,请参阅“帮助”中的“因子分析本质上是关联矩阵的模型”。你得到的错误说得到矩阵的逆矩阵是有问题的。

    此矩阵可能是协方差矩阵,如果是这样,如果某些列非常相似,则会发生错误。另见multicollinearity

  3. 由于factanal的输入可以是协方差矩阵。因此,最好的办法是从数据中删除因变量和协方差矩阵。有关后者,请参阅here

    如果你能够做到这一点,最好将其作为你问题的答案。

答案 1 :(得分:0)

问题在于,您应该将矩阵而不是数据(DF)提供给工厂。从库(polycor)中使用以下几行:

V1 <- hetcor(df.2)$cor

factanal(covmat = V1, factors = 2, rotation = "varimax")

您可以在下一个链接中获得更多信息:https://it.unt.edu/sites/default/files/binaryfa_l_jds_sep2014_0.pdf