LOGEST: Exponential Regression & Curve Fitting in Excel

LOGEST FUNCTION IN EXCEL - FEATURE IMAGE
Learn how to use Excel’s LOGEST function for exponential regression. This tutorial covers growth factor extraction, CAGR, R², F-statistic, p-values, exponential decay, half-life, multi-variable models, and 8 practical examples.

LINEST fits a straight line. LOGEST fits an exponential curve. LINEST is the analytical backbone of linear regression. LOGEST is its counterpart for data that grows or decays by a constant percentage — compound revenue, viral adoption, bacterial growth, radioactive decay. Specifically, LOGEST returns the same rich statistics table as LINEST — growth factor, intercept, R², standard errors, F-statistic — but for the exponential model y = b × mₓ.

This guide covers the full LOGEST output, the relationship between LOGEST and GROWTH, and eight practical examples. You will learn how to extract the implied growth rate, compare exponential and linear fit, assess significance, fit multi-variable models, and transform data to verify fit visually. No statistical software is needed for any of these analyses.

Availability: LOGEST is available in all Excel versions, including Microsoft 365, Excel 2024, 2021, 2019, 2016, and earlier. It also works in Google Sheets. In Excel 2019 and earlier, LOGEST requires Ctrl+Shift+Enter when returning more than one cell. In Excel 365, it spills automatically. LOGEST requires strictly positive y-values — zeros and negatives return #NUM!.

What Does LOGEST Do?

Specifically, LOGEST fits an exponential curve of the form y = b × mₓ to your data. The parameter b is the starting value when x = 0 (the y-intercept on the exponential curve). The parameter m is the growth factor — the multiplier applied each period. Internally, LOGEST first takes the natural logarithm of the y-values and then runs linear regression on ln(y) vs x. The result is mathematically equivalent to a direct exponential fit. Consequently, LOGEST inherits all of LINEST’s statistical machinery.

The output table also has the same 5-row structure as LINEST. Row 1 contains the model coefficients — m in column 1, b in column 2 for simple regression. Additionally, row 3 contains R² and the standard error. Furthermore, rows 4 and 5 contain the F-statistic, degrees of freedom, and sums of squares. Consequently, consequently, all the tools used to assess LINEST — F-tests, t-tests, confidence intervals — apply equally to LOGEST.

How Does LOGEST Relate to GROWTH, LINEST, and TREND?

Four functions share the same regression family in Excel. Understanding how they relate prevents the most common mistake: choosing the wrong function type.

FunctionModel typeReturnsUse when
LINESTLinear: y = mx + bCoefficients + full statisticsYou need to analyse a linear model
TRENDLinear: y = mx + bPredicted y-values onlyYou only need linear predictions
LOGESTExponential: y = b×mₓCoefficients + full statisticsYou need to analyse an exponential model
GROWTHExponential: y = b×mₓPredicted y-values onlyYou only need exponential predictions
LOGEST and GROWTH use identical models: GROWTH always produces the same predictions as b×mₓ using the b and m returned by LOGEST. They fit the same exponential curve. Use LOGEST when you need the growth rate, R², or statistical significance. Use GROWTH when you only need the predicted values.

What Is the LOGEST Syntax?

=LOGEST(known_y, [known_x], [const], [stats])
ArgumentRequired?What it does
known_yRequiredThe dependent variable values. Must be strictly positive — zeros or negatives return #NUM! because LOGEST takes ln(y) internally.
known_xOptionalThe independent variable values. If omitted, Excel uses {1, 2, 3, ...}. Pass multiple columns for multi-variable exponential regression.
constOptionalTRUE (default) = fit b normally. FALSE = force b = 1, fitting only the growth factor m. Use TRUE for almost all applications.
statsOptionalTRUE = return the full 5-row statistics table. FALSE (default) = return only m and b. Always use TRUE for model assessment.

What Does the LOGEST Output Table Contain?

The LOGEST output has the same shape as LINEST. It contains five rows by (k+1) columns, where k is the number of predictor variables. The key difference is in what row 1 contains. In LINEST, row 1 holds slopes and an intercept. In LOGEST, row 1 holds growth factors and the base value b. The R² in row 3 reflects the fit of the exponential model, not a linear one.

