多元正态分布中的相关变量

问题描述 投票:0回答:1

我正在尝试开发一个循环,它将帮助我动态控制两个变量之间的相关性,同时保持其他变量相关性静态。我已完成此操作,但无法让循环在每个相关级别的变量之间执行相关性。换句话说,我得到的唯一相关矩阵位于我指定的最后一个级别。我想使用 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 个相关矩阵吗?

r for-loop variables correlation
1个回答
0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.