# Body fat formulas for your AccuMeasure body fat calipers

This is a set of formulas that you can use to convert the measurements of your AccuMeasure calipers to body fat percentage. Follow the instructions, then plug the number on the appropriate formula. You'll get quite the accurate measurement of your body fat, with none of the hassle of looking up numbers on a table.

The ** x** in the formulas represent what you measured with your AccuMeasure in

**millimeters**, when you follow the instructions correctly, and they are derived from the table that ships with the device. Plug the measurement (fractional values are okay) into the formulas. The output of the formula is a percentage number (as in 0—100, not 0—1). The maximum error (discrepancy) between these formulas and the values in the AccuMeasure table is less than 1%.

**Tips:**

- Use these formulas on your favorite spreadsheet to track your body fat daily. That way you don't have to do math or look stuff up. The example spreadsheet formula is next to the mathematical one in the tables below.
- Always measure yourself right after you wake up. Never change the time you measure relative to when you wake up — you'll get erratic measurements.
- Always measure in exactly the same way you did the previous day. Pinch the same abdominal area, clip the same fold. Day-to-day repeatability of the measurements is more important than absolute accuracy.

## Men's formulas

Age bracket | Mathematical x is mm, y is body fat % |
Excel / LibreOffice / spreadsheet A1 is cell containing mm, output is body fat % |
---|---|---|

18—20 | y = -0.016558 x² + 1.338304 x + -1.613505 |
`=-0.016558 * (A1 * A1) + 1.338304 * (A1) + -1.613505` |

21—25 | y = -0.017450 x² + 1.375824 x + -0.898402 |
`=-0.017450 * (A1 * A1) + 1.375824 * (A1) + -0.898402` |

26—30 | y = -0.017355 x² + 1.372444 x + 0.181479 |
`=-0.017355 * (A1 * A1) + 1.372444 * (A1) + 0.181479` |

31—35 | y = -0.017569 x² + 1.381746 x + 1.179773 |
`=-0.017569 * (A1 * A1) + 1.381746 * (A1) + 1.179773` |

36—40 | y = -0.017623 x² + 1.383619 x + 2.233607 |
`=-0.017623 * (A1 * A1) + 1.383619 * (A1) + 2.233607` |

41—45 | y = -0.017754 x² + 1.388621 x + 3.280957 |
`=-0.017754 * (A1 * A1) + 1.388621 * (A1) + 3.280957` |

46—50 | y = -0.017754 x² + 1.388621 x + 3.280957 |
`=-0.017687 * (A1 * A1) + 1.386841 * (A1) + 4.319327` |

51—55 | y = -0.017610 x² + 1.382021 x + 5.445419 |
`=-0.017610 * (A1 * A1) + 1.382021 * (A1) + 5.445419` |

56+ | y = -0.017394 x² + 1.374599 x + 6.552526 |
`=-0.017394 * (A1 * A1) + 1.374599 * (A1) + 6.552526` |

### Women's formulas

Unfortunately, I haven't generated the formulas for women yet.

Homework:** Check out the charts at the AccuMeasure web site, use the workbench code below to generate them, and send the changes to me**!

### LibreOffice macro formula for your spreadsheet

Function bodyfat(measuremm As String, age As String)

Dim measuremm_d as Double

Dim age_d as Double

measuremm_d = Val(measuremm)

age_d = Val(age)

If age_d >= 18 and age_d <= 20 Then

bodyfat = (-0.016558 * (measuremm_d * measuremm_d)) + (1.338304 * measuremm_d) + -1.613505

Elseif age_d >= 21 and age_d <= 25 Then

bodyfat = (-0.017450 * (measuremm_d * measuremm_d)) + (1.375824 * measuremm_d) + -0.898402

Elseif age_d >= 26 and age_d <= 30 Then

bodyfat = (-0.017355 * (measuremm_d * measuremm_d)) + (1.372444 * measuremm_d) + 0.181479

Elseif age_d >= 31 and age_d <= 35 Then

bodyfat = (-0.017569 * (measuremm_d * measuremm_d)) + (1.381746 * measuremm_d) + 1.179773

Elseif age_d >= 36 and age_d <= 40 Then

bodyfat = (-0.017623 * (measuremm_d * measuremm_d)) + (1.383619 * measuremm_d) + 2.233607

Elseif age_d >= 41 and age_d <= 45 Then

