我正在尝试开发一个循环,它将帮助我动态控制两个变量之间的相关性,同时保持其他变量相关性静态。我已完成此操作,但无法让循环在每个相关级别的变量之间执行相关性。换句话说,我得到的唯一相关矩阵位于我指定的最后一个级别。我想使用 cor 函数获得每个级别的相关矩阵。这样我可以确保 R 正确执行我的循环,并且我可以在不同的统计应用程序中使用数据。所以我很清楚,这不是一个课堂项目,而是一个真正的项目。 这是我目前使用的代码。
require("JWileymisc")
require("MASS")
require("dplyr")
cor.level <- c(0, .1, .2)
for (j in 1:length(cor.level)) {
V <- matrix(c(
1, cor.level[j], .096, .043, .109,
cor.level[j], 1, .400, -.016, .297,
.096, .400, 1, .092, .382,
.043, -.016, .092, 1, .103,
.109, .297, .382, .103, 1),
5, 5)
sigma <- c(.4421, 1.0880, 8.5073, .4700, 1.1249)
Sigma <- cor2cov(V, sigma)
mu <- c(.7337, 2.7300, 46.9970, 2.6002, 1.7491)
d <- data.frame(mvrnorm(n=300, mu, Sigma, 5, 5))
co <- cor(d)
co
}
我确信我的错误非常简单,但我目前没有看到它。有人会帮助我使用 cor 函数实现上面指定的 cor.level 的每个级别的 3 个相关矩阵吗?
for
循环。
library("JWileymisc"); library("MASS")
cor.level <- c(0, .1, .2)
co <- vector('list', length(cor.level))
for (j in 1:length(cor.level)) {
V <- matrix(c(
1, cor.level[j], .096, .043, .109,
cor.level[j], 1, .400, -.016, .297,
.096, .400, 1, .092, .382,
.043, -.016, .092, 1, .103,
.109, .297, .382, .103, 1),
5, 5)
sigma <- c(.4421, 1.0880, 8.5073, .4700, 1.1249)
Sigma <- cor2cov(V, sigma)
mu <- c(.7337, 2.7300, 46.9970, 2.6002, 1.7491)
co[[j]] <- cor(mvrnorm(n=300, mu, Sigma, 5, 5))
}
co
最好使用
lapply
。
library("JWileymisc"); library("MASS")
cor.level <- c(0, .1, .2)
lapply(cor.level, \(x) {
V <- matrix(c(
1, x, .096, .043, .109,
x, 1, .400, -.016, .297,
.096, .400, 1, .092, .382,
.043, -.016, .092, 1, .103,
.109, .297, .382, .103, 1),
5, 5)
sigma <- c(.4421, 1.0880, 8.5073, .4700, 1.1249)
Sigma <- cor2cov(V, sigma)
mu <- c(.7337, 2.7300, 46.9970, 2.6002, 1.7491)
m <- mvrnorm(n=300, mu, Sigma, 5, 5)
cor(m)
})
两者的输出:
[[1]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1.000000e+00 -6.645591e-16 0.096 0.043 0.109
[2,] -6.645591e-16 1.000000e+00 0.400 -0.016 0.297
[3,] 9.600000e-02 4.000000e-01 1.000 0.092 0.382
[4,] 4.300000e-02 -1.600000e-02 0.092 1.000 0.103
[5,] 1.090000e-01 2.970000e-01 0.382 0.103 1.000
[[2]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1.000 0.100 0.096 0.043 0.109
[2,] 0.100 1.000 0.400 -0.016 0.297
[3,] 0.096 0.400 1.000 0.092 0.382
[4,] 0.043 -0.016 0.092 1.000 0.103
[5,] 0.109 0.297 0.382 0.103 1.000
[[3]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1.000 0.200 0.096 0.043 0.109
[2,] 0.200 1.000 0.400 -0.016 0.297
[3,] 0.096 0.400 1.000 0.092 0.382
[4,] 0.043 -0.016 0.092 1.000 0.103
[5,] 0.109 0.297 0.382 0.103 1.000