2016-03-23 19 views
7

Tôi đang cố gắng sao chép trong R một chút mã người khác đã viết trong Stata, và đã nhấn một bức tường cố gắng để dự đoán hành vi của p-RNG của họ.Nhân rộng thiết lập hạt giống từ Stata

mã của họ có đoạn này:

set seed 123456 

Thật không may, đó là một chút mơ hồ chính xác các thuật toán được sử dụng bởi Stata. This câu hỏi cho thấy đó là một thuật toán KISS, nhưng không quản lý để nhân rộng cuối cùng (và một số liên kết có vẻ như đã chết/lỗi thời). Và the manual từ Stata cho set seed không đề cập đến bất kỳ điều gì về thuật toán. This câu hỏi cũng không có vẻ đã được hoàn thành.

Đó có phải là công việc của kẻ ngốc để thử và nhân rộng các số ngẫu nhiên của Stata không?

Tôi không biết phiên bản Stata nào được sử dụng để tạo phiên bản này.

+4

Nếu bạn không biết phiên bản nào được sử dụng, vấn đề của bạn thực sự khó khăn hơn khi bạn muốn sao chép chương trình nhưng bạn không thể chính xác về chương trình nào. http://blog.stata.com/2016/03/10/how-to-generate-random-numbers-in-stata/ đưa ra một cái nhìn tổng quan và nhấn mạnh rằng phương pháp mặc định đã thay đổi trong Stata 14. http: // www .stata.com/manuals14/fn.pdf nói nhiều hơn. –

+0

Một câu hỏi bạn đề cập đến http: // stackoverflow.com/questions/35139808/make-prngs-thoả thuận-phần mềm không được gắn thẻ "Stata" và không bao gồm mã Stata. Nó chỉ đề cập đến Stata khi đi qua. Vì vậy, nó không ngạc nhiên khi nó không nhận được phản hồi về Stata. –

+0

@NickCox cảm ơn rất nhiều cho các liên kết, rất hữu ích thực sự. Tôi đã chỉnh sửa câu trả lời dưới đây, tôi nghĩ rằng đó là kinh điển hơn bây giờ, bạn nên cảm thấy tự do để thêm/chỉnh sửa nếu bạn thấy phù hợp. – MichaelChirico

Trả lời

8

Tóm lại: Có, đó là công việc của kẻ ngốc.

Stata, là một phần mềm sở hữu độc quyền, đã không tiết lộ tất cả chi tiết về các thành phần cốt lõi của nó, giống như trình tạo số ngẫu nhiên của nó. Tuy nhiên, documentation is available (liên kết cho Stata 14), pertinently nhất:

runiform() là cơ sở cho tất cả các chức năng ngẫu nhiên số khác vì tất cả các random- chức năng số khác chuyển đổi thống nhất (0, 1) số ngẫu nhiên để phân phối được chỉ định.

runiform() thực hiện các Mersenne Twister-64 bit (MT64) và “giữ cho nó đơn giản ngu ngốc” thuật toán 32-bit (KISS32) để tạo thống nhất (0, 1) số ngẫu nhiên. runiform() sử dụng thuật toán MT64 theo mặc định.

runiform() sử dụng thuật toán KISS32 khi phiên bản sử dụng ít hơn 14 hoặc khi phát ngẫu nhiên số đã thiết lập để kiss32 ...

Nhớ lại cũng từ ?Random trong R rằng cho Mersenne twister:

'Hạt giống' là bộ 624 số nguyên 32 bit cộng với vị trí hiện tại trong tập hợp đó.

Stata kiểm soát nội bộ bộ 624 chiều, gần như không thể đoán được.

Tôi khuyên bạn nên xuất các số ngẫu nhiên này từ Stata và đọc chúng thành một véc tơ/ma trận/v.v. trong R sử dụng

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

Cảm ơn. Thật không may tôi không có một phiên bản địa phương của Stata, vì vậy tôi sẽ chỉ di chuyển trên. – MichaelChirico

Các vấn đề liên quan