Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: Nlsur Quaids


From   Ana <analunhb@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Nlsur Quaids
Date   Tue, 19 Jul 2011 16:16:18 -0300

Brian, Thank you very much for your prompt response. I've corrected
this silly mistake of mine, but I'm getting another one now.

Where does the restriction come from?
Actually, I using your code (Brain Poi, 2008) to estimate a seven
group demand system and I want to apply/test a test developed by
Browning and Chiappori (1998). Therefore, I want to test the following
restrictions (see in the following program routine I am sendig
attached):

   scalar `g81' = `g13'*`g24' - `g13'*`g42' - `g31'*`g24' + `g31'*`g42'
   scalar `g82' = `g14'*`g23' - `g14'*`g32' - `g41'*`g23' + `g41'*`g32'
   scalar `g83' = `g12' - `g21'
   scalar `g34' = `g43' + `g81'/`g83' - `g82'/`g83'
  ....an so on.

The problem is that I'm getting r(480) indicanting that I have missing
values or wrong initial values.
Can you guess how can I correct this mistake?

My program nlsur routine:

program nlsurquaidssrum

	version 11.1
	
	syntax varlist(min=21 max=21) if, at(name)
	
	// tokenize `varlist'
	args w1 w2 w3 w4 w5 w6 lnp1 lnp2 lnp3 lnp4 lnp5 lnp6 lnp7 lnm ano
