主成分分析

Analysis of PCA

我正在使用 rela 包来检查我是否可以在我的数据中使用 PCA。

paf.neur2 <- paf(neur2)
summary(paf.neur2)
# [1] "Your dataset is not a numeric object."

我想看看 KMO(Kaiser-Meyer-Olkin 抽样充分性测试度量)。怎么做?

str(neur2) 的输出

  'data.frame': 1457 obs. of  66 variables:
   $ userid : int  200 387 458 649 931 991 1044 1075 1347 1360 ...
   $ funct  : num  3.73 3.79 3.54 3.04 3.81 ...
   $ pronoun: num  2.26 2.55 2.49 1.98 2.71 ...
      .
      .
      . 
   $ time   : num  1.68 1.87 1.51 1.03 1.74 ...
   $ work   : num  0.7419 0.2311 -0.1985 -1.6094 -0.0619 ...
   $ achieve: num  0.174 0.2469 0.1823 -0.478 -0.0513 ...
   $ leisure: num  0.2852 0.0296 0.0583 -0.3567 -0.0408 ...
   $ home   : num  -0.844 -0.58 -0.844 -2.207 -1.079 ...
      .

变量都是数字。

两个选项可以为您完成:

kmo_DIY <- function(df){ 
csq = cor(df)^2 
csumsq = (sum(csq)-dim(csq)[1])/2 
library(corpcor) 
pcsq = cor2pcor(cor(df))^2 
pcsumsq = (sum(pcsq)-dim(pcsq)[1])/2 
kmo = csumsq/(csumsq+pcsumsq) 
return(kmo) 
} 

psych 包中的函数 KMO()。

根据 ?pafobject 是一个 数值数据集(通常是来自先前数据帧的强制矩阵)

所以你需要把你的data.frameneur2变成一个矩阵:as.matrix(neur2).

这是使用 Seatbelts 数据集重现的问题:

library(rela)

Belts <- Seatbelts[,1:7]
class(Belts)
# [1] "mts"    "ts"     "matrix"

Belts <- as.data.frame(Belts)
# [1] "data.frame"

paf.belt <- paf(Belts)
[1] "Your dataset is not a numeric object."

Belts <- as.matrix(Belts)
class(Belts)
# [1] "matrix"

paf.belt <- paf(Belts)  # Works