Генерация коррелированных векторов (X, Y), в результате чего rho = f (x) «хоккейная клюшка» - PullRequest
0 голосов
/ 17 ноября 2018

Я хочу смоделировать зависимые (с изменением корреляции rho) переменные, чтобы «воспроизвести» эту цифру .

Точка прерывания корреляции
rho = 0 для X = x <= 2,4 <br>rho = 0,5 для X = x> 2,4

Bivariate DistributionY | X
X = N ~ (mu_x, sd_x)
Y | X = N ~ (mu_x + sd_x / sd_y * rho (Y-mu_y), (1-rho ^ 2) sd_x)

Дано:
mu_x = 3,13;sd_x = 0,6
mean_y = 31,3;sd_y = 6,7

Мой код работает для генерации коррелированных данных, enter image description here, но пропускает "точку останова" .Вот мой код для сюжета выше:

X = rnorm (n, mean_x, sd_x)
Y = rnorm (n, mean_y + sd_y / sd_x * rho * (X-mean_x),(1-rho ^ 2) * sd_y)

Как мне сделать rho = f (x)?В настоящий момент я склеиваю два распределения вместе, чтобы получить хоккейную клюшку, похожую на блок разброса.:

 # Correlated Vectors (X, Y) - Hockey Stick 
 set.seed = 47
 n = 729
 mean_x = 3.13; sd_x = 0.6  # FEV
 mean_y =  31.3; sd_y = 6.7 # O2max

 # rho and breakpoint
 rho = 0.7; breakpoint = 3.5
 index_break = sum(X<breakpoint)

 # Generate X distributuion
 X = rnorm(n, mean_x, sd_x)

 # Generate Y disrtribution parts
 Y_rho = vector(); Y = vector()
 Y_rho = rnorm(n, mean_y + sd_y/sd_x*rho*(X-mean_x), (1-rho^2)*sd_y[1:index_break]
 Y = rnorm(n, mean_y, sd_y)[(index_break+1):length(FEV)]
 Y = c(Y_rho, Y)

 # plot
 plot(X, Y)

enter image description here

Большое спасибо заранее,* * 1045

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...