agechef escchef none respropria resid residsq
	
	// With seven goods, there are 72 parameters that can be
	// estimated, after eliminating one of the goods and
	// imposing adding up, symmetry, and homogeneity
	// constraints, in the QUAIDS model
	// Here, we extract those parameters from the `at'
	// vector, and impose constraints as we go along

	tempname a1 a2 a3 a4 a5 a6 a7
	scalar `a1' = `at'[1,1]	
	scalar `a2' = `at'[1,2]	
	scalar `a3' = `at'[1,3]
	scalar `a4' = `at'[1,4]
	scalar `a5' = `at'[1,5]
	scalar `a6' = `at'[1,6]
	scalar `a7' = 1 - `a1' - `a2' - `a3' - `a4' - `a5' - `a6'
	
	tempname b1 b2 b3 b4 b5 b6 b7
	scalar `b1' = `at'[1,7]
	scalar `b2' = `at'[1,8]
	scalar `b3' = `at'[1,9]
	scalar `b4' = `at'[1,10]
	scalar `b5' = `at'[1,11]
	scalar `b6' = `at'[1,12]
	scalar `b7' = -`b1' - `b2' - `b3' - `b4' - `b5' - `b6'
	
	tempname g11 g12 g13 g14 g15 g16 g17
	tempname g21 g22 g23 g24 g25 g26 g27
	tempname g31 g32 g33 g34 g35 g36 g37
	tempname g41 g42 g43 g44 g45 g46 g47
	tempname g51 g52 g53 g54 g55 g56 g57
	tempname g61 g62 g63 g64 g65 g66 g67
	tempname g71 g72 g73 g74 g75 g76 g77
	scalar `g11' = `at'[1,13]
	scalar `g12' = `at'[1,14]
	scalar `g13' = `at'[1,15]
	scalar `g14' = `at'[1,16]
	scalar `g15' = `at'[1,17]
	scalar `g16' = `at'[1,18]
	scalar `g17' = -`g11' - `g12' - `g13' -`g14' - `g15' - `g16'

	// scalar `g21' = `g12'
	scalar `g21' = `at'[1,19]
	scalar `g22' = `at'[1,20]
	scalar `g23' = `at'[1,21]
	scalar `g24' = `at'[1,22]
	scalar `g25' = `at'[1,23]
	scalar `g26' = `at'[1,24]
	scalar `g27' = -`g21' - `g22' - `g23' - `g24' - `g25' - `g26'

	// scalar `g31' = `g13'
	// scalar `g32' = `g23'
	scalar `g31' = `at'[1,25]
	scalar `g32' = `at'[1,26]
	scalar `g33' = `at'[1,27]
	scalar `g34' = `at'[1,28]
	scalar `g35' = `at'[1,29]
	scalar `g36' = `at'[1,30]
	scalar `g37' = -`g31' - `g32' - `g33' - `g34' - `g35' - `g36'

	// scalar `g41' = `g14'
	// scalar `g42' = `g24'
	// scalar `g43' = `g34'
	scalar `g41' = `at'[1,31]
	scalar `g42' = `at'[1,32]
	scalar `g43' = `at'[1,33]
	scalar `g44' = `at'[1,34]
	scalar `g45' = `at'[1,35]
	scalar `g46' = `at'[1,36]
	scalar `g47' = -`g41' - `g42' - `g43' - `g44' - `g45' - `g46'
	
	// scalar `g51' = `g15'
	// scalar `g52' = `g25'
	// scalar `g53' = `g35'
	// scalar `g54' = `g45'
	scalar `g51' = `at'[1,37]
	scalar `g52' = `at'[1,38]
	scalar `g53' = `at'[1,39]
	scalar `g54' = `at'[1,40]
	scalar `g55' = `at'[1,41]
	scalar `g56' = `at'[1,42]
	scalar `g57' = -`g51' - `g52' - `g53' - `g54' - `g55' - `g56'
	
	// scalar `g61' = `g16'
	// scalar `g62' = `g26'
	// scalar `g63' = `g36'
	// scalar `g64' = `g46'
	// scalar `g65' = `g56'
	scalar `g61' = `at'[1,43]
	scalar `g62' = `at'[1,44]
	scalar `g63' = `at'[1,45]
	scalar `g64' = `at'[1,46]
	scalar `g65' = `at'[1,47]
	scalar `g66' = `at'[1,48]
	scalar `g67' = -`g61' - `g62' - `g63' - `g64' - `g65' - `g66'
	
	// scalar `g71' = `g17'
	// scalar `g72' = `g27'
	// scalar `g73' = `g37'
	// scalar `g74' = `g47'
	// scalar `g75' = `g57'
	// scalar `g76' = `g67'
	scalar `g71' = `at'[1,49]
	scalar `g72' = `at'[1,50]
	scalar `g73' = `at'[1,51]
	scalar `g74' = `at'[1,52]
	scalar `g75' = `at'[1,53]
	scalar `g76' = `at'[1,54]
	scalar `g77' = -`g71' - `g72' - `g73' - `g74' - `g75' - `g76'

   // Browning e Chiappori
   tempname g81 g82 g83
   scalar `g81' = `g13'*`g24' - `g13'*`g42' - `g31'*`g24' + `g31'*`g42'
   scalar `g82' = `g14'*`g23' - `g14'*`g32' - `g41'*`g23' + `g41'*`g32'
   scalar `g83' = `g12' - `g21'
   scalar `g34' = `g43' + `g81'/`g83' - `g82'/`g83'
   // scalar `g34' - `g43' = ((`g13' - `g31')*(`g24' - `g42') - (`g14'
- `g41')*(`g23' - `g32'))/(`g12' - `g21'))

   tempname g91  g92
   scalar `g91' = `g13'*`g25' - `g13'*`g52' - `g31'*`g25' + `g31'*`g52'
   scalar `g92' = `g15'*`g23' - `g15'*`g32' - `g51'*`g23' + `g51'*`g32'
   scalar `g35' = `g53' + `g91'/`g83' - `g92'/`g83'
   // scalar `g35' - `g53' = ((`g13' - `g31')*(`g25' - `g52') - (`g15'
- `g51')*(`g23' - `g32'))/(`g12' - `g21'))

   tempname g101  g102
   scalar `g101' = `g13'*`g26' - `g13'*`g62' - `g31'*`g26' + `g31'*`g62'
   scalar `g102' = `g16'*`g23' - `g16'*`g32' - `g61'*`g23' + `g61'*`g32'
   scalar `g36'  = `g63' + `g101'/`g83' - `g102'/`g83'
   // scalar `g36' - `g63' = ((`g13' - `g31')*(`g26' - `g62') - (`g16'
- `g61')*(`g23' - `g32'))/(`g12' - `g21'))

   tempname g111  g112
   scalar `g111' = `g14'*`g25' - `g14'*`g52' - `g41'*`g25' + `g41'*`g52'
   scalar `g112' = `g15'*`g24' - `g15'*`g42' - `g51'*`g24' + `g51'*`g42'
   scalar `g45'  = `g54' + `g111'/`g83' - `g112'/`g83'
   // scalar `g45' - `g54' = ((`g14' - `g41')*(`g25' - `g52') - (`g15'
- `g51')*(`g24' - `g42'))/(`g12' - `g21'))

   tempname g121  g122
   scalar `g121' = `g14'*`g26' - `g14'*`g62' - `g41'*`g26' + `g41'*`g62'
   scalar `g122' = `g16'*`g24' - `g16'*`g42' - `g61'*`g24' + `g61'*`g42'
   scalar `g46' = `g64' + `g121'/`g83' - `g122'/`g83'
   // scalar `g46' - `g64' = ((`g14' - `g41')*(`g26' - `g62') - (`g16'
- `g61')*(`g24' - `g42'))/(`g12' - `g21'))

   tempname g131  g132
   scalar `g131' = `g15'*`g26' - `g15'*`g62' - `g51'*`g26' + `g51'*`g62'
   scalar `g132' = `g16'*`g25' - `g16'*`g52' - `g61'*`g25' + `g61'*`g52'
   scalar `g46' = `g64' + `g131'/`g83' - `g132'/`g83'
   // scalar `g56' - `g65' = ((`g15' - `g51')*(`g26' - `g62') - (`g16'
- `g61')*(`g25' - `g52'))/(`g12' - `g21'))


	tempname l1 l2 l3 l4 l5 l6 l7
	scalar `l1' = `at'[1,55]
	scalar `l2' = `at'[1,56]
	scalar `l3' = `at'[1,57]
	scalar `l4' = `at'[1,58]
	scalar `l5' = `at'[1,59]
	scalar `l6' = `at'[1,60]
	scalar `l7' = -`l1' - `l2' - `l3' -`l4' - `l5' - `l6'
	
	
	// Outras Variáveis demográficas
	
	// ano
	tempname f1 f2 f3 f4 f5 f6 f7
	scalar `f1' = `at'[1,61]
	scalar `f2' = `at'[1,62]
	scalar `f3' = `at'[1,63]
	scalar `f4' = `at'[1,64]
	scalar `f5' = `at'[1,65]
	scalar `f6' = `at'[1,66]
	scalar `f7' = -`f1' - `f2' - `f3' -`f4' - `f5' - `f6'
	
	// agechef
	tempname z1 z2 z3 z4 z5 z6 z7
	scalar `z1' = `at'[1,67]
	scalar `z2' = `at'[1,68]
	scalar `z3' = `at'[1,69]
	scalar `z4' = `at'[1,70]
	scalar `z5' = `at'[1,71]
	scalar `z6' = `at'[1,72]
	scalar `z7' = -`z1' - `z2' - `z3' -`z4' - `z5' - `z6'
	
	// escchef
	tempname t1 t2 t3 t4 t5 t6 t7
	scalar `t1' = `at'[1,73]
	scalar `t2' = `at'[1,74]
	scalar `t3' = `at'[1,75]
	scalar `t4' = `at'[1,76]
	scalar `t5' = `at'[1,77]
	scalar `t6' = `at'[1,78]
	scalar `t7' = -`t1' - `t2' - `t3' -`t4' - `t5' - `t6'
	
	
	// respropria
	tempname r1 r2 r3 r4 r5 r6 r7
	scalar `r1' = `at'[1,79]
	scalar `r2' = `at'[1,80]
	scalar `r3' = `at'[1,81]
	scalar `r4' = `at'[1,82]
	scalar `r5' = `at'[1,83]
	scalar `r6' = `at'[1,84]
	scalar `r7' = -`r1' - `r2' - `r3' -`r4' - `r5' - `r6'
	
	// resid
	tempname v1 v2 v3 v4 v5 v6 v7
	scalar `v1' = `at'[1,85]
	scalar `v2' = `at'[1,86]
	scalar `v3' = `at'[1,87]
	scalar `v4' = `at'[1,88]
	scalar `v5' = `at'[1,89]
	scalar `v6' = `at'[1,90]
	scalar `v7' = -`v1' - `v2' - `v3' -`v4' - `v5' - `v6'
	
	// residsq
	tempname e1 e2 e3 e4 e5 e6 e7
	scalar `e1' = `at'[1,91]
	scalar `e2' = `at'[1,92]
	scalar `e3' = `at'[1,93]
	scalar `e4' = `at'[1,94]
	scalar `e5' = `at'[1,95]
	scalar `e6' = `at'[1,96]
	scalar `e7' = -`e1' - `e2' - `e3' -`e4' - `e5' - `e6'
	
	
	// Okay, now that we have all the parameters, we can
	// calculate the expenditure shares.	
	quietly {
		// First get the price index
		// I set a_0 = 5
		tempvar lnpindex
		gen double `lnpindex' = 5 + `a1'*`lnp1' + `a2'*`lnp2'	///
					  + `a3'*`lnp3' + `a4'*`lnp4' + `a5'*`lnp5' + `a6'*`lnp6' + `a7'*`lnp7'
		forvalues i = 1/7 {
			forvalues j = 1/7 {
				replace `lnpindex' = `lnpindex' + 	///
					0.5*`g`i'`j''*`lnp`i''*`lnp`j''
			}
		}
		
		// The b(p) term in the QUAIDS model:
		tempvar bofp
		gen double `bofp' = 0
		forvalues i = 1/7 {
			replace `bofp' = `bofp' + `lnp`i''*`b`i''
		}
		replace `bofp' = exp(`bofp')
		
		
		// Finally, the expenditure shares for 6 of the 7
		// goods (the fourth is dropped to avoid singularity)
		replace `w1' = `a1' + `g11'*`lnp1' + `g12'*`lnp2' +	///
				      `g13'*`lnp3' + `g14'*`lnp4' +	`g15'*`lnp5' + `g16'*`lnp6' +
