Announcement

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

  • Problem Replicating NLSUR example in Stata reference manual

    I'm attempting to replicate example 5 of the nlsur entry in the Stata 17 reference manual (p. 1769) using Stata 17.0 MP. This example shows how to fit a basic AIDS demand model using the nlsur commandwith a function evaluator program.

    I've reviewed a similar issue raised with this example in the following Statalist post. However, the solutions provided in that post do not appear to apply here.

    Code:
    program nlsuraids
        version 17.0
        
        syntax varlist(min=8 max=8) if, at(name)
        tokenize `varlist'
        args w1 w2 w3 lnp1 lnp2 lnp3 lnp4 lnexp
        
        tempname a1 a2 a3 a4
        scalar `a1' = `at'[1,1]
        scalar `a2' = `at'[1,2]
        scalar `a3' = `at'[1,3]
        scalar `a4' = 1 - `a1' - `a2' - `a3'
        
        tempname b1 b2 b3
        scalar `b1' = `at'[1,4]
        scalar `b2' = `at'[1,5]
        scalar `b3' = `at'[1,6]
        
        tempname g11 g12 g13 g14
        tempname g21 g22 g23 g24
        tempname g31 g32 g33 g34
        tempname g41 g42 g43 g44
        
        scalar `g11' = `at'[1,7]
        scalar `g12' = `at'[1,8]
        scalar `g13' = `at'[1,9]
        scalar `g14' = -`g11'-`g12'-`g13'
        
        scalar `g21' - `g12'
        scalar `g22' = `at'[1,10]
        scalar `g23' = `at'[1,11]
        scalar `g24' = -`g21'-`g22'-`g23'
        
        scalar `g31' = `g13'
        scalar `g32' = `g23'
        scalar `g33' = `at'[1,12]
        scalar `g34' = -`g31'-`g32'-`g33'
        
        scalar `g41' = `g14'
        scalar `g42' = `g24'
        scalar `g43' = `g34'
        scalar `g44' = -`g41'-`g42'-`g43'
        
        qui {
            tempvar lnpindex
            gen double `lnpindex' = 5 +  `a1'*`lnp1' + `a2'*`lnp2' + ///
                                         `a3'*`lnp3' + `a4'*`lnp4'
            forvalues i = 1/4 {
                forvalues j = 1/4 {
                    replace `lnpindex' = `lnpindex' + ///
                            0.5*`g`i'`j''*`lnp`i''*`lnp`j''
                }
            }
            replace `w1' = `a1' + `g11'*`lnp1' + `g12'*`lnp2' + ///
                                  `g13'*`lnp3' + `g14'*`lnp4' + ///
                                  `b1'*(`lnexp' - `lnpindex')
            replace `w2' = `a2' + `g21'*`lnp1' + `g22'*`lnp2' + ///
                                  `g23'*`lnp3' + `g24'*`lnp4' + ///
                                  `b2'*(`lnexp' - `lnpindex')
            replace `w3' = `a3' + `g31'*`lnp1' + `g32'*`lnp2' + ///
                                  `g33'*`lnp3' + `g34'*`lnp4' + ///
                                  `b3'*(`lnexp' - `lnpindex')
        }
    end
    
    use https://www.stata-press.com/data/r17/food
    
    nlsur aids @ w1 w2 w3 lnp1 lnp2 lnp3 lnp4 lnexp, parameters(a1 a2 a3 b1 b2 b3 g11 g12 g13 g22 g23 g33) neq(3) ifgnls
    Running the code above yields the following error message:
    nlsuraids returned 101
    verify that nlsuraids is a function evaluator program
    r(101);
    I've tried to insure that my code matches that in the reference manual (save for changing the variable label for "lnm" to "lnexp" to match the dataset), but I cannot figure out why I'm getting an error message. I know that a simple typo can lead to this error message--which is not very informative error message--but I have not been able to find any.

    Thank you very much in advance for any help on this!
Working...
X