0

要在 R 中输入 SEM 的相关矩阵,我需要以三种方式重新格式化矩阵:

  • 删除行名
  • 删除列名
  • 删除矩阵右上角“一半”中对角线 1 值上方的所有单元格

换句话说,矩阵...

          EDU       CLASS       INCOME    AUTONOMY        COL5         ALT5         IIDM
EDU       1.00000000 -0.14591135  0.246463592  0.21938208 -0.09727587 -0.043862753  0.062896738
CLASS    -0.14591135  1.00000000 -0.048511437 -0.01469029  0.01663138  0.036140650 -0.010155653
INCOME    0.24646359 -0.04851144  1.000000000  0.13778603 -0.06969773 -0.051922861  0.009402784
AUTONOMY  0.21938208 -0.01469029  0.137786034  1.00000000 -0.25223015  0.023174980  0.073941520
COL5     -0.09727587  0.01663138 -0.069697725 -0.25223015  1.00000000 -0.300825028 -0.062978212
ALT5     -0.04386275  0.03614065 -0.051922861  0.02317498 -0.30082503  1.000000000  0.001553936
IIDM      0.06289674 -0.01015565  0.009402784  0.07394152 -0.06297821  0.001553936  1.000000000

...需要成为文本...

 1.00000000
-0.14591135  1.00000000
 0.24646359 -0.04851144  1.000000000
 0.21938208 -0.01469029  0.137786034  1.00000000
-0.09727587  0.01663138 -0.069697725 -0.25223015  1.00000000
-0.04386275  0.03614065 -0.051922861  0.02317498 -0.30082503  1.000000000
 0.06289674 -0.01015565  0.009402784  0.07394152 -0.06297821  0.001553936  1.000000000

... 逐行输入到 readMoments 函数中,如下所示。

R.bd <- readMoments(names=c('EDU',
                            'CLASS',
                            'INCOME',
                            'AUTONOMY',
                            'COL5',
                            'ALT5',
                            'IIDM'))
 1.00000000
-0.14591135  1.00000000
 0.24646359 -0.04851144  1.000000000
 0.21938208 -0.01469029  0.137786034  1.00000000
-0.09727587  0.01663138 -0.069697725 -0.25223015  1.00000000
-0.04386275  0.03614065 -0.051922861  0.02317498 -0.30082503  1.000000000
 0.06289674 -0.01015565  0.009402784  0.07394152 -0.06297821  0.001553936  1.000000000

我们目前通过复制、删除和粘贴手动执行此操作。任何有关如何编写函数来执行此操作的建议将不胜感激。

谢谢,乔纳森

4

2 回答 2

1

考虑dat是你的相关矩阵。

> dat <- as.matrix(dat)
> dimnames(dat) <- list(rep("", ncol(dat)), rep("", ncol(dat)))
> dat[upper.tri(dat)] <- NA
> print(dat, na.print = " ") 
                       # you can also make a replacement `dat[is.na(dat)] <- " "`

  1.00000000                                                               
 -0.14591135  1.00000000                                                   
  0.24646359 -0.04851144  1.000000000                                      
  0.21938208 -0.01469029  0.137786034  1.00000000                          
 -0.09727587  0.01663138 -0.069697725 -0.25223015  1.00000000              
 -0.04386275  0.03614065 -0.051922861  0.02317498 -0.30082503 1.000000000  
  0.06289674 -0.01015565  0.009402784  0.07394152 -0.06297821 0.001553936 1
于 2013-11-17T12:38:05.580 回答
0

您可以直接创建对象R.bd。您不需要逐行输入。

假设,dat是对象的名称(数据框或矩阵):

dat[upper.tri(dat)] <- 0 # replace all elements above the diagonal with 0
R.bd <- as.matrix(dat)  # transform to matrix (not necessary if it's a matrix)

而已。您不需要指定名称,因为它们已经在矩阵对象中。

于 2013-11-17T13:39:45.473 回答