ИЗМЕНИТЬ
Я не смог воспроизвести результаты, которые я первоначально опубликовал. Когда я получил эти результаты в первый раз, я закрыл R, перезапустил его и снова запустил все это, просто чтобы убедиться, и снова получил те же результаты. То, что показано ниже, точно скопировано из моей консоли R. Однако я только что попробовал код в третий (и четвертый, и пятый) раз, и он не работает. Я оставляю свой первоначальный ответ на тот случай, если я что-то понял и не понял, и он может быть полезен кому-то другому, но приведенный ниже совет, похоже, не работает (по крайней мере, не всегда).
Проблема, кажется, заключается в коде C. Когда я открываю функцию ideal
и запускаю ее построчно, all.equal
возвращает TRUE для каждого ввода в этой строке кода:
output <- .C("IDEAL", PACKAGE = .package.Name, as.integer(n),
as.integer(m), as.integer(d), as.double(yToC), as.integer(maxiter),
as.integer(thin), as.integer(impute), as.integer(mda),
as.double(xp), as.double(xpv), as.double(bp), as.double(bpv),
as.double(xstart), as.double(bstart), xoutput = as.double(rep(0,
n * d * numrec)), boutput = as.double(0), as.integer(burnin),
as.integer(usefile), as.integer(store.item), as.character(file),
as.integer(verbose))
Однако, когда я запускаю приведенный выше код несколько раз, output$xoutput
каждый раз возвращает несколько разные результаты, даже если я вызываю set.seed(42)
непосредственно перед каждым запуском.
sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] grid splines stats graphics grDevices utils datasets methods base
other attached packages:
[1] SoDA_1.0-5 pscl_1.04.4 vcd_1.2-13 colorspace_1.2-0 gam_1.06.2 coda_0.16-1 lattice_0.20-10 mvtnorm_0.9-9994
[9] MASS_7.3-22
loaded via a namespace (and not attached):
[1] tools_2.15.2
ИСХОДНЫЙ ОТВЕТ
Функция ideal
имеет аргумент startvals
. Значение по умолчанию для этого аргумента — «eigen». Чтобы ваш вызов set.seed
имел эффект, вам нужно изменить этот аргумент на «случайный». Вот что вы уже пробовали:
run1 <- simulationResult(
ideal(s109,
normalize=TRUE,
maxiter = 500,
thin = 10,
burnin = 0,
startvals = "eigen"),
seed = 42)
run2 <- simulationResult(
ideal(s109,
normalize=TRUE,
maxiter = 500,
thin = 10,
burnin = 0,
startvals = "eigen"),
seed = 42)
all.equal(run1@firstState, run2@firstState)
[1] TRUE
all.equal(run1@result$xbar, run2@result$xbar)
[1] "Mean relative difference: 0.01832379"
А вот то же самое с startvals
, установленным на «случайный»:
run1 <- simulationResult(
ideal(s109,
normalize=TRUE,
maxiter = 500,
thin = 10,
burnin = 0,
startvals = "random"),
seed = 42)
run2 <- simulationResult(
ideal(s109,
normalize=TRUE,
maxiter = 500,
thin = 10,
burnin = 0,
startvals = "random"),
seed = 42)
all.equal(run1@firstState, run2@firstState)
[1] TRUE
all.equal(run1@result$xbar, run2@result$xbar)
[1] TRUE
Насколько я вижу, необходимость установки startvals
в "random" для получения воспроизводимых результатов четко не указана в документации пакета. Мне пришлось поиграть с ним некоторое время, прежде чем я понял это.
person
SchaunW
schedule
12.06.2013