模拟彼此二次相关的数据(X,Y)

时间:2019-07-10 12:03:01

标签: r simulation quadratic

我正在寻找一个具有两个变量(X,Y)的数据集,其中两个变量之间的关系是二次方的(某种形式的倒U)。有没有办法在R中做到这一点?可以理解,关系的确切形状可以不同,二次项在线性项之上和之上的独特作用也可以不同。在理想情况下,模拟将确定总体解释的Y方差和总体中二次项的唯一方差。

我正在寻找类似这样的东西:1000对XY,Y具有正态分布,Mn = 0,SD = 1,X接近正态分布,接近Mn = 0,SD =尽可能1。用线性和二次项弱(R ^ 2 = .05)解释的总方差[通过总方差,我的意思是,如果将Y回归到X和X ^ 2上,则R ^ 2 = 0.05。对于该示例,我没有任何数据,因为这些数据将被模拟;问题是边界交叉验证或堆栈溢出,但是考虑到要在R中进行,这似乎最适合。

感谢您的帮助。


查看更多内容后,偶然发现了simstudy软件包,该软件包在创建模拟二次关系时具有一定的灵活性:

library(psych)
library(simstudy)
#From: https://cran.rstudio.com/web/packages/simstudy/vignettes/simstudy.html, and https://cran.r-project.org/web/packages/simstudy/simstudy.pdf 
def <- defData(varname = "nr", dist = "nonrandom", formula = 7, id = "idnum")
def <- defData(def, varname = "uni", dist = "uniform", formula = "10;20")
ddef <- defData(def, varname = "X1_q", formula = "nr + uni * 2", variance = 8)

set.seed(333)
theta1 = c(.2, 0.35, .7, .8, .7, .35, .2) 
knots <- c(.3, .5, .7) #quantiles
viewSplines(knots = knots, theta = theta1, degree = 3)

dt <- genData(1000, ddef)
dt <- genSpline(dt = dt, newvar = "Y_q",
                predictor = "X1_q", theta = theta1,
                knots = knots, degree = 3,
                noise.var = .25)
psych::describe (dt)
hist(dt$X1_q)
hist(dt$Y_q)
plot(dt$X1_q, dt$Y_q)
dt$X1_q_sq <- dt$X1_q * dt$X1_q
summary(lm(Y_q~ X1_q + X1_q_sq, data = dt))

1 个答案:

答案 0 :(得分:1)

如何?

X <- rnorm(1000, 0, 1)            # simulate from the normal distribution
Y <- X^2 + runif(1000, -0.1, 0.1) # make it squared +/- a little bit

不确定是否要模拟噪声,但是可以通过更改runif函数中的最后两个参数来增大/减小噪声级别。距离0越远,噪音就会越多

可以通过绘制它们的关系来查看它们:

plot(X, Y)

enter image description here