`g17'*`lnp7' + ///
				      `b1'*(`lnm' - `lnpindex') + `f1'*`ano' + `z1'*`agechef' +
`t1'*`escchef' + `r1'*`respropria'	+ ///
				      `v1'*`resid' + `e1'*`residsq' + `l1'/`bofp'*(`lnm' -
`lnpindex')^2
		replace `w2' = `a2' + `g21'*`lnp1' + `g22'*`lnp2' +	///
				      `g23'*`lnp3' + `g24'*`lnp4' +	`g25'*`lnp5' + `g26'*`lnp6' +
`g27'*`lnp7' + ///
				      `b2'*(`lnm' - `lnpindex') + `f2'*`ano' + `z2'*`agechef' +
`t2'*`escchef' + `r2'*`respropria'	+ ///
				      `v2'*`resid' + `e2'*`residsq' + `l2'/`bofp'*(`lnm' -
`lnpindex')^2
		replace `w3' = `a3' + `g31'*`lnp1' + `g32'*`lnp2' +	///
				      `g33'*`lnp3' + `g34'*`lnp4' +	`g35'*`lnp5' + `g36'*`lnp6' +
`g37'*`lnp7' + ///
				      `b3'*(`lnm' - `lnpindex') + `f3'*`ano' + `z3'*`agechef' +
`t3'*`escchef' + `r3'*`respropria'	+ ///
				      `v3'*`resid' + `e3'*`residsq' + `l3'/`bofp'*(`lnm' -
`lnpindex')^2
		replace `w4' = `a4' + `g41'*`lnp1' + `g42'*`lnp2' +	///
				      `g43'*`lnp3' + `g44'*`lnp4' +	`g45'*`lnp5' + `g46'*`lnp6' +
`g47'*`lnp7' + ///
				      `b4'*(`lnm' - `lnpindex') + `f4'*`ano' + `z4'*`agechef' +
`t4'*`escchef' + `r4'*`respropria'	+ ///
				      `v4'*`resid' + `e4'*`residsq' + `l4'/`bofp'*(`lnm' -
`lnpindex')^2
		replace `w5' = `a5' + `g51'*`lnp1' + `g52'*`lnp2' +	///
				      `g53'*`lnp3' + `g54'*`lnp4' +	`g55'*`lnp5' + `g56'*`lnp6' +
`g57'*`lnp7' + ///
				      `b5'*(`lnm' - `lnpindex') + `f5'*`ano' + `z5'*`agechef' +
`t5'*`escchef' + `r5'*`respropria'	+ ///
				      `v5'*`resid' + `e5'*`residsq' + `l5'/`bofp'*(`lnm' -
`lnpindex')^2
		replace `w6' = `a6' + `g61'*`lnp1' + `g62'*`lnp2' +	///
				      `g63'*`lnp3' + `g64'*`lnp4' +	`g65'*`lnp5' + `g66'*`lnp6' +
`g67'*`lnp7' + ///
				      `b6'*(`lnm' - `lnpindex') + `f6'*`ano' + `z6'*`agechef' +
`t6'*`escchef' + `r6'*`respropria'	+ ///
				      `v6'*`resid' + `e6'*`residsq' + `l6'/`bofp'*(`lnm' -
`lnpindex')^2
	}
	
