2015-09-04 58 views
1

我正在使用rela包来检查我是否可以在我的数据中使用PCA。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 ... 
     . 

变量都是数字。

+0

请张贴'STR(neur2)'的输出。 – 2015-09-04 03:35:54

+0

已发布。输出太长,但所有变量都是数字。 – Lucia

+0

完成PCA后,我想建议您比较每个主要组件提取的变化百分比与破碎的棒模型结果。 – Ouistiti

回答

4

?pafobject数字数据集(从之前的数据帧通常是被迫矩阵)

所以,你需要把你的data.frame neur2成矩阵: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 
1

两个选项,可以为你做它:

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) 
} 

从迷幻包功能KMO()。