2016-03-23 3 views
7

Я пытаюсь воспроизвести в R код, который кто-то написал в Stata, и ударил стену, пытаясь предсказать поведение своего p-RNG.Репликация настроек семени от Stata

Их код имеет следующий фрагмент:

set seed 123456 

К сожалению, это немного туманное именно алгоритм, используемый Stata. This вопрос предполагает, что это алгоритм KISS, но в конце концов не удалось его реплицировать (а некоторые из них, похоже, мертвы/устарели). И the manual от Stata за set seed ничего не говорит об алгоритмах. This вопрос, похоже, не был завершен.

Действительно ли это безумное поручение, чтобы попытаться воспроизвести случайные числа Stata?

Я не знаю, какая версия Stata была использована для создания этого.

+4

Если вы не знаете, какая версия была использована, ваша проблема действительно сложнее, поскольку вы хотите реплицировать программу, но не можете быть точным в какой программе. http://blog.stata.com/2016/03/10/how-to-generate-random-numbers-in-stata/ дает обзор и подчеркивает, что метод по умолчанию был изменен в Stata 14. http: // www .stata.com/manuals14/fn.pdf говорит больше. –

+0

В одном вопросе вы упомянули http: // stackoverflow.com/questions/35139808/make-prngs-agree-through-software не помечены как «Stata» и не содержат код Stata. Он просто упомянул Стату мимоходом. Поэтому неудивительно, что он не получил ответа в отношении Stata. –

+0

@NickCox благодарит за ссылки, очень полезно. Я отредактировал ответ ниже, я думаю, что теперь он намного более каноничен, вы можете свободно добавлять/редактировать, если хотите. – MichaelChirico

ответ

8

Вкратце: Да, это безумное поручение.

Stata, являясь проприетарным программным обеспечением, не выпустил всех деталей своих основных компонентов, таких как генератор случайных чисел. Тем не менее, documentation is available (ссылка для Stata 14), наиболее относящий:

runiform() является основой для всех других функций случайных чисел, так как все другие числа на случайных функциях преобразования формы (0, 1) случайные числа указанный дистрибутив.

runiform() реализует Вихрь Мерсенна 64-разрядный (MT64) и «держать его просто тупой» 32-бит (KISS32) алгоритмы для генерации однородной (0, 1) случайных чисел. runiform() использует алгоритм MT64 по умолчанию.

runiform() использует алгоритм KISS32 только тогда, когда пользователь версия меньше, чем 14 или когда генератор случайных чисел был установлен kiss32 ...

Напомним также из ?Random в R, что для Mersenne twister:

«Семя» - это 624-мерный набор из 32-битных целых чисел, а также текущая позиция в этом наборе.

Stata внутренне контролирует 624-мерный набор, который почти невозможно угадать.

Я предлагаю вам экспортировать эти случайные числа из Stata и читать их в вектор/матрицу/etc. в R с использованием

library(haven) 
mydata <- read_dta("mydata.dta") 
+0

Спасибо. К сожалению, у меня нет локальной версии Stata, поэтому я просто перейду. – MichaelChirico