我试图使用PCA进行探索性分析,以确定量表的阶乘结构。我使用的软件包是:
library(GPArotation) # required for `principal` to work
library(psych)其职能是:
principal()我想根据参与者的性别调整权重。
下面是我的数据集的一个示例:
GPS_01 GPS_03 GPS_04 GPS_05 GPS_07 GPS_08 GPS_10 GPS_11 GPS_12 GPS_13 GPS_14 GPS_15 GPS_17 GPS_18 GPS_19 gender_pscore
1 1 1 2 2 4 1 3 2 1 1 3 1 2 2 4 0.62
2 1 1 1 1 2 1 1 1 1 1 3 2 3 2 1 2.78
3 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 0.62
4 1 1 2 2 1 1 1 1 1 1 3 1 1 4 1 0.62
5 4 4 4 4 5 5 4 5 4 4 5 2 5 5 4 0.62
6 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 0.62
7 1 1 1 1 1 1 2 1 1 1 3 2 4 3 2 0.62
8 1 3 1 1 1 1 3 1 2 1 4 1 4 3 2 0.62
9 3 3 3 5 3 1 4 2 3 1 2 1 5 2 3 0.62
10 1 2 1 1 2 2 1 2 1 2 4 2 2 3 2 0.62
11 1 4 1 1 3 4 1 2 3 1 2 2 3 2 3 0.62
12 1 1 1 1 5 2 1 5 1 3 5 4 5 4 5 0.62
13 1 2 1 1 1 4 1 4 1 3 5 1 4 2 5 0.62
14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.62
15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.62
16 1 1 1 1 1 1 2 2 1 1 3 1 1 1 4 0.62
17 2 2 1 2 2 2 4 4 1 4 3 1 2 3 4 0.62
18 1 1 2 2 1 1 1 1 2 1 2 1 2 2 1 0.62
19 1 2 1 1 3 3 1 3 1 1 4 1 3 3 4 0.62
20 1 1 1 2 1 1 2 1 1 1 3 1 2 1 1 2.78或者更小的原始数据子集(如果更简单的话)
data<-structure(list(GPS_01 = c(1L, 1L, 1L, 1L, 4L, 1L), GPS_03 = c(1L,
1L, 1L, 1L, 4L, 1L), GPS_04 = c(2L, 1L, 1L, 2L, 4L, 1L), GPS_05 = c(2L,
1L, 1L, 2L, 4L, 1L), GPS_07 = c(4L, 2L, 1L, 1L, 5L, 1L), GPS_08 = c(1L,
1L, 1L, 1L, 5L, 1L), GPS_10 = c(3L, 1L, 1L, 1L, 4L, 1L), GPS_11 = c(2L,
1L, 1L, 1L, 5L, 1L), GPS_12 = c(1L, 1L, 1L, 1L, 4L, 1L), GPS_13 = c(1L,
1L, 1L, 1L, 4L, 1L), GPS_14 = c(3L, 3L, 2L, 3L, 5L, 2L), GPS_15 = c(1L,
2L, 1L, 1L, 2L, 2L), GPS_17 = c(2L, 3L, 2L, 1L, 5L, 3L), GPS_18 = c(2L,
2L, 2L, 4L, 5L, 2L), GPS_19 = c(4L, 1L, 1L, 1L, 4L, 2L), gender_pscore = c(0.62,
2.78, 0.62, 0.62, 0.62, 0.62)), row.names = c(NA, 6L), class = "data.frame")在这里,我使用的代码:
pc <- principal(data[,1:15], nfactors = 3, rotate ="oblimin",weights ="gender_pscore")我总是遇到同样的问题:
Error in (function (L, Tmat = diag(ncol(L)), gam = 0, normalize = FALSE, :
unused argument (weights = "gender_pscore")
Error in array(x, c(length(x), 1L), if (!is.null(names(x))) list(names(x), :
'data' must be of a vector type, was 'NULL'
In addition: Warning message:
In data[,1:20], nfactors = 3, rotate = "oblimin", :
The requested transformaton failed, Promax was used instead as an oblique transformation我对使用R很陌生,所以不知道如何解决这个问题。当我移除weights ="gender_pscore"时,问题就消失了。但是在这种情况下,我不能再根据参与者的性别对我的因子分析应用调整权重。
发布于 2022-04-04 06:53:28
weight似乎是principal()函数的正确参数。我认为问题来自您告诉principal()使用列"gender_pscore“的方式。
从?principal中我们可以看出,weight是长度的向量,n.obs包含每个观测的权重。如果使用weight = "gender_pscore",则向weight参数中提供一个长度为1的字符向量。
选择数据中的列应解决您的问题:
psych::principal(df[,1:15],
nfactors = 3,
rotate ="oblimin",
weight = df[,"gender_pscore"])警告:--这不是一般规则,它们是与引用或未引用的列名(例如:大多数tidyverse函数)一起工作的函数!
上述代码的输出:
> psych::principal(df[,1:15],
+ nfactors = 3,
+ rotate ="oblimin",
+ weight = df[,"gender_pscore"])
Principal Components Analysis
Call: psych::principal(r = df[, 1:15], nfactors = 3, rotate = "oblimin",
weight = df[, "gender_pscore"])
Standardized loadings (pattern matrix) based upon correlation matrix
TC1 TC3 TC2 h2 u2 com
GPS_01 0.83 0.13 0.22 0.99 0.01288 1.2
GPS_03 0.83 0.13 0.22 0.99 0.01288 1.2
GPS_04 0.81 0.29 -0.17 0.99 0.00837 1.4
GPS_05 0.81 0.29 -0.17 0.99 0.00837 1.4
GPS_07 0.08 0.88 0.15 0.94 0.05795 1.1
GPS_08 0.83 0.13 0.22 0.99 0.01288 1.2
GPS_10 0.28 0.81 -0.07 1.00 0.00011 1.3
GPS_11 0.63 0.43 0.11 0.99 0.00559 1.8
GPS_12 0.83 0.13 0.22 0.99 0.01288 1.2
GPS_13 0.83 0.13 0.22 0.99 0.01288 1.2
GPS_14 0.69 0.19 0.23 0.83 0.17091 1.4
GPS_15 -0.05 -0.20 1.00 0.95 0.05006 1.1
GPS_17 0.25 0.20 0.81 0.99 0.01386 1.3
GPS_18 1.17 -0.28 -0.23 0.97 0.03065 1.2
GPS_19 -0.01 0.99 -0.13 0.95 0.05381 1.0
TC1 TC3 TC2
SS loadings 8.23 3.99 2.31
Proportion Var 0.55 0.27 0.15
Cumulative Var 0.55 0.81 0.97
Proportion Explained 0.57 0.27 0.16
Cumulative Proportion 0.57 0.84 1.00
With component correlations of
TC1 TC3 TC2
TC1 1.00 0.65 0.24
TC3 0.65 1.00 0.19
TC2 0.24 0.19 1.00
Mean item complexity = 1.3
Test of the hypothesis that 3 components are sufficient.
The root mean square of the residuals (RMSR) is 0.02
with the empirical chi square 0.52 with prob < 1
Fit based upon off diagonal values = 1Warning messages:
1: In cor.smooth(r) : Matrix was not positive definite, smoothing was done
2: In psych::principal(df[, 1:15], nfactors = 3, rotate = "oblimin", :
The matrix is not positive semi-definite, scores found from Structure loadingsdput of df
df <- structure(list(GPS_01 = c(1L, 1L, 1L, 1L, 4L, 1L), GPS_03 = c(1L,
1L, 1L, 1L, 4L, 1L), GPS_04 = c(2L, 1L, 1L, 2L, 4L, 1L), GPS_05 = c(2L,
1L, 1L, 2L, 4L, 1L), GPS_07 = c(4L, 2L, 1L, 1L, 5L, 1L), GPS_08 = c(1L,
1L, 1L, 1L, 5L, 1L), GPS_10 = c(3L, 1L, 1L, 1L, 4L, 1L), GPS_11 = c(2L,
1L, 1L, 1L, 5L, 1L), GPS_12 = c(1L, 1L, 1L, 1L, 4L, 1L), GPS_13 = c(1L,
1L, 1L, 1L, 4L, 1L), GPS_14 = c(3L, 3L, 2L, 3L, 5L, 2L), GPS_15 = c(1L,
2L, 1L, 1L, 2L, 2L), GPS_17 = c(2L, 3L, 2L, 1L, 5L, 3L), GPS_18 = c(2L,
2L, 2L, 4L, 5L, 2L), GPS_19 = c(4L, 1L, 1L, 1L, 4L, 2L), gender_pscore = c(0.62,
2.78, 0.62, 0.62, 0.62, 0.62)), row.names = c(NA, 6L), class = "data.frame")https://stackoverflow.com/questions/71690659
复制相似问题