The DHS Program User Forum
Discussions regarding The DHS Program data and results
Home » Topics » Mortality » UNDER FIVE MORTALITY
UNDER FIVE MORTALITY [message #14265] Thu, 15 March 2018 01:05 Go to next message
rajesh.dahima91@gmail.com is currently offline  rajesh.dahima91@gmail.com
Messages: 9
Registered: March 2018
Member
Hello Members,

I am trying to calculate Under five mortality and Infant Mortality for India (NHFS-4 data).

I have used KR file and used the following codes in STATA

gen hpage= (v008-b3)/12
gen timeyears=.
replace timeyears=hpage
replace timeyears=b7/12 if b5==0
gen dead= (b5==0)
ltable timeyears dead if hpage<=5, int(.5)

the underfive mortality rate calculated for India using this method is 53.1 whereas the value in NFHS-4 report is 49.7 (http://rchiips.org/NFHS/NFHS-4Reports/India.pdf).

Kindly tell me where am i going wrong.
Any help in this regard would be appreciated.


Thanks


RAJESH
INDIA
Re: UNDER FIVE MORTALITY [message #14498 is a reply to message #14265] Fri, 13 April 2018 07:38 Go to previous messageGo to next message
rajesh.dahima91@gmail.com is currently offline  rajesh.dahima91@gmail.com
Messages: 9
Registered: March 2018
Member
Dear DHS Team,
My query is not been resolved and it has been one month now..does the forum will help to resolve query or just to post query.


RAJESH
INDIA
Re: UNDER FIVE MORTALITY [message #14633 is a reply to message #14498] Wed, 25 April 2018 04:56 Go to previous messageGo to next message
habib is currently offline  habib
Messages: 2
Registered: April 2018
Location: Abuja
Member
have you used weights in your calculations?
Re: UNDER FIVE MORTALITY [message #14634 is a reply to message #14633] Wed, 25 April 2018 07:52 Go to previous messageGo to next message
rajesh.dahima91@gmail.com is currently offline  rajesh.dahima91@gmail.com
Messages: 9
Registered: March 2018
Member
No i am not able to apply weights for lifetable.

ltable timeyears dead

Beg. Std.
Interval Total Deaths Lost Survival Error [95% Conf. Int.]
------------------------------------------------------------ -------------------
0 1 259627 10702 48295 0.9546 0.0004 0.9537 0.9554
1 2 200630 641 49284 0.9511 0.0004 0.9502 0.9519
2 3 150705 271 49084 0.9490 0.0005 0.9481 0.9499
3 4 101350 200 51497 0.9465 0.0005 0.9455 0.9475
4 5 49653 70 49583 0.9439 0.0006 0.9427 0.9450
------------------------------------------------------------ -------------------

. ltable timeyears dead [fw=weight]
may not use noninteger frequency weights
r(401);

Under five 56.1 (i.e 1 - 0.9439)which does not match with the National report.


RAJESH
INDIA
Re: UNDER FIVE MORTALITY [message #14635 is a reply to message #14634] Wed, 25 April 2018 08:01 Go to previous messageGo to next message
schoumaker is currently offline  schoumaker
Messages: 65
Registered: May 2013
Location: Belgium
Senior Member
You can try syncmrates

and check this thread

https://userforum.dhsprogram.com/index.php?t=msg&goto=13 837&


Best,

Bruno


Bruno Schoumaker
Centre for Demographic Research
Université catholique de Louvain
Re: UNDER FIVE MORTALITY [message #14636 is a reply to message #14634] Wed, 25 April 2018 08:50 Go to previous messageGo to next message
habib is currently offline  habib
Messages: 2
Registered: April 2018
Location: Abuja
Member
I expected you to use importance weight instead of frequency weight
Re: UNDER FIVE MORTALITY [message #14648 is a reply to message #14635] Thu, 26 April 2018 02:10 Go to previous messageGo to next message
rajesh.dahima91@gmail.com is currently offline  rajesh.dahima91@gmail.com
Messages: 9
Registered: March 2018
Member
Yes I have tried syncmrates but not matching with DHS report. Hereby i attach screenshot of syncmrates and DHS stat results.

DHS results https://i.ibb.co/J265R59/Inked-Screenshot-2018-04-26-11-27-58-388-com-Measure-DHS-ICFI-LI.jpg

syncmrates Stata results https://i.ibb.co/dB34T46/stata-syncmrates.png


Thank you


RAJESH
INDIA

[Updated on: Thu, 27 May 2021 07:00] by Moderator

Report message to a moderator

Re: UNDER FIVE MORTALITY [message #14752 is a reply to message #14648] Thu, 03 May 2018 14:38 Go to previous messageGo to next message
Liz-DHS
Messages: 1516
Registered: February 2013
Senior Member
Dear User, Your screenshots do not appear for me on the forum. Can you attach as .jpg or .png files? Thank you!
Re: UNDER FIVE MORTALITY [message #14764 is a reply to message #14752] Fri, 04 May 2018 00:30 Go to previous messageGo to next message
rajesh.dahima91@gmail.com is currently offline  rajesh.dahima91@gmail.com
Messages: 9
Registered: March 2018
Member
Please find the attached .jpg file screenshot.

see screenshots above.


RAJESH
INDIA

[Updated on: Thu, 27 May 2021 07:02] by Moderator

Report message to a moderator

Re: UNDER FIVE MORTALITY [message #15066 is a reply to message #14764] Tue, 29 May 2018 17:32 Go to previous messageGo to next message
Trevor-DHS is currently offline  Trevor-DHS
Messages: 787
Registered: January 2013
Senior Member
The DHS Program uses a very different approach to the calculation of mortality rates than the method you tried. DHS uses a synthetic cohort life table method and produces estimates for the five years or ten years preceding the survey. See the Guide to DHS Statistics for more details of the approach.

The approach you have used has a few limitations:
1) It does not appear to limit the time period of interest at all.
2) It appears to be using single years of age for the age of the children. In contrast the synthetic cohort life table method uses groups of 0, 1-2, 3-5, 6-11, 12-23, 24-35, 36-47 months.

I haven't tried using syncmrates, so I can't comment on the accuracy of those estimates.

Re: UNDER FIVE MORTALITY [message #15067 is a reply to message #15066] Tue, 29 May 2018 19:06 Go to previous messageGo to next message
Trevor-DHS is currently offline  Trevor-DHS
Messages: 787
Registered: January 2013
Senior Member
Out of interests sake I downloaded and ran syncmrates and got the following results:

. syncmrates v008 b3 b7 [iw=v005]
------------------------------------------------------------------------------
             |   Observed   Bootstrap                         Normal-based
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
         nmr |   .0294637   .0004094    71.96   0.000     .0286612    .0302661
         pmr |   .0112654   .0002898    38.87   0.000     .0106974    .0118334
         imr |   .0407291   .0005196    78.39   0.000     .0397107    .0417474
         cmr |   .0093908   .0002689    34.93   0.000     .0088638    .0099178
        u5mr |   .0497373   .0005808    85.64   0.000     .0485991    .0508756
------------------------------------------------------------------------------
These match our estimates using IABR73FL.dta
Re: UNDER FIVE MORTALITY [message #15068 is a reply to message #15067] Tue, 29 May 2018 19:20 Go to previous messageGo to next message
Trevor-DHS is currently offline  Trevor-DHS
Messages: 787
Registered: January 2013
Senior Member
Here is a fairly simplistic piece of code that follows the approach given in the Guide to DHS Statistics, and produces estimates for five five-year periods.
It doesn't produce standard errors or confidence intervals, but allows you to see how the calculations are done:
* Example of early childhood mortality rates calculations
* Trevor Croft, March 9, 2018

* Change directory to the data directory
cd "C:\Users\xxxx\Data"
* Open DHS dataset - births recode file
use v005 v008 b3 b5 b7 using "IABR71FL.DTA", clear

* Create variables for time period limits - need to use variables as these change from case to case
gen t1 = .
gen t2 = .
* Initialize local variable lists used later
local vlist
local vlist2

* Loop through 5-year time periods
forvalues period = 0/4 {

	* Calculate upper limit of time period
	replace t2 = v008 - 60*`period'
	* Calculate lower limit of time period
	replace t1 = t2 - 60
	* List age group lower limits
	local agegroups 0 1 3 6 12 24 36 48 60
	* Turn thse into tokens to use for the upper limits of the age groups
	tokenize `agegroups'
	* Loop through the age groups
	foreach age of numlist `agegroups' {
		* Ignore the 60+ age group - this was just to set the upper limit for the last age group - see a2
		if (`age' < 60) {
			* Create local for lower limit of age group - use locals as these are constants
			local a1 = `age'
			* Create local for upper limit of age group = the lower limit of the next age group
			local a2 = `2'
			
			* Cohort A numerator
			gen numA`age'_`period' = ((`a1' <= b7 & b7 < `a2') & (t1 - `a2' <= b3 & b3 < t1 - `a1'))
			* Cohort B numerator
			gen numB`age'_`period' = ((`a1' <= b7 & b7 < `a2') & (t1 - `a1' <= b3 & b3 < t2 - `a2'))
			* Cohort C numerator
			gen numC`age'_`period' = ((`a1' <= b7 & b7 < `a2') & (t2 - `a2' <= b3 & b3 < t2 - `a1'))
			* Cohort A denominator
			gen denA`age'_`period' = ( (b5 == 1 | `a1' <= b7)  & (t1 - `a2' <= b3 & b3 < t1 - `a1'))
			* Cohort B denominator
			gen denB`age'_`period' = ( (b5 == 1 | `a1' <= b7)  & (t1 - `a1' <= b3 & b3 < t2 - `a2'))
			* Cohort C denominator
			gen denC`age'_`period' = ( (b5 == 1 | `a1' <= b7)  & (t2 - `a2' <= b3 & b3 < t2 - `a1'))
			
			* Count half for deaths for cohort C, except for the last period where all deaths are counted
			local f = 0.5
			if (`period' == 0) {
				local f = 1
			}
			* Sum numerators from cohorts A, B and C for this case
			gen num`age'_`period' = 0.5*numA`age'_`period' + numB`age'_`period' + numC`age'_`period'*`f'
			* Sum denominators from chorts A, B and C for this case
			gen den`age'_`period' = 0.5*denA`age'_`period' + denB`age'_`period' + denC`age'_`period'*0.5
			
			* Generate list of numerator and denominator variables for period and age for collapse command below
			local vlist `vlist' num`age'_`period' den`age'_`period'
			* Similarly generate list of numerator and denominator variables for period only for reshape command below
			if (`period' == 0) {
				local vlist2 `vlist2' num`age'_  den`age'_
			}
		}
		* Shift the token list to the next age group 
		mac shift
	}
}


* Sum all numerators and denominators - weighted sum
collapse (sum) `vlist' [pw=v005/1000000]

* Add a variable to act as ID for the reshape
gen x = 0
* Reshape long by age group
reshape long `vlist2', i(x) j(period)
* Drop the underscore (_) on the end of variable names
rename *_ *

* Reshape now for periods
reshape long num den, i(period) j(a1)
* Drop the x variable as we no longer need it
drop x

* Generate the upper bounds of the age groups
gen a2 = a1[_n+1]
replace a2 = 60 if a1 == 48

* Calculate the age group mortality probabilities
gen death = num / den
* Calculate the age group survival probabilities
gen surv = 1 - death

* Generate product of survival probabilities:
gen prodsurv = surv if a1 == 0
replace prodsurv = surv * prodsurv[_n-1] if a1 > 0
* Generate product of survival probabilities for child mortality rate, starting at 12 months
gen prodsurv2 = surv if a1 == 12
replace prodsurv2 = surv * prodsurv2[_n-1] if a1 > 12

* Neonatal mortality rate
gen nmr = 1000*(1-prodsurv) if a2 == 1
* Postneonatal mortality rate (calculated later)
gen pnmr = .
* Infant mortality rate
gen imr = 1000*(1-prodsurv) if a2 == 12
* Child mortality rate
gen cmr = 1000*(1-prodsurv2) if a2 == 60
* Under-five mortality rate
gen u5mr = 1000*(1-prodsurv) if a2 == 60

* Capture just the rates
collapse (min) nmr pnmr imr cmr u5mr, by(period)

* Postneonatal mortality rate = IMR - NMR
replace pnmr = imr - nmr

* Now see the results
list
And the results basically match the syncmrates program
     +---------------------------------------------------------------+
     | period        nmr       pnmr        imr        cmr       u5mr |
     |---------------------------------------------------------------|
  1. |      0   29.46365    11.2654   40.72905   9.390652   49.73727 |
  2. |      1   31.49295   12.24667   43.73962   11.31612   54.56078 |
  3. |      2   33.03296   13.47327   46.50623   12.88736   58.79426 |
  4. |      3   36.41945   15.01405    51.4335   16.21401   66.81353 |
  5. |      4   40.38089   18.37582   58.75671   19.31465   76.93649 |
     +---------------------------------------------------------------+
Re: UNDER FIVE MORTALITY [message #15070 is a reply to message #15068] Wed, 30 May 2018 01:53 Go to previous messageGo to next message
rajesh.dahima91@gmail.com is currently offline  rajesh.dahima91@gmail.com
Messages: 9
Registered: March 2018
Member
Dear Trevor,
Thank you so much! for the detailed response to calculate Under five mortality. Will try this.

Also, would request a reply on
query : can we bring down the mortality estimates to District levels using district variable, as the report nor the STAT compiler/Mobile app shows district mortality rates.


Thank you once again,
Rajesh
India
Re: UNDER FIVE MORTALITY [message #15137 is a reply to message #15070] Thu, 07 June 2018 10:49 Go to previous messageGo to next message
fredarnold is currently offline  fredarnold
Messages: 45
Registered: March 2014
Member
Because the sample sizes at the district level are not adequate produce robust estimates of childhood mortality rates, those rates are not published. The confidence intervals at the district level are just too wide. That's why the state level fact sheets for NFHS-4 include the childhood mortality estimates, but the district level fact sheets exclude them.
Re: UNDER FIVE MORTALITY [message #15138 is a reply to message #15137] Thu, 07 June 2018 10:53 Go to previous messageGo to next message
rajesh.dahima91@gmail.com is currently offline  rajesh.dahima91@gmail.com
Messages: 9
Registered: March 2018
Member
Thank you so much for the information.

RAJESH
INDIA
Re: UNDER FIVE MORTALITY [message #15247 is a reply to message #15068] Tue, 19 June 2018 11:33 Go to previous messageGo to next message
krishn28_ssh is currently offline  krishn28_ssh
Messages: 5
Registered: June 2018
Location: India
Member
Dear Trevor,

Thank you for details stata code, but i don't to remove other variable, because i want to analysis all U5-mortality indicator with caste of the household head and religions.

pls guide me how should i go ahead?

krishna


krishna
Re: UNDER FIVE MORTALITY [message #15251 is a reply to message #15247] Tue, 19 June 2018 12:53 Go to previous messageGo to next message
Trevor-DHS is currently offline  Trevor-DHS
Messages: 787
Registered: January 2013
Senior Member
The code I provided is a very simplistic program. The easiest way to produce results for separate subcategories is to run it separately for each individual category, selecting just the cases in the category. You could do this right after the "use" statement. Additionally, if you did not want results for 5 separate time periods, you could just run the most recent time period by changing forvalues period = 0/4 to forvalues period = 0.

The code below could also be rewritten to incorporate tabulating by background characteristics, but I don't have time to do that now, and this code was meant just to demonstrate the calculations and not really for production use.



Re: UNDER FIVE MORTALITY [message #17478 is a reply to message #15251] Thu, 28 March 2019 07:56 Go to previous messageGo to next message
Manojpaul783@gmail.com is currently offline  Manojpaul783@gmail.com
Messages: 2
Registered: February 2019
Member
dear sir,
i am calculate infant mortality using these syntaxes but i want to p value and CI value for each region. How to get it??
Re: UNDER FIVE MORTALITY [message #18369 is a reply to message #15251] Wed, 20 November 2019 00:23 Go to previous messageGo to next message
dale123 is currently offline  dale123
Messages: 2
Registered: November 2019
Member
Dear Trevor,

I am having trouble incorporating the standard error calculations in the code you kindly provided above. Any help would be greatly appreciated!!

Regards,

Dale
Re: UNDER FIVE MORTALITY [message #22818 is a reply to message #15068] Sun, 16 May 2021 06:06 Go to previous messageGo to next message
Hassen
Messages: 121
Registered: April 2018
Location: Ethiopia,Africa
Senior Member
Thank you very much! This is very helpful for us!

Hassen Ali(Chief Public Health Professional Specialist)
Re: UNDER FIVE MORTALITY [message #22820 is a reply to message #15068] Sun, 16 May 2021 07:09 Go to previous messageGo to next message
Hassen
Messages: 121
Registered: April 2018
Location: Ethiopia,Africa
Senior Member
Trevor-DHS wrote on Wed, 30 May 2018 02:20
Here is a fairly simplistic piece of code that follows the approach given in the Guide to DHS Statistics, and produces estimates for five five-year periods.
It doesn't produce standard errors or confidence intervals, but allows you to see how the calculations are done:
* Example of early childhood mortality rates calculations
* Trevor Croft, March 9, 2018

* Change directory to the data directory
cd "C:\Users\xxxx\Data"
* Open DHS dataset - births recode file
use v005 v008 b3 b5 b7 using "IABR71FL.DTA", clear

* Create variables for time period limits - need to use variables as these change from case to case
gen t1 = .
gen t2 = .
* Initialize local variable lists used later
local vlist
local vlist2

* Loop through 5-year time periods
forvalues period = 0/4 {

	* Calculate upper limit of time period
	replace t2 = v008 - 60*`period'
	* Calculate lower limit of time period
	replace t1 = t2 - 60
	* List age group lower limits
	local agegroups 0 1 3 6 12 24 36 48 60
	* Turn thse into tokens to use for the upper limits of the age groups
	tokenize `agegroups'
	* Loop through the age groups
	foreach age of numlist `agegroups' {
		* Ignore the 60+ age group - this was just to set the upper limit for the last age group - see a2
		if (`age' < 60) {
			* Create local for lower limit of age group - use locals as these are constants
			local a1 = `age'
			* Create local for upper limit of age group = the lower limit of the next age group
			local a2 = `2'
			
			* Cohort A numerator
			gen numA`age'_`period' = ((`a1' <= b7 & b7 < `a2') & (t1 - `a2' <= b3 & b3 < t1 - `a1'))
			* Cohort B numerator
			gen numB`age'_`period' = ((`a1' <= b7 & b7 < `a2') & (t1 - `a1' <= b3 & b3 < t2 - `a2'))
			* Cohort C numerator
			gen numC`age'_`period' = ((`a1' <= b7 & b7 < `a2') & (t2 - `a2' <= b3 & b3 < t2 - `a1'))
			* Cohort A denominator
			gen denA`age'_`period' = ( (b5 == 1 | `a1' <= b7)  & (t1 - `a2' <= b3 & b3 < t1 - `a1'))
			* Cohort B denominator
			gen denB`age'_`period' = ( (b5 == 1 | `a1' <= b7)  & (t1 - `a1' <= b3 & b3 < t2 - `a2'))
			* Cohort C denominator
			gen denC`age'_`period' = ( (b5 == 1 | `a1' <= b7)  & (t2 - `a2' <= b3 & b3 < t2 - `a1'))
			
			* Count half for deaths for cohort C, except for the last period where all deaths are counted
			local f = 0.5
			if (`period' == 0) {
				local f = 1
			}
			* Sum numerators from cohorts A, B and C for this case
			gen num`age'_`period' = 0.5*numA`age'_`period' + numB`age'_`period' + numC`age'_`period'*`f'
			* Sum denominators from chorts A, B and C for this case
			gen den`age'_`period' = 0.5*denA`age'_`period' + denB`age'_`period' + denC`age'_`period'*0.5
			
			* Generate list of numerator and denominator variables for period and age for collapse command below
			local vlist `vlist' num`age'_`period' den`age'_`period'
			* Similarly generate list of numerator and denominator variables for period only for reshape command below
			if (`period' == 0) {
				local vlist2 `vlist2' num`age'_  den`age'_
			}
		}
		* Shift the token list to the next age group 
		mac shift
	}
}


* Sum all numerators and denominators - weighted sum
collapse (sum) `vlist' [pw=v005/1000000]

* Add a variable to act as ID for the reshape
gen x = 0
* Reshape long by age group
reshape long `vlist2', i(x) j(period)
* Drop the underscore (_) on the end of variable names
rename *_ *

* Reshape now for periods
reshape long num den, i(period) j(a1)
* Drop the x variable as we no longer need it
drop x

* Generate the upper bounds of the age groups
gen a2 = a1[_n+1]
replace a2 = 60 if a1 == 48

* Calculate the age group mortality probabilities
gen death = num / den
* Calculate the age group survival probabilities
gen surv = 1 - death

* Generate product of survival probabilities:
gen prodsurv = surv if a1 == 0
replace prodsurv = surv * prodsurv[_n-1] if a1 > 0
* Generate product of survival probabilities for child mortality rate, starting at 12 months
gen prodsurv2 = surv if a1 == 12
replace prodsurv2 = surv * prodsurv2[_n-1] if a1 > 12

* Neonatal mortality rate
gen nmr = 1000*(1-prodsurv) if a2 == 1
* Postneonatal mortality rate (calculated later)
gen pnmr = .
* Infant mortality rate
gen imr = 1000*(1-prodsurv) if a2 == 12
* Child mortality rate
gen cmr = 1000*(1-prodsurv2) if a2 == 60
* Under-five mortality rate
gen u5mr = 1000*(1-prodsurv) if a2 == 60

* Capture just the rates
collapse (min) nmr pnmr imr cmr u5mr, by(period)

* Postneonatal mortality rate = IMR - NMR
replace pnmr = imr - nmr

* Now see the results
list
And the results basically match the syncmrates program
     +---------------------------------------------------------------+
     | period        nmr       pnmr        imr        cmr       u5mr |
     |---------------------------------------------------------------|
  1. |      0   29.46365    11.2654   40.72905   9.390652   49.73727 |
  2. |      1   31.49295   12.24667   43.73962   11.31612   54.56078 |
  3. |      2   33.03296   13.47327   46.50623   12.88736   58.79426 |
  4. |      3   36.41945   15.01405    51.4335   16.21401   66.81353 |
  5. |      4   40.38089   18.37582   58.75671   19.31465   76.93649 |
     +---------------------------------------------------------------+


Hassen Ali(Chief Public Health Professional Specialist)
Re: UNDER FIVE MORTALITY [message #28313 is a reply to message #15068] Tue, 12 December 2023 12:31 Go to previous message
Abid_F is currently offline  Abid_F
Messages: 5
Registered: October 2023
Member
Even with this code, I am not getting CMR and U5MR for NFHS-1 & NFHS-2. The same problem with syncmrates command. NFHS-3 onwards, I find no problem. Please help.
Previous Topic: State wise childhood mortality rates by wealth quintile
Next Topic: Child Mortality Calculations
Goto Forum:
  


Current Time: Thu Mar 28 09:25:14 Coordinated Universal Time 2024