How to Use the LOGEST Function in Microsoft Excel for Exponential Curve Fitting and Regression

While standard linear regression models—such as those calculated using Excel’s SLOPE, INTERCEPT, or LINEST functions—work well for steady, arithmetic relationships, real-world biological populations, virus transmission rates, semiconductor scaling (Moore’s Law), viral social media growth, and financial compound interest follow non-linear trajectories. In these scenarios, values do not grow by a constant addition; they grow by a constant percentage rate over time, forming an exponential growth curve.

To fit an exponential curve to historical data without manually transforming values into logarithmic space, Microsoft Excel provides the powerful LOGEST array function. LOGEST uses the least-squares method to calculate an exponential curve of the form \(y = b \cdot m^x\) that best fits your observed data points, returning regression coefficients, standard errors, coefficients of determination (\(R^2\)), and F-statistics. This comprehensive guide covers LOGEST syntax, dynamic array output interpretation, and step-by-step practical implementation.


The Mathematical Model Behind LOGEST

The LOGEST function models exponential relationships following the equation:

$$y = b \cdot m_1^{x_1} \cdot m_2^{x_2} \dots m_k^{x_k}$$

For simple single-variable exponential regression, the formula simplifies to:

$$y = b \cdot m^x$$

Where:

  • \(y\): The dependent variable you are predicting (e.g., monthly active users or revenue).
  • \(x\): The independent variable (e.g., time period, month, or advertising expenditure).
  • \(b\): The base intercept value when \(x = 0\).
  • \(m\): The growth factor (base of the exponent). If \(m > 1\), the curve models exponential growth; if \(0 < m < 1\), it models exponential decay. The periodic percentage growth rate is calculated as \((m – 1) \times 100\%\).

Mathematically, LOGEST operates by taking the natural logarithm of both sides—transforming the exponential curve into the linear form \(\ln(y) = \ln(b) + x \cdot \ln(m)\)—running standard least-squares regression, and then exponentiating the parameters back to original units.


Syntax and Argument Specifications

=LOGEST(known_y's, [known_x's], [const], [stats])

Argument Definitions

  • known_y's: Required. The set of dependent \(y\)-values you have already observed (e.g., B2:B10). All \(y\)-values must be strictly positive numbers (\(y > 0\)). If any \(y\)-value is zero or negative, LOGEST returns a #NUM! error.
  • [known_x's]: Optional. The set of independent \(x\)-values (e.g., A2:A10). If omitted, Excel assumes the default sequence \(\{1, 2, 3, \dots, n\}\).
  • [const]: Optional. A logical flag specifying how base \(b\) is evaluated:
    • TRUE (or omitted): Base \(b\) is calculated normally according to the regression fit.
    • FALSE: Forces \(b = 1\), fitting a curve strictly of the form \(y = m^x\).
  • [stats]: Optional. A logical flag dictating whether to return additional regression statistics:
    • FALSE (or omitted): Returns only the regression parameters \(m\) and \(b\).
    • TRUE: Returns a 5-row statistical array containing \(R^2\), standard errors, F-statistics, degrees of freedom, and regression sum of squares.

Understanding the 5-Row Statistical Output Grid

When you set stats = TRUE, LOGEST outputs a multi-column, 5-row statistical array. In modern Microsoft 365 and Excel 2021+, the formula dynamically spills into adjacent cells:

Row Column 1 Column 2 Statistical Metric Description
Row 1 \(m\) (Slope / Growth factor) \(b\) (Y-Intercept) Primary exponential curve parameters.
Row 2 \(se_m\) (Std Error of \(m\)) \(se_b\) (Std Error of \(b\)) Standard errors of the logarithmic regression parameters.
Row 3 \(R^2\) (Coeff of Determination) \(se_y\) (Std Error of \(y\) estimate) Goodness of fit (0 to 1) and residual standard error.
Row 4 \(F\) (F-Statistic) \(df\) (Degrees of freedom) Hypothesis test of overall model significance.
Row 5 \(ss_{reg}\) (Regression Sum of Squares) \(ss_{resid}\) (Residual Sum of Squares) Explained vs unexplained variation in \(\ln(y)\).

Step-by-Step Worked Practical Example

Consider a tech startup tracking monthly active users (MAUs in thousands) over its first six months:

Cell Month (\(x\)) Users in 000s (\(y\))
A2:B2 1 12.5
A3:B3 2 16.2
A4:B4 3 21.8
A5:B5 4 29.3
A6:B6 5 39.5
A7:B7 6 53.1

Step 1: Calculating the Exponential Model Parameters

To extract only the growth multiplier (\(m\)) and the intercept (\(b\)), enter into cell D2:

=LOGEST(B2:B7, A2:A7, TRUE, FALSE)

Excel returns a two-cell spilled array:

  • Cell D2 (Slope \(m\)): 1.348
  • Cell E2 (Intercept \(b\)): 9.274

Interpreting the Growth Rate:

The growth factor \(m = 1.348\) indicates that user growth expands by 34.8% month-over-month (\((1.348 – 1) \times 100\%\)). The baseline starting estimate at Month 0 is approximately 9,274 users.

Step 2: Forecasting Future Values

Using the fitted exponential model equation \(y = b \cdot m^x\), predict user counts for Month 9:

=E2 * (D2 ^ 9)

$$y = 9.274 \cdot (1.348)^9 \approx \mathbf{132.8}\text{ (132,800 users)}$$

Step 3: Evaluating Statistical Goodness of Fit

To view the full statistical summary, enter into cell D5:

=LOGEST(B2:B7, A2:A7, TRUE, TRUE)

Inspect cell D7 (the \(R^2\) position):

Excel returns \(R^2 \approx \mathbf{0.999}\). This confirms that an exponential curve explains over 99.9% of the variance in the historical data, demonstrating an extraordinary fit compared to a standard straight line.


LOGEST vs LINEST vs GROWTH

Function Mathematical Model Primary Output Type Best Used For
LINEST Linear: \(y = m x + b\) Statistical array Additive, linear growth trends.
LOGEST Exponential: \(y = b \cdot m^x\) Statistical array Compounding percentage growth and decay.
GROWTH Exponential: \(y = b \cdot m^x\) Predicted \(y\)-values directly Quickly generating forecasted data points.

Troubleshooting Common Errors

Error Code Root Cause Recommended Fix
#NUM! Zero or negative value in known_y's Exponential regression takes the natural log \(\ln(y)\). Logarithms of zero or negative numbers are undefined. Filter out \(\le 0\) values.
#REF! Unequal dimensions between \(x\) and \(y\) ranges Ensure known_y's and known_x's have identical row and column lengths (e.g., 6 rows each).
#SPILL! Adjacent cells blocked by existing text Clear the cells beneath and to the right of the formula so the array can spill cleanly.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.