Я могу нарисовать одинаковые случайные числа с Stata
и R
. По сути, я хочу получить ту же серию случайных чисел с sample
в R
и rdiscrete
в Stata
. Тем не менее, я попытался привести полный, но небольшой, воспроизводимый пример на каждом языке.
Я думаю, что функция sample
делает то же самое, что и функция rdiscrete
, но я не уверен. Предполагая, что эти функции выполняют одно и то же, мне просто нужно, чтобы они возвращали одинаковые случайные числа.
Я использую Stata 12
.
Вот мой R
код:
set.seed(1234)
wave_of_cy = 2
wave_obs = 20
fake_dat <- read.table(text = '
nobs p1 p2
0 .20 .10
1 .10 .15
2 .10 .15
3 .05 .10
4 .05 .10
5 .20 .05
6 .10 .05
7 .05 .05
8 .05 .05
9 .10 .20
', header = TRUE, stringsAsFactors = FALSE)
p_hrand = fake_dat[, (wave_of_cy+1)]
pp_hrand = p_hrand / sum(p_hrand)
my_rdata = sample(nrow(fake_dat), wave_obs, prob=pp_hrand, replace = TRUE)
my_rdata
hrand = fake_dat[my_rdata, 1]
hrand
Вот мой Stata
код:
clear
set seed 1234
global wave_of_cy = 2
set obs 20
local wave_obs = _N
clear
input nobs p1 p2
0 .20 .10
1 .10 .15
2 .10 .15
3 .05 .10
4 .05 .10
5 .20 .05
6 .10 .05
7 .05 .05
8 .05 .05
9 .10 .20
end
list
save fake_dat
clear
use "fake_dat.dta", replace
putmata fake_data = (nobs p1 p2), replace
mata:
p_hrand = fake_data[., $wave_of_cy+1]
pp_hrand = p_hrand :/ sum(p_hrand)
my_rdata = rdiscrete(`wave_obs', 1, pp_hrand)
my_rdata
hrand = fake_data[my_rdata, 1]
hrand
end