要在R中输入SEM的相关矩阵,我需要以三种方式重新格式化矩阵:
换句话说,矩阵......
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
我们目前通过复制,删除和粘贴手动执行此操作。关于如何编写函数来执行此操作的任何建议都将非常感激。
谢谢, 乔纳森
答案 0 :(得分: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
答案 1 :(得分: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)
就是这样。您不需要指定名称,因为它们已经在矩阵对象中。