Row
Column 1 (growth factor m)
Column 2 (base b)
Row 1
Growth factor m — multiplier per period
Base b — y value when x = 0
Row 2
SE of ln(m) — standard error of log growth factor
SE of ln(b) — standard error of log base
Row 3
R² — of the log-transformed linear fit
SE of ln(y) estimate
Row 4
F-statistic — overall model significance
df residual
Row 5
SS_regression (log scale)
SS_residual (log scale)
Standard errors in LOGEST are on the log scale: The SE values in row 2 of LOGEST are standard errors of ln(m) and ln(b), not of m and b directly. They cannot be subtracted from m directly to build a confidence interval for the growth factor. Instead, use them in t-tests on the log-scale coefficients, then back-transform if needed. The R² and F-statistic are also computed on the log-transformed data.

Examples 1–4: Core LOGEST Operations

1
Basic exponential fit — growth factor, base, and R²

The starting point is fitting the exponential model to historical data. LOGEST returns m and b from y = b × mₓ. R² then assesses how well the curve fits. Specifically, a growth factor above 1 means the series is growing. A factor below 1, however, means it is declining. Converting m to a percentage rate — (m − 1) × 100 — gives the implied compound growth rate per period.

Period (A)
Revenue (B)
Growth factor m
Base b
1 – 8
Historical
1.167
87.4
0.991
A2:A9 = period numbers {1, 2, 3, ... 8}. B2:B9 = revenue (positive values only). Enter LOGEST with stats = TRUE. Excel 365: enter in a free cell, spills 5 rows × 2 columns. Excel 2019: select a 5×2 range, type, then Ctrl+Shift+Enter. =LOGEST(B2:B9, A2:A9, TRUE, TRUE) → Row 1: {1.167, 87.4} — m = 1.167, b = 87.4 Row 3 col 1: 0.991 — R² = 99.1% (excellent exponential fit) Extract individual statistics using INDEX: Growth factor m (row 1, col 1): =INDEX(=LOGEST(B2:B9,A2:A9,TRUE,TRUE), 1, 1) → 1.167 (each period the revenue multiplies by 1.167) Implied growth rate as a percentage — (m − 1): =INDEX(=LOGEST(B2:B9,A2:A9,TRUE,TRUE), 1, 1) - 1 → 0.167 (16.7% compound growth per period) Format as a readable percentage label: =TEXT(INDEX(=LOGEST(B2:B9,A2:A9,TRUE,TRUE),1,1)-1, "0.0%") → "16.7%" — self-updating CAGR label
2
Predictions — use LOGEST coefficients to forecast future values

Predictions from LOGEST apply the exponential formula y = b × mₓ with the fitted coefficients. The result matches GROWTH exactly. Both use the same underlying model. Store m and b in named cells. This avoids recalculating LOGEST for every prediction and keeps formulas readable.

Store LOGEST results once to avoid repeated recalculation. D2 = m = INDEX(LOGEST(B2:B9,A2:A9,TRUE,TRUE),1,1) D3 = b = INDEX(LOGEST(B2:B9,A2:A9,TRUE,TRUE),1,2) Predict y for period 9 (E2 = 9): y = b × mₓ $D$3 * $D$2^E2 → 87.4 × 1.167⁹ = 347 (predicted revenue for period 9) Confirm: GROWTH returns the same prediction: GROWTH and LOGEST use the same model — predictions always match. =GROWTH($B$2:$B$9, $A$2:$A$9, E2) → 347 (identical to the b×mₓ calculation) Multi-period forecast — Excel 365, spills from F2: E2:E6 = future periods {9, 10, 11, 12, 13}. =GROWTH($B$2:$B$9, $A$2:$A$9, E2:E6) → Spills 5 future predictions automatically Doubling time — how many periods until the value doubles? ln(2) / ln(m) gives the number of periods to double at growth rate m. =LN(2) / LN($D$2) → 4.55 periods (at 16.7% growth, value doubles every 4.55 periods)
3
Model comparison — exponential vs linear R²

Choosing between an exponential and linear model should be based on data, not assumption. Comparing R² from LOGEST against R² from LINEST on the same data tells you which model better describes the relationship. A higher R² indicates better fit. Additionally, plotting residuals from each model reveals patterns that a single R² may hide.

