如何模拟 R 中非线性相关的两个变量?

How do I simulate two variables in R which are non-linearly related?

我在 SO 上潜伏了一段时间,但终于有一个问题,我无法在此站点或其他任何地方找到答案。所以创建了帐户,然后就开始了。如果这个问题确实在其他地方得到了回答,我们深表歉意。那我的搜索技巧有待提高!

在 R 中,我想生成两个非线性相关的变量。

我已经想出如何使用 MASS 库中的 mvrnorm 函数来模拟两个变量之间的线性关联,如下所示,但现在想模拟两个遵循非线性关联的变量。

library ('MASS')

data = mvrnorm(n=100, mu=c(170, 80), Sigma=matrix(c(1, 0.85, 0.85, 1),   nrow=2), empirical=TRUE)
height = data[, 1]  # standard normal (mu=170, sd=1)
weight = data[, 2]  # standard normal (mu=80, sd=1)

我并不特别介意它是哪种非线性关联(例如指数、对数等)。我只想生成一些散点图来展示线性关联和非线性关联之间的区别。

我不是统计学家,也不是 R 专家,因此非常感谢看似过于简单的答案!

非常感谢您提供的任何帮助。

mvrnorm::MASS 不允许您向量化此维度中的均值,但您可以通过向均值添加合适的偏移量来实现。

set.seed(101)
dd <- MASS::mvrnorm(n=100, 
     mu=c(0,0), Sigma=0.001*matrix(c(1, 0.85, 0.85, 1),   nrow=2),
         empirical=TRUE)
xvec <- seq(0,2,length=100)
dd[,1] <- dd[,1] + exp(-3*xvec)
dd[,2] <- dd[,2] + xvec
plot(dd[,1],dd[,2])

一种快速的方法是创建一个非线性变量,然后向其添加一些噪声:

x = seq(-100, 100)    # just a sequence of numbers
y = x^2 + rnorm(length(x), 0, 1000)      # generate non-linear association + noise
plot(x, y)

如果有些功能不清楚,请告诉我。

PS:不用道歉。如果没有人问菜鸟问题,世界上就没有专家了。