# How to transform standard deviations from standard deviations

so I am doing a meta-analysis & have access to height and weight data (with SDs) and am trying to transform this into BMI. This is rather straight forward for the means, but I am not sure how to do this regarding the sample standard deviations.

example:

mean ht (SD): 142 (13) mean wt (SD): 69 (7)

the equation is --- BMI= wt/(ht*ht)

Thanks so much!

• It's not clear to me how you're computing mean BMI from the information for height and weight. It's not the case that mean-BMI = mean-weight/(mean-height)$^2$. If you're not trying to calculate mean BMI that way or you're not trying to calculate mean BMI at all you should clarify the situation. – Glen_b Apr 26 '16 at 1:28
• @Glen_b , I included extensive discussion of the point you are bringing up in my answer. – Mark L. Stone Apr 26 '16 at 1:45

What you want to do is propagation of uncertainty (there are many examples and derivations in this Wiki article, should be useful) if you assume $$Cov\left[Height,Weight\right] = 0$$

\begin{align}f(H,W) =& \frac{Weight}{Height^2}\\Var\left (f(H,W) \right ) =& \sigma_{BMI}^{2} =\\=& \left(\frac{\partial f(H,W)}{\partial H}\right)^{2}\sigma_{H}^{2} + \left(\frac{\partial f(H,W)}{\partial W}\right)^{2}\sigma_{W}^{2}\\ &\left\{ \begin{matrix}\frac{\partial f(H,W)}{\partial H} =& -2\frac{W}{H^3} \\ \frac{\partial f(H,W)}{\partial W} =& \frac{1}{H^2} \end{matrix}\right.\\ \therefore \sigma_{BMI}^{2} =& 4\frac{W^{2}}{H^6}\sigma_{H}^{2} + \frac{1}{H^4}\sigma_{W}^{2}=\\=&\frac{W^{2}}{H^{4}}\left(\frac{4\sigma_{H}^{2}}{H^{2}}+\frac{\sigma_{W}^{2}}{W^{2}} \right) = BMI^{2}\left(\frac{4\sigma_{H}^{2}}{H^{2}}+\frac{\sigma_{W}^{2}}{W^{2}} \right) \\ \sigma_{BMI}=&BMI\sqrt{\frac{4\sigma_{H}^{2}}{H^{2}}+\frac{\sigma_{W}^{2}}{W^{2}}}\end{align}

If the assumption about the covariance doesn't hold true $$Cov\left [ H,W \right]\neq0$$ then a correlation terms appear.

• That you so much for explaining! With you & Mark working in tandem it really helped clarify the issues I new must be lurking under the surface :) – Renee Apr 26 '16 at 2:21

I composed the response below in parallel to @Firebug . Due to the reasons stated in my discussion, I believe it is the superior approach.

First of all, note that if you don't do it right, you will actually miscalculate the mean BMI. Calculating mean BMI by inserting mean values of wt and ht into its defining equation will result in a biased value. That is because the formula for BMI has two nonlinearities, namely

1) the ratio between numerator and denominator
2) the square in the denominator


Number (2) is easy to correct for, by calculating $E(ht*ht)$ as $E(ht)*E(ht) + Var(ht)$ rather than as $E(ht)*E(ht)$. However number (1) is not so easy to correct for.

Note: In order to do any calculations, we are going to have to explicitly or implicitly assume something, which will affect the result. I made the (what I believe to be unrealistic) assumption that ht and wt are Normally distributed and independent of each other. Any violation of this assumption could DRAMATICALLY affect the results. Not only could non-Normality affect the results, but dependence between wt and ht, which seems quite likely, could have a major effect on the results.

Stochastic (Monte Carlo) Simulation Approach: There is a straightforward way to get around the bias in calculating the mean of BMI due to number (1), which also takes care of number (2). It will also produce the SD of BMI. It is to calculate them by stochastic (Monte Carlo) simulation. Under the assumption mentioned above, generate n independent Normal samples of both ht and wt, and form the BMI for each sample. Then calculate the sample mean and SD of these BMI samples to get the mean BMI and SD of BMI.

To make the numbers correspond to the usually defined BMI, I converted ht from cm to meters, i.e., I divided by 100, which increases BMI by a factor of 10000.

I used n = 1e8 samples and obtained mean BMI = 35.12 and SD of BMI = 7.66.

Note that the biased mean BMI calculated as $mean(wt)/(mean(ht)*mean(ht))$ produces a value of 34.22, and using $mean(wt)/(mean(ht)*mean(ht) + Var(ht))$ produces a value of 33.93. Recall that the correct value, as calculated by simulation, is 35.12.

Going back to the Normality and independence between ht and wt assumption: To calculate mean BMI, as well as SD of BMI properly and with realistic (correct in real-world) values, you should actually use paired ht and wt data per individual. This will account for the actual distributions of ht and wt, to include very critically the dependence between them. With such data, calculate the BMI per individual, then calculate the sample mean and SD across these individual BMI values. This is really the same method as the stochastic simulation approach, but in this case, we let the "real world" generate the paired values of wt and ht, rather than generating sample values ourselves from an assumed bivariate distribution.

Note that it would be easy to modify the stochastic simulation approach to account for an assumed non-zero correlation between wt and ht, if wt and ht were still assumed to be Normally distributed. We generate paired wt and ht values per a Bivariate Normal with covariance matrix which accounts for non-zero correlation; and all other calculations remain the same.

The previously provided stochastic simulation results are for correlation (between wt and ht) equal to zero. I now show how the results change when correlation between wt and ht increases from zero, but still assuming Normality of wt and ht with the mean and SD values you provided (ht divided by 100 as previously discussed).

Correlation between wt and ht     mean of BMI     SD of BMI
0.0                       35.12           7.66
0.1                       35.05           7.31
0.5                       34.78           5.74
0.9                       34.52           3.62
0.99                      34.46           2.95

• Thanks, Mark! I've used some monte carlo simulations for multiple imputations, but not in this way. Did you perform this on R, & if so, would you mind sharing code? I'd really appreciate the help! – Renee Apr 26 '16 at 2:20
• @Renee , I used MATLAB.n=1e8;rho=0.1;Covc=chol([49 rho*7*.13;rho*7*.13 .13^2]);y=randn(n,2)*Covc+ones(n,1)*[69 1.42];values=y(:,1)./y(:,2).^2; disp(mean(values)), disp(std(values)) – Mark L. Stone Apr 26 '16 at 2:37
• In R @renee you need mvrnorm from the MASS package to replictae Mark's code. – mdewey Apr 26 '16 at 21:07