Built and run by one person.

Beta and R-Squared

A fund’s market sensitivity, and how much the market explains it.

Source data: AMFI daily NAV (38,000+ schemes, 37M+ rows since April 2006) + Nifty benchmark indices · Last updated: 2026-07-02
Live tool

Analyze any Indian mutual fund or portfolio across 30+ return, risk and benchmark metrics in the live MFPRO tool.

What is Beta?

Beta measures how sensitive a fund is to market movements (Nifty 50). A beta of 1.0 means the fund moves in lockstep with the market. Beta > 1 means the fund amplifies market moves (goes up more in bull markets, down more in bear markets). Beta < 1 means it dampens them.

How We Compute It

Daily return = (today's NAV / yesterday's NAV − 1) × 100

Run OLS regression: fund_daily_return = α + β × benchmark_daily_return

Beta = slope of this regression line (REGR_SLOPE in DuckDB)

We use daily returns (day-over-day NAV change), not rolling or monthly returns. Daily returns are independent observations with no overlap, which gives correct statistical properties (valid p-values, no autocorrelation bias).

R² (R-Squared)

R² tells you what fraction of the fund's daily variance is explained by the market. R² = 0.85 means 85% of the fund's movement is explained by Nifty 50, and 15% comes from stock selection or other factors.

R² = (correlation between fund and benchmark daily returns)²

In the table: black text for R² ≥ 0.70 (strong fit), amber for R² 0.40-0.70 (moderate), red for R² < 0.40 (weak - beta is unreliable).

SQL (simplified)

-- Daily returns for fund and benchmark
WITH fund_daily AS (
  SELECT scheme_code, date,
    (nav / LAG(nav) OVER (ORDER BY date) - 1) * 100 AS ret
  FROM nav_master WHERE nav > 0
),
bench_daily AS (
  SELECT date,
    (nav / LAG(nav) OVER (ORDER BY date) - 1) * 100 AS ret
  FROM index_nav WHERE index_name = 'INDEX_NIFTY50'
)
SELECT
  REGR_SLOPE(f.ret, b.ret)  AS beta,
  REGR_R2(f.ret, b.ret)     AS r_squared
FROM fund_daily f
JOIN bench_daily b ON f.date = b.date
WHERE f.ret IS NOT NULL AND b.ret IS NOT NULL

Worked Example

HDFC Flexi Cap - Full History

Beta = 0.92, R² = 0.88

The fund captures 92% of Nifty 50's moves (slightly defensive). 88% of its variance is explained by the market - this is a strong fit, so the beta is reliable.

Axis Focused 25 - Last 3Y

Beta = 0.78, R² = 0.71

More defensive (only 78% of market moves), and 71% fit. The concentrated portfolio (25 stocks) means more stock-specific risk, hence lower R².

Edge Cases

Beta Confidence Intervals

The beta value from the regression is a point estimate. Confidence intervals tell you the range within which the true beta is likely to fall. A narrow CI means the beta is precisely estimated; a wide CI means there is more uncertainty.

SE(Beta) = |Beta / t-stat|

CI = Beta ± tcritical × SE(Beta)

tcritical values:
  90% CI → 1.645
  95% CI → 1.960
  99% CI → 2.576

We derive the standard error directly from the beta and t-statistic that are already computed. No additional regression is needed. The t-critical values assume a large sample (250+ daily observations), where the t-distribution closely approximates the normal.

Beta CI - Worked Example

Beta = 0.92, t-stat = 28.4

SE = |0.92 / 28.4| = 0.0324

95% CI = 0.92 ± 1.960 × 0.0324 = [0.856, 0.984]

We are 95% confident the true beta lies between 0.856 and 0.984. The interval is narrow because we have many observations and a high t-stat.

When the t-stat is low (e.g., below 2), the CI becomes wide and may include zero - meaning we cannot be confident the fund has any systematic relationship with the benchmark. This aligns with the R² color coding: low t-stat typically accompanies low R².

Related metrics

More Risk Metrics methodology from the MFPRO analytics tool: