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

时间:2018-12-29 19:51:35

标签: r simulation nonlinear-functions

我已经潜伏了一段时间,但是最后有一个问题,我在该站点或其他任何地方都找不到答案。这样创建了帐户,然后开始。抱歉,如果确实在其他地方回答了这个问题。那我的搜索技能需要提高!

在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专家,因此,看似过于简单的答案将不胜感激!

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

2 个答案:

答案 0 :(得分:1)

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

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)

enter image description here

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

PS:无需道歉。如果没有人问过菜鸟问题,那么世界上就不会有专家。

答案 1 :(得分:0)

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])

enter image description here