bodyfat = (-0.017754 * (measuremm_d * measuremm_d)) + (1.388621 * measuremm_d) + 3.280957

Elseif age_d >= 46 and age_d <= 50 Then

bodyfat = (-0.017687 * (measuremm_d * measuremm_d)) + (1.386841 * measuremm_d) + 4.319327

Elseif age_d >= 51 and age_d <= 55 Then

bodyfat = (-0.017610 * (measuremm_d * measuremm_d)) + (1.382021 * measuremm_d) + 5.445419

Elseif age_d >= 56 Then

bodyfat = (-0.017394 * (measuremm_d * measuremm_d)) + (1.374599 * measuremm_d) + 6.552526

End If

End Function

### Reinteract workbench code

These numbers were reverse-engineered with the assistance of Reinteract, an excellent mathematical analysis workbench for Python and Linux. Run this code on your Reinteract workbench to get those values.

import numpy as np

import replot as rp

def arr(seqstr):

return np.array([ float(x) for x in seqstr.split() ])

xs = "2.5 4.5 6.5 8.5 10.5 12.5 14.5 16.5 18.5 20.5 22.5 24.5 26.5 28.5 30.5 32.5 35"

xs = arr(xs)

ys = {}

ys['1820'] = '2 3.9 6.2 8.5 10.5 12.5 14.3 16.0 17.5 18.9 20.2 21.3 22.3 23.1 23.8 24.3 24.9'

ys['2125'] = '2.5 4.9 7.3 9.5 11.6 13.6 15.4 17.0 18.6 20 21.2 22.3 23.3 24.2 24.9 25.4 25.8'

ys['2630'] = '3.5 6 8.4 10.6 12.7 14.6 16.4 18.1 19.6 21 22.3 23.4 24.4 25.2 25.9 26.5 26.9'

ys['3135'] = '4.5 7.1 9.4 11.7 13.7 15.7 17.5 19.2 20.7 22.1 23.4 24.5 25.5 26.3 27 27.5 28'

ys['3640'] = '5.6 8.1 10.5 12.7 14.8 16.8 18.6 20.2 21.8 23.2 24.4 25.6 26.5 27.4 28.1 28.6 29'

ys['4145'] = '6.7 9.2 11.5 13.8 15.9 17.8 19.6 21.3 22.8 24.7 25.5 26.6 27.6 28.4 29.1 29.7 30.1'

ys['4650'] = '7.7 10.2 12.6 14.8 16.9 18.9 20.7 22.4 23.9 25.3 26.6 27.7 28.7 29.5 30.1 30.7 31.2'

ys['5155'] = '8.8 11.3 13.7 15.9 18.0 20.0 21.8 23.4 25.0 26.4 27.6 28.7 29.7 30.6 31.2 31.8 32.2'

ys['56+ '] = '9.9 12.4 14.7 17 19.1 21 22.8 24.5 26 27.4 28.7 29.8 30.8 31.6 32.3 32.9 33.3'

itms = sorted(ys.items(), key=lambda x: x[1])

for k, v in itms:

v = arr(v)

coeffs = np.polyfit(xs, v, 2)

print k, " ",

print "y = %f x² + %f x + %f" % tuple([float(x) for x in coeffs]), " ",

print "=%f * (A1 * A1) + %f * (A1) + %f" % tuple([float(x) for x in coeffs])

def gen_function():

print "Function bodyfat(measuremm As String, age As String)"

print " Dim measuremm_d as Double"

print " Dim age_d as Double"

print " measuremm_d = Val(measuremm)"

print " age_d = Val(age)"

itms = sorted(ys.items(), key=lambda x: x[1])

for n, (k, v) in enumerate(itms):

v = arr(v)

coeffs = np.polyfit(xs, v, 2)

iff = "Elseif" if n > 0 else "If"

try:

print " %s age_d >= %s and age_d <= %s Then" % tuple([iff] + k.split(""))

except TypeError:

print " Elseif age_d >= %s Then" % k.split("+")[0]

print " bodyfat = (%f * (measuremm_d * measuremm_d)) + (%f * measuremm_d) + %f" % tuple([float(x) for x in coeffs])

print " End If"

print "End Function"

gen_function()

itms = sorted(ys.items(), key=lambda x: x[1])

for k, v in itms:

v = arr(v)

coeffs = np.polyfit(xs, v, 2)

v_proof = np.polyval(coeffs, xs)

rp.plot(xs, v, xs, v_proof)