如何一起模拟两个数据列?

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

我正在使用R中的数据集“ mtcars”。我有以下两列,我想一起模拟(双变量模拟)。

       mpg  hp
 [1,] 21.0 110
 [2,] 21.0 110
 [3,] 22.8  93
 [4,] 21.4 110
 [5,] 18.7 175
 [6,] 18.1 105
 [7,] 14.3 245
 [8,] 24.4  62
 [9,] 22.8  95
[10,] 19.2 123
[11,] 17.8 123
[12,] 16.4 180
[13,] 17.3 180
[14,] 15.2 180
[15,] 10.4 205
[16,] 10.4 215
[17,] 14.7 230
[18,] 32.4  66
[19,] 30.4  52
[20,] 33.9  65
[21,] 21.5  97
[22,] 15.5 150
[23,] 15.2 150
[24,] 13.3 245
[25,] 19.2 175
[26,] 27.3  66
[27,] 26.0  91
[28,] 30.4 113
[29,] 15.8 264
[30,] 19.7 175
[31,] 15.0 335
[32,] 21.4 109

我尝试自己绘制每个图,发现它们都不是正态分布的,我也将它们相对绘制,它们也不呈正态分布。我是模拟数据的新手,到目前为止,我只知道用于模拟双变量数据的函数mvnorm

我的代码如下:

sigma=matrix(c(var(mtcars$hp),var(mtcars$mpg)*var(mtcars$hp)*cor(mtcars$mpg,mtcars$hp),var(mtcars$mpg)*var(mtcars$hp)*cor(mtcars$mpg,mtcars$hp),var(mtcars$mpg),2)

simulation = mvrnorm(length(mtcars$hp),c(mean(mtcars$hp),mean(mtcars$mpg)),matrix(c(4700,-132505.7,-132505.7,36.3241),2))

我收到一个错误:

Error in mvrnorm(length(mtcars$hp), c(mean(mtcars$hp), mean(mtcars$mpg)), matrix(c(4700,  : 
  'Sigma' is not positive definite

老实说,我不确定如何以双变量方式模拟它们,任何建议都将不胜感激。

r simulation distribution normal-distribution
1个回答
0
投票

这样的东西?您的sigma函数缺少),可以用cov代替。

library(MASS)

dd <- mtcars

mvrnorm(n = nrow(dd),
        mu = c(mean(dd$hp), mean(dd$mpg)),
        cov(dd[c("hp", "mpg")]))
© www.soinside.com 2019 - 2024. All rights reserved.