B2:B9 = revenue (outcome). A2:A9 = period (predictor). R² of the exponential model (LOGEST, row 3 col 1): This R² is based on the log-transformed fit. =INDEX(=LOGEST(B2:B9,A2:A9,TRUE,TRUE), 3, 1) → 0.991 (99.1% of log-revenue variation explained) R² of the linear model (LINEST, row 3 col 1): This R² is based on the untransformed linear fit. =INDEX(=LINEST(B2:B9,A2:A9,TRUE,TRUE), 3, 1) → 0.934 (93.4% — lower than LOGEST on this data) Automatic model selector — compare and label the winner: D2 = LOGEST R², D3 = LINEST R². =IF(D2>D3, "Exponential fits better (R² = "&TEXT(D2,"0.000")&")", "Linear fits better (R² = "&TEXT(D3,"0.000")&")") → "Exponential fits better (R² = 0.991)" Quick log-linearity check — if ln(y) vs x is straight, exponential fits well: LN transforms B2:B9 to check whether the relationship is linear in log space. =INDEX(=LINEST(LN(B2:B9),A2:A9,TRUE,TRUE),3,1) → Same as LOGEST R² — confirms LOGEST fits ln(y) linearly
4
Statistical significance — F-statistic and model p-value

Similarly to LINEST, the F-statistic from LOGEST row 4 tests whether the exponential model explains significantly more variation than no model. A p-value below 0.05 confirms that the exponential relationship is statistically significant. The FDIST function converts F and degrees of freedom directly to a p-value.

Store LOGEST output in a named range "LG" for clean formulas. Name Manager: name = LG, Refers to: =LOGEST(Sheet1!B2:B9,Sheet1!A2:A9,TRUE,TRUE) F-statistic (row 4, col 1): A large F means the exponential trend explains far more than random chance. =INDEX(LG, 4, 1) → 724 (very large F — highly significant exponential fit) Degrees of freedom residual (row 4, col 2): =INDEX(LG, 4, 2) → 6 (df = n − k − 1 = 8 − 1 − 1 = 6) P-value — is the exponential model statistically significant? FDIST(F, df_regression, df_residual). df_regression = 1 for simple regression with one predictor. =FDIST(INDEX(LG,4,1), 1, INDEX(LG,4,2)) → 0.0000000012 (p ≪ 0.05: exponential relationship is highly significant) Significance label for a dashboard: Returns "Significant" or "Not significant" based on the p-value. =IF(FDIST(INDEX(LG,4,1),1,INDEX(LG,4,2))<0.05, "Significant (p < 0.05)", "Not significant") → "Significant (p < 0.05)"

Examples 5–8: Applied Exponential Regression

Decay, Multi-Variable Models, and Residual Diagnostics

5
Exponential decay — modelling declining quantities over time

LOGEST also handles exponential decay as naturally as growth. When m is between 0 and 1, the model describes a quantity that shrinks by a fixed percentage each period. For example, radioactive decay, product depreciation, and customer churn all follow this pattern. The half-life is a key metric derived directly from the LOGEST growth factor. It tells you how many periods until the value halves.

B2:B12 = concentration measurements at each time point (all positive). A2:A12 = time points {0, 1, 2, ... 10}. Fit the exponential decay model — m will be between 0 and 1: =LOGEST(B2:B12, A2:A12, TRUE, TRUE) → Row 1: {0.834, 500} m = 0.834 — each period the concentration is 83.4% of the previous period b = 500 — starting concentration at time = 0 Decay rate per period — percentage lost each period: 1 − m: 1 - INDEX(=LOGEST(B2:B12,A2:A12,TRUE,TRUE),1,1) → 0.166 (16.6% lost per period) Half-life — how many periods until the value halves? ln(0.5) / ln(m). For decay m < 1, so ln(m) < 0 and the result is positive. =LN(0.5) / LN(INDEX(=LOGEST(B2:B12,A2:A12,TRUE,TRUE),1,1)) → 3.82 periods (the quantity halves every 3.82 periods) Predict concentration at future time point (e.g. t = 15): y = b × mₓ = 500 × 0.834¹⁵ INDEX(...,1,2) * INDEX(...,1,1)^15 → Predicted remaining concentration at t = 15
6
Multi-variable exponential regression — two predictors

Similarly to LINEST, LOGEST supports multiple predictors by passing a multi-column known_x range. The model becomes y = b × m1ₓ¹ × m2ₓ², where each predictor has its own growth factor. The column order in the output reverses relative to the predictor columns — exactly as in LINEST. This is particularly useful when growth depends on several measurable factors simultaneously, such as time and marketing spend.

