R语言 多元正态分布相关变量

vlju58qv  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(102)

我试图开发一个循环,它将帮助我动态地控制两个变量之间的相关性,同时保持其他变量的相关性不变。我已经完成了这一点,但我不能让循环在每个相关性水平的变量之间执行相关性。换句话说,我得到的唯一相关矩阵是在我指定的最后一个级别。我想使用cor函数得到每个级别的相关矩阵。这样我可以确保R执行我的循环正确,我可以在不同的统计应用中使用这些数据。所以我很清楚,这不是一个类项目,而是一个真实的项目。
下面是我使用到这一点的代码。

require("JWileymisc")
require("MASS")

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
}

字符串
我相信我的错误是非常简单的,但我没有看到它的时刻.有人会帮助我实现3个相关矩阵的每一个水平的cor.使用cor函数以上指定的水平?

5ssjco0h

5ssjco0h1#

使用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

相关问题