首页 > 解决方案 > 在 R lavaan 中使用 getCov 和一个实际的大相关矩阵

问题描述

我希望使用具有 120 个指标(变量)和大约 40 万受访者的 lavaan 验证性因子分析 (CFA) 功能。如此大的样本量会导致 R 中的内存问题。通常我可能只使用一小部分人,但我正在尝试复制现有的工作。我尝试简单地将相关/协方差矩阵读入 R,然后进行 CFA,但我在使用 getCov 函数时遇到了问题。我看到的每个示例都涉及手动编写一个表示相关集的对象。但是,这对于 120×120 矩阵是不可能的。我尝试在 R 中生成一个相关矩阵,然后将该矩阵读入 getCov,但仍然出现很多错误。我想有一些方法可以格式化它,我尝试了几种方法(下面两种),但无济于事。

这是一个示例,我创建了一个包含 120 个变量的数据集。为方便起见,我将样本大小设置为 1000。当我尝试生成相关矩阵然后使用 getCov 命令时,出现以下错误:

“ lav_matrix_lower2full(x, 对角线 = 对角线) 中的错误:p == round(p, 0) 不正确”</p>

set.seed(371)
df  <-   data.frame(matrix(NA, nrow = 1000, ncol = 120))
for (i in 1:120) {
  x <- runif(1000, min=1, max=7)
  df [, i] <- x
}
dim (df)

#getting correlations... I think getCov needs only one diagonal side#
cor.matrix <- round(cor(df),4)
upper<-cor.matrix
upper[upper.tri(cor.matrix)]<-NA
lower<-as.matrix (upper)

#try 1#
matrix <- getCov (x=lower, names = c('X1',  'X2',   'X3',   'X4',   'X5',   'X6',   'X7',   'X8',   'X9',   'X10',  'X11',  'X12',  'X13',  'X14',  'X15',  
                                     'X16', 'X17',  'X18',  'X19',  'X20',  'X21',  'X22',  'X23',  'X24',  'X25',  'X26',  'X27',  'X28',  
                                     'X29', 'X30',  'X31',  'X32',  'X33',  'X34',  'X35',  'X36',  'X37',  'X38',  'X39',  'X40',  'X41',  'X42',  'X43',  'X44',  'X45',  'X46',  
                                     'X47', 'X48',  'X49',  'X50',  'X51',  'X52',  'X53',  'X54',  'X55',  'X56',  'X57',  'X58',  'X59',  'X60',  'X61',  'X62',  'X63',  'X64',  
                                     'X65', 'X66',  'X67',  'X68',  'X69',  'X70',  'X71',  'X72',  'X73',  'X74',  'X75',  'X76',  'X77',  'X78',  'X79',  'X80',  'X81',  'X82',  
                                     'X83', 'X84',  'X85',  'X86',  'X87',  'X88',  'X89',  'X90',  'X91',  'X92',  'X93',  'X94',  'X95',  'X96',  'X97',  'X98',  'X99',  'X100', 
                                     'X101',    'X102', 'X103', 'X104', 'X105', 'X106', 'X107', 'X108', 'X109', 'X110', 'X111', 'X112', 'X113', 'X114', 'X115', 'X116', 'X117', 'X118', 
                                     'X119',    'X120'))
#try 2#
lower <- format_csv (as.data.frame(lower), col_names=FALSE)
matrix <- getCov (x=lower, names = c('X1',  'X2',   'X3',   'X4',   'X5',   'X6',   'X7',   'X8',   'X9',   'X10',  'X11',  'X12',  'X13',  'X14',  'X15',  
                                         'X16', 'X17',  'X18',  'X19',  'X20',  'X21',  'X22',  'X23',  'X24',  'X25',  'X26',  'X27',  'X28',  
                                         'X29', 'X30',  'X31',  'X32',  'X33',  'X34',  'X35',  'X36',  'X37',  'X38',  'X39',  'X40',  'X41',  'X42',  'X43',  'X44',  'X45',  'X46',  
                                         'X47', 'X48',  'X49',  'X50',  'X51',  'X52',  'X53',  'X54',  'X55',  'X56',  'X57',  'X58',  'X59',  'X60',  'X61',  'X62',  'X63',  'X64',  
                                         'X65', 'X66',  'X67',  'X68',  'X69',  'X70',  'X71',  'X72',  'X73',  'X74',  'X75',  'X76',  'X77',  'X78',  'X79',  'X80',  'X81',  'X82',  
                                         'X83', 'X84',  'X85',  'X86',  'X87',  'X88',  'X89',  'X90',  'X91',  'X92',  'X93',  'X94',  'X95',  'X96',  'X97',  'X98',  'X99',  'X100', 
                                         'X101',    'X102', 'X103', 'X104', 'X105', 'X106', 'X107', 'X108', 'X109', 'X110', 'X111', 'X112', 'X113', 'X114', 'X115', 'X116', 'X117', 'X118', 
                                         'X119',    'X120'))

标签: rmatrixmemory-managementr-lavaanfactor-analysis

解决方案


推荐阅读