Я хочу смоделировать набор данных с двумя переменными (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 = .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))