A2:A20 = time periods. B2:B20 = marketing spend. C2:C20 = revenue (outcome). Model: revenue = b × m_mktgₓ² × m_timeₓ¹ Pass both predictors as two-column range A2:B20. Excel 365 — spills 5 rows × 3 columns: =LOGEST(C2:C20, A2:B20, TRUE, TRUE) Column order: [m_mktg (last predictor), m_time (first predictor), b] Row 1 col 1 = m for marketing spend (second column of A2:B20) Row 1 col 2 = m for time (first column of A2:B20) Row 1 col 3 = b (intercept — always rightmost) Extract growth factor for marketing spend: =INDEX(=LOGEST(C2:C20,A2:B20,TRUE,TRUE), 1, 1) → 1.042 (4.2% revenue growth per unit of additional marketing spend) Predict revenue for time = 10, marketing = 50: y = b × m_mktg⁵⁰ × m_time¹⁰ INDEX(...,1,3) * INDEX(...,1,1)^50 * INDEX(...,1,2)^10 → Predicted revenue given time = 10, marketing = 50
7
Log-transformation diagnostic — verifying exponential fit visually

The best diagnostic is to plot ln(y) against x. If the relationship is truly exponential, the log data should scatter around a straight line. A curved pattern in the ln(y) vs x plot, however, means the exponential model is misspecified. Additionally, comparing the residuals of the exponential model against those of the linear model helps confirm which is more appropriate.

A2:A9 = periods. B2:B9 = revenue. Column C = ln(y) transformation — enter in C2, copy down to C9: If the exponential model fits, C2:C9 should form a straight line with x. =LN(B2) → Natural log of each revenue value Verify: LINEST on ln(y) returns the same slope as ln(m) from LOGEST. This confirms both approaches use the same transformation. D2 = LINEST slope of ln(y) vs x. E2 = ln of LOGEST growth factor. =INDEX(=LINEST(LN(B2:B9),A2:A9,TRUE,TRUE),1,1) → Same as LN(INDEX(LOGEST(B2:B9,A2:A9,TRUE,TRUE),1,1)) Exponential residuals — actual / fitted (ratio form for multiplicative model): F2 = B2 / (b × mₓ). Values near 1 indicate good fit. D3 = b (intercept from LOGEST). D2 = m (growth factor from LOGEST). B2 / ($D$3 * $D$2^A2) → Ratio close to 1 = good fit. Far from 1 = poor fit or outlier. Log residuals — additive form: ln(actual) − ln(fitted): Equivalent to the residuals LOGEST uses internally. =LN(B2) - LN($D$3 * $D$2^A2) → Should be small and randomly scattered around zero for a good fit
8
Full LOGEST dashboard — all statistics in a self-updating report

A complete exponential report extracts every statistic using a named range and INDEX. This approach is identical in structure to the LINEST dashboard from the LINEST article. Specifically, all statistics update automatically when the source data changes. Additionally, it includes the implied growth rate, doubling time, and a significance label — ready for management reporting without manual calculation.

Store LOGEST once in Name Manager: name = LG, Refers to: =LOGEST(Sheet1!B2:B9, Sheet1!A2:A9, TRUE, TRUE) Then extract every statistic with INDEX(LG, row, col): Row 1 — model coefficients: Growth factor m: =INDEX(LG, 1, 1) Base b: =INDEX(LG, 1, 2) Derived metrics: Growth rate %: =TEXT(INDEX(LG,1,1)-1, "0.0%") Doubling time: =LN(2) / LN(INDEX(LG,1,1)) Row 3 — model quality: R²: =INDEX(LG, 3, 1) SE of ln(y): =INDEX(LG, 3, 2) Row 4 — significance: F-statistic: =INDEX(LG, 4, 1) df residual: =INDEX(LG, 4, 2) p-value: =FDIST(INDEX(LG,4,1), 1, INDEX(LG,4,2)) Significance: =IF(FDIST(INDEX(LG,4,1),1,INDEX(LG,4,2))<0.05,"Significant","Not significant") Row 5 — variance (log scale): SS_regression: =INDEX(LG, 5, 1) SS_residual: =INDEX(LG, 5, 2)
The Name Manager approach means LOGEST is computed once and cached. All INDEX formulas reference the named range without triggering a new LOGEST calculation. This keeps the workbook fast even on large datasets with many derived statistics.

Common Issues and How to Fix Them

#NUM! error from LOGEST

LOGEST returns #NUM! whenever any known_y value is zero or negative. The function takes ln(y) internally, and the natural log of zero or a negative number is undefined. First, check for zeros caused by missing entries and replace them with estimates or remove those rows. If negative values are genuine, LOGEST is not the right tool. Instead, shift the data or use LINEST. Instead, shift the data by a constant to make all values positive, or use LINEST on the untransformed data.