end


Thank you very much in advance.
Best regards,
Ana.




2011/7/18 Brian P. Poi <brian@poiholdings.com>:
>
> On 07/18/2011 06:40 PM, Ana wrote:
>>
>> Dear Statalisters (and Brian Poi),
>>
>> I'm using nlsur Quaids from Brian Poi (2008).
>> My routine is (the same as Poi's one):
>>
>> nlsur quaids @ w1 w2 w3 lnp1-lnp4 lnexp, ifgnls nequations(3) param(a1
>> a2 a3 b1 b2 b3 g11 g12 g13 g22 g23 g33 l1 l2 l3) nolog
>>
>> I'm trying to compare two models: unrestricted model and restricted model.
>> My restriction is something like this: `g22' = `g12'*`g13'
>>
>> The problem is that I'm getting r(198) error when I run the restricted
>> model.
>> The only thing that I include in the original model is:
>>
>> tempname `g22'
>> scalar `g22' = `g12'*`g13'
>>
>> The mistakes is clearly a syntax one (problably the multiplication is
>> not correct).
>>
>> Can anyone help me?
>> I really appreciate it.
>>
>
> There are two issues I see here.  One,
>
> .  tempname `g22'
>
> should be
>
> .  tempname g22       (without `' ticks)
>
> because you are declaring a new temporary scalar.
>
> The other is that since you are constraining g22, it is no longer a separate
> parameter to be estimated, so you shouldn't declare it in your -nlsur-
> statement:
>
> . nlsur quaids @ w1 w2 w3 lnp1-lnp4 lnexp, ifgnls nequations(3) ///
>   param(a1 a2 a3 b1 b2 b3 g11 g12 g13 g23 g33 l1 l2 l3) nolog
>
>                                      ^ (I took out g22)
>
> If you have other parameter restrictions like that one, then you'll want to
> take them out of the param() option, too.
>
> Out of curiosity, where does the restriction g22 = g12*g13 come from?
>
>   -- Brian Poi
>   -- brian@poiholdings.com
>
>
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/
>

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index