Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Inquire about "set seed"

    The generate command is used to create a new variable. The runiform() function provides a draw from the uniform distribution. Whenever random numbers are generated, we set the seed to a specific value with the set seed command so that subsequent runs of the same program lead to the same random numbers being drawn.
    I didn't understand above explanation about set seed. The third sentence is a little awkward for me.

    Code:
    * Make artificial dataset of 100 observations on 4 uniform variables
    clear
    set obs 100
    set seed 10101
    generate x1var = runiform()
    generate x2var = runiform()
    generate x3var = runiform()
    generate x4var = runiform()
    How to interpret "set seed 10101" here?

    Many thanks in advance!

  • #2
    You can best understand the set seed command by reviewing the output of help set seed and the full documentation in the set seed section of the Stata Reference Manual PDF included with your Stata installation and accessible from Stata's Help menu.

    While it may seem odd to generate the same set of random numbers each time you run a program, that is exactly what you need when you are developing the program.

    Comment


    • #3
      Alternatively, here is an extension of your example both with and without the -set seed- commands.

      Code:
      * Example 1, WITH -set seed-
      * Make artificial dataset of 100 observations on 4 uniform variables
      
      clear
      set obs 100
      set seed 10101
      generate byte id = _n
      forvalues i = 1/4 {
      generate double y`i' = runiform()
      }
      save "C:/Temp/yvars.dta", replace
      
      clear
      set obs 100
      set seed 10101
      generate byte id = _n
      forvalues i = 1/4 {
      generate double x`i' = runiform()
      }
      
      merge 1:1 id using "C:/Temp/yvars.dta"
      * Generate x-y difference scores
      forvalues i = 1/4 {
      generate double diff`i' = x`i' - y`i'
      }
      summarize diff*
      
      
      * Example 2, WITHOUT -set seed-
      * Make artificial dataset of 100 observations on 4 uniform variables
      
      clear
      set obs 100
      *set seed 10101
      generate byte id = _n
      forvalues i = 1/4 {
      generate double y`i' = runiform()
      }
      save "C:/Temp/yvars.dta", replace
      
      clear
      set obs 100
      *set seed 10101
      generate byte id = _n
      forvalues i = 1/4 {
      generate double x`i' = runiform()
      }
      
      merge 1:1 id using "C:/Temp/yvars.dta"
      * Generate x-y difference scores
      forvalues i = 1/4 {
      generate double diff`i' = x`i' - y`i'
      }
      summarize diff*
      Here are the results from the two -summarize- commands, the first with -set seed-, the second without:

      Code:
      . summarize diff*
      
          Variable |        Obs        Mean    Std. Dev.       Min        Max
      -------------+---------------------------------------------------------
             diff1 |        100           0           0          0          0
             diff2 |        100           0           0          0          0
             diff3 |        100           0           0          0          0
             diff4 |        100           0           0          0          0
      
      
      . summarize diff*
      
          Variable |        Obs        Mean    Std. Dev.       Min        Max
      -------------+---------------------------------------------------------
             diff1 |        100   -.0082776    .3946462  -.8850869   .8232766
             diff2 |        100   -.0557903    .3816878  -.8487586   .7138876
             diff3 |        100    .0203567    .4202005  -.7928912    .863111
             diff4 |        100   -.0937558    .4062611  -.9139716    .826084

      HTH.
      --
      Bruce Weaver
      Email: [email protected]
      Version: Stata/MP 18.5 (Windows)

      Comment

      Working...
      X