R² from LOGEST is high but predictions are inaccurate

LOGEST’s R² measures fit on the log-transformed data, not on the original scale. Consequently, a high log-space R² can still produce poor predictions in original units. Large values amplify small log-scale errors significantly. Always cross-check predictions by computing original-scale residuals (actual − fitted) alongside the log-scale R².

The growth factor m seems implausibly large or small

A factor very close to 1 (e.g. 1.002) means under 0.2% growth per period. In that case, a linear model may fit equally well. A factor far above 1 (for example, 3.5) implies tripling each period, which quickly becomes implausible for extended forecasts. In both cases, check whether the x-axis scale is appropriate. If x is in years but growth is monthly, the growth factor will be far from 1 and predictions misleading.

LOGEST standard errors are on the log scale — do not use them directly: The SE values in row 2 are standard errors of ln(m) and ln(b). You cannot subtract them directly from the growth factor m to build a confidence interval. To build a confidence interval for m, compute TINV(0.05, df) × SE_ln(m), then exponentiate to get the multiplicative uncertainty. For most reporting purposes, stating R² and the p-value is sufficient without constructing coefficient intervals.

Frequently Asked Questions

  • What is the difference between LOGEST and GROWTH?+
    LOGEST and GROWTH fit the same exponential model (y = b × mₓ) to the same data and always produce identical predictions. The difference is in what they return. GROWTH returns predicted y-values for given x-values — it is a prediction tool. LOGEST returns the model coefficients (m and b) and, when stats = TRUE, a full table of regression statistics including R², standard errors, F-statistic, and sums of squares. Use GROWTH when you only need predictions. Use LOGEST when you need to understand, validate, or report on the model itself.
  • What is the relationship between LOGEST and LINEST?+
    LOGEST is equivalent to applying LINEST to the log-transformed data: LOGEST(y, x) produces the same R², F-statistic, and slope (as ln(m)) as LINEST(LN(y), x). The key difference is that LOGEST returns the actual growth factor m and base b — back-transformed from the log scale — rather than the log-scale slope. LINEST and TREND are the linear equivalents; LOGEST and GROWTH are the exponential equivalents. Choose based on whether your data follows a linear or percentage-rate growth pattern.
  • How do I find the compound growth rate from LOGEST?+
    The compound growth rate per period is the growth factor m minus 1. Extract m with =INDEX(LOGEST(B2:B9,A2:A9,TRUE,TRUE),1,1), then subtract 1 to get the rate as a decimal: m − 1. Format as a percentage to display it. For example, m = 1.167 gives a 16.7% compound growth rate per period. If your periods are months and you want an annual rate, raise the monthly growth factor to the power of 12: m¹² − 1. This converts the per-period rate to a per-year rate correctly through compounding.

More Questions About LOGEST

  • Can LOGEST handle negative or zero y-values?+
    No. LOGEST requires all known_y values to be strictly positive because it applies the natural logarithm internally. Zeros and negatives return #NUM!. If your data contains zeros, replace them with interpolated estimates or remove those rows. If the values are genuinely negative — for example, profit and loss figures — shift the entire dataset by a positive constant to make all values positive before running LOGEST, then remember to subtract the same constant from predictions. Alternatively, use LINEST on the untransformed data if a linear model is acceptable.
  • How do I use LOGEST in Excel 2019 and earlier?+
    In Excel 2019 and earlier, LOGEST is an array function. To return the full 5-row output, select a 5×2 range (or 5×(k+1) for multiple predictors), type the LOGEST formula, and confirm with Ctrl+Shift+Enter. Curly braces in the formula bar confirm array entry. If you only need one statistic — for example, the R² — wrap LOGEST in INDEX and enter in a single cell normally: =INDEX(LOGEST(B2:B9,A2:A9,TRUE,TRUE),3,1) does not require array entry.
  • What is the const argument in LOGEST?+
    The const argument controls whether the model fits the base b freely or forces it to 1. When const = TRUE (the default), LOGEST fits both b and m to best match the data. When const = FALSE, b is constrained to 1 and the model becomes y = mₓ. Use FALSE only when there is a theoretical reason for the curve to pass through the point (x=0, y=1) — for example, an index normalised to 1 at time zero. For almost all business, financial, and scientific applications, leave const as TRUE.