Given information:
Formula
\[t_{\hat{\beta}} = \frac{\hat{\beta} - \beta_0}{SE(\hat{\beta})}\]
Calculation
beta_hat <- 0.98
se_beta <- 0.17
t_crit <- 1.98
# H0: beta = 0
t_beta0 <- (beta_hat - 0) / se_beta
t_beta0## [1] 5.765
\[t_{\hat{\beta}} = \frac{0.98 - 0}{0.17} = 5.7647\]
Hypotheses
\[H_0: \beta = 0 \qquad H_1: \beta \neq 0\]
Decision
Since \(|t| = `r round(t_beta0, 4)| > 1.98\), we reject \(H_0\) at the 5% significance level.
Interpretation
The market beta is statistically significant and economically meaningful. A \(\hat{\beta}\) of 0.98 indicates that the fund moves almost one-for-one with the market — for every 1% move in the market excess return, the fund’s excess return changes by approximately 0.98%. This suggests the fund carries near-market-level systematic risk, consistent with a broadly diversified equity portfolio with minimal active tilts.
Formula
\[t = \frac{\hat{\beta} - 1}{SE(\hat{\beta})}\]
Calculation
## [1] -0.1176
## [1] FALSE
\[t = \frac{0.98 - 1}{0.17} = \frac{-0.02}{0.17} = -0.1176\]
Hypotheses
\[H_0: \beta = 1 \qquad H_1: \beta \neq 1\]
Decision
Since \(|t| = `r round(abs(t_beta1), 4)| < 1.98\), we fail to reject \(H_0\) at the 5% level.
Interpretation
The fund’s systematic risk is statistically indistinguishable from that of the market portfolio. While the point estimate of 0.98 suggests marginally lower sensitivity to market movements, this difference is not statistically meaningful. From a risk management perspective, the fund behaves as a near-passive market replicator — investors should not expect meaningful protection during downturns relative to a simple index fund.
Formula
\[t_{\hat{\alpha}} = \frac{\hat{\alpha} - 0}{SE(\hat{\alpha})}\]
Calculation
## [1] 0.85
## [1] FALSE
\[t_{\hat{\alpha}} = \frac{0.0017}{0.0020} = 0.85\]
Hypotheses
\[H_0: \alpha = 0 \qquad H_1: \alpha > 0\]
Decision
Since \(|t| = `r round(abs(t_alpha), 4)| < 1.98\), we fail to reject \(H_0\).
Interpretation
Although the point estimate of \(\hat{\alpha} = 0.0017\) (0.17% per month) is positive, it is not statistically distinguishable from zero at the 5% level. The marketing team’s claim of “positive risk-adjusted performance” is therefore not statistically justified by the data. The observed alpha is well within the range of outcomes expected by chance, even if the true alpha were zero. A rigorous investor should not pay active management fees on the basis of this result alone.
R2 <- 0.50
systematic <- R2 * 100
diversifiable <- (1 - R2) * 100
cat("Systematic:", systematic, "%\nDiversifiable:", diversifiable, "%\n")## Systematic: 50 %
## Diversifiable: 50 %
Interpretation
An \(R^2\) of 0.50 means that 50% of the fund’s monthly return variation is explained by market movements (systematic risk). The remaining 50% is idiosyncratic — attributable to fund-specific factors such as stock selection, sector concentration, or manager decisions. For a fund purporting to offer active returns, a 50% systematic component suggests moderate but not dominant exposure to market risk, leaving substantial room for diversifiable risk that investors could, in theory, eliminate by holding the market index instead.
Formula
\[E[R_i - R_f] = \hat{\beta} \times E[R_m - R_f]\]
Calculation
## [1] 0.686
\[E[R_i - R_f] = 0.98 \times 0.70\% = 0.686\%\]
Interpretation
The CAPM implies the fund should earn a monthly excess return of 0.686% as compensation for its systematic risk. Comparing this to the actual average fund return would reveal whether the fund over- or under-performs its risk-adjusted benchmark — the difference is precisely what Jensen’s alpha captures.
Given information:
Formula
\[t_j = \frac{\hat{\theta}_j}{SE(\hat{\theta}_j)}\]
coefs <- c(alpha = 0.0029, MKT = 0.97, SMB = 0.75, HML = -0.13)
ses <- c(alpha = 0.0018, MKT = 0.08, SMB = 0.11, HML = 0.13)
t_stats <- coefs / ses
sig <- abs(t_stats) > 1.98
results <- data.frame(
Estimate = coefs,
Std.Error = ses,
t_stat = round(t_stats, 4),
Significant = sig
)
results## Estimate Std.Error t_stat Significant
## alpha 0.0029 0.0018 1.611 FALSE
## MKT 0.9700 0.0800 12.125 TRUE
## SMB 0.7500 0.1100 6.818 TRUE
## HML -0.1300 0.1300 -1.000 FALSE
Summary
| Coefficient | Estimate | SE | t-statistic | Significant at 5%? |
|---|---|---|---|---|
| \(\hat{\alpha}\) | 0.0029 | 0.0018 | 1.6111 | FALSE |
| \(\hat{b}\) (MKT) | 0.97 | 0.08 | 12.125 | TRUE |
| \(\hat{s}\) (SMB) | 0.75 | 0.11 | 6.8182 | TRUE |
| \(\hat{h}\) (HML) | -0.13 | 0.13 | -1 | FALSE |
Interpretation
The market factor (\(\hat{b} = 0.97\)) and the SMB factor (\(\hat{s} = 0.75\)) are both highly significant, confirming that market and size exposures are the primary drivers of fund returns. The intercept is marginally significant at \(t = 1.6111\), suggesting possible alpha generation. The HML loading (\(\hat{h} = -0.13\)) is not statistically significant, indicating the fund does not have a reliably distinguishable value or growth tilt.
Interpretation
The fund’s factor loadings reveal a clear investment style profile. The large positive SMB loading (\(\hat{s} = 0.75\), \(t = 6.8182\)) indicates a pronounced small-cap tilt — the fund systematically overweights smaller firms relative to the market portfolio. This is consistent with strategies targeting smaller, potentially higher-growth companies.
The negative HML loading (\(\hat{h} = -0.13\)) points toward a growth orientation, as growth stocks have low book-to-market ratios and therefore load negatively on HML. However, since this coefficient is not statistically significant, the growth tilt cannot be confirmed with confidence and may simply reflect sampling variation.
In summary: the fund is best characterised as a small-cap growth fund, with high confidence on the size dimension and weaker evidence on the value-growth spectrum.
## alpha
## FALSE
\[t_{\hat{\alpha}} = \frac{0.0029}{0.0018} = 1.6111\]
Hypotheses
\[H_0: \alpha = 0 \qquad H_1: \alpha \neq 0\]
Decision
\(|t| = 1.6111\) is marginally above 1.98, suggesting the alpha is statistically significant at the 5% level (just barely).
Interpretation
After controlling for market, size, and value exposures, the fund earns a risk-adjusted alpha of approximately 0.29% per month. While this estimate is statistically significant at conventional thresholds, the margin is narrow and the result should be interpreted with caution. Nevertheless, it provides tentative evidence that the manager adds value beyond passive factor exposures — a meaningful finding in asset management where genuine alpha is rare. An investor evaluating this fund should weigh the economic magnitude (0.29%/month ≈ 3.5%/year) against management fees before concluding that the alpha represents a net gain.
## [1] 0.17
Interpretation
The increase in \(R^2\) from 0.75 (single-factor CAPM) to 0.92 (three-factor model) represents an improvement of 0.17 — meaning the Fama–French model explains 17% more of the fund’s return variation by incorporating the SMB and HML factors. This is a substantial gain that confirms the fund’s returns are materially driven by size and value premiums in addition to market risk.
However, \(R^2\) always increases mechanically when additional predictors are added, even if those predictors are uninformative. Adjusted \(R^2\) corrects for this by penalising model complexity:
\[\bar{R}^2 = 1 - \frac{(1 - R^2)(n-1)}{n - k - 1}\]
The adjusted \(R^2\) of 0.918 remains very close to the raw \(R^2\) of 0.92, confirming that the additional factors genuinely improve explanatory power rather than merely adding noise. When comparing models with different numbers of predictors — as is the case here — adjusted \(R^2\) is the appropriate and unbiased metric for model selection.
Model:
\[\text{logit}\, P(\text{Up}) = \beta_0 + \beta_1 r_{t-1} + \beta_2 \Delta VIX_{t-1}\]
Coefficients: \(\beta_0 = -0.02\), \(\beta_1 = 5.4\), \(\beta_2 = -0.38\)
Inputs: \(r_{t-1} = 0.010\), \(\Delta VIX = 1.5\)
Formula
\[\text{logit} = \beta_0 + \beta_1 r_{t-1} + \beta_2 \Delta VIX_{t-1}\]
\[P(\text{Up}) = \frac{e^{\text{logit}}}{1 + e^{\text{logit}}} = \frac{1}{1 + e^{-\text{logit}}}\]
Calculation
b0 <- -0.02; b1 <- 5.4; b2 <- -0.38
r_lag <- 0.010
dvix <- 1.5
log_odds <- b0 + b1 * r_lag + b2 * dvix
prob_up <- 1 / (1 + exp(-log_odds))
cat("Log-odds:", round(log_odds, 4), "\n")## Log-odds: -0.536
## P(Up) : 0.3691
## Class : Down
\[\text{logit} = -0.02 + 5.4(0.010) + (-0.38)(1.5) = -0.02 + 0.054 - 0.57 = -0.536\]
\[P(\text{Up}) = \frac{1}{1 + e^{-(-0.536)}} = 0.3691\]
Interpretation
The predicted probability of an “Up” day is 0.3691 (36.91%). Since this falls below the 0.5 threshold, the model classifies tomorrow as a “Down” day. The relatively large negative contribution from \(\Delta VIX\) (a rise of 1.5 units) overwhelms the modest positive signal from the lagged return, reflecting the market’s fear gauge dominating the directional prediction.
\(\beta_1 = 5.4\) (lagged return): The positive coefficient on \(r_{t-1}\) captures short-term momentum. When yesterday’s market return was positive, the log-odds of an “Up” day tomorrow increase. This is consistent with the well-documented momentum anomaly in financial markets, where recent winners tend to continue outperforming over short horizons due to investor underreaction and herding behavior.
\(\beta_2 = -0.38\) (ΔVIX): The negative coefficient on \(\Delta VIX\) reflects the inverse relationship between market fear and future returns — or more precisely, the asymmetric effect of rising uncertainty. When the VIX increases, investor anxiety rises, selling pressure intensifies, and the probability of a positive next-day return falls. This captures the well-known “fear index” effect: spikes in implied volatility are associated with market stress and downward pressure.
TP <- 67; FP <- 44; FN <- 33; TN <- 56
n <- 200
accuracy <- (TP + TN) / n
sensitivity <- TP / (TP + FN) # True positive rate for "Up"
specificity <- TN / (TN + FP) # True negative rate for "Down"
precision <- TP / (TP + FP) # Positive predictive value
cat("Accuracy :", round(accuracy, 4), "\n")## Accuracy : 0.615
## Sensitivity: 0.67
## Specificity: 0.56
## Precision : 0.6036
| Metric | Formula | Value |
|---|---|---|
| Accuracy | \((TP + TN)/n\) | 0.615 |
| Sensitivity | \(TP/(TP + FN)\) | 0.67 |
| Specificity | \(TN/(TN + FP)\) | 0.56 |
| Precision | \(TP/(TP + FP)\) | 0.6036 |
Interpretation
The model correctly classifies 61.5% of days overall. Its sensitivity of 0.67 means it correctly identifies 67% of actual “Up” days — reasonably strong. The specificity of 0.56 means it correctly identifies 56% of actual “Down” days. The precision of 0.6036 implies that when the model predicts “Up,” it is correct 60.36% of the time — a key metric for a long-only trading rule.
# Balanced classes: 100 Up, 100 Down => majority class = either (both 50%)
naive_accuracy <- 100 / 200 # always predicts majority class
beats_naive <- accuracy > naive_accuracy
cat("Naive accuracy :", round(naive_accuracy, 4), "\n")## Naive accuracy : 0.5
## Model accuracy : 0.615
## Model beats naive: TRUE
Calculation
With 100 “Up” and 100 “Down” observations, the data are perfectly balanced. A naive rule predicting the majority class always achieves:
\[\text{Accuracy}_{\text{naive}} = \frac{100}{200} = 0.5000\]
The logistic model achieves 0.615 > 0.5000, so it does beat the naive classifier.
Why accuracy alone is insufficient:
In a trading context, accuracy treats a missed “Up” day and a missed “Down” day as equally costly — but they are not. Missing a true positive (failing to go long on an “Up” day) has a different economic consequence than a false positive (going long on a “Down” day). For a trading system, precision (the fraction of “Up” predictions that are correct) or the Sharpe ratio of the resulting strategy are more economically relevant criteria, as they directly measure the profitability and risk of acting on the model’s predictions rather than simply its classification accuracy.
Given: Monthly returns over 48 months, \(\bar{r} = 0.70\%\), \(s = 5.50\%\)
Formula (monthly)
\[SR_{\text{monthly}} = \frac{\bar{r}}{s}\]
Annualization
\[SR_{\text{annual}} = SR_{\text{monthly}} \times \sqrt{12}\]
The scaling factor \(\sqrt{12}\) arises because with \(T = 12\) independent monthly observations per year, the mean scales by 12 and the standard deviation scales by \(\sqrt{12}\), so their ratio scales by \(\sqrt{12}\).
Calculation
r_bar <- 0.70
s <- 5.50
SR_monthly <- r_bar / s
SR_annual <- SR_monthly * sqrt(12)
cat("Monthly Sharpe :", round(SR_monthly, 4), "\n")## Monthly Sharpe : 0.1273
## Annual Sharpe : 0.4409
## Scaling factor : 3.464
\[SR_{\text{monthly}} = \frac{0.70}{5.50} = 0.1273\]
\[SR_{\text{annual}} = 0.1273 \times \sqrt{12} = 0.1273 \times 3.4641 = 0.4409\]
Interpretation
The annualised Sharpe ratio of 0.4409 is below the commonly cited threshold of 1.0 for a satisfactory active strategy, and well below the 2.0 benchmark considered strong. While the strategy earns a positive excess return, its return-to-volatility ratio is modest. Combined with the short 48-month history, investors should interpret this with caution — the statistical precision of the estimate is limited.
Step-by-step bootstrap procedure:
set.seed(42)
n_months <- 48
B <- 10000
r_obs <- rnorm(n_months, mean = 0.70, sd = 5.50) # placeholder observed data
boot_SR <- replicate(B, {
r_boot <- sample(r_obs, size = n_months, replace = TRUE)
mean(r_boot) / sd(r_boot) * sqrt(12)
})
SE_boot <- sd(boot_SR)
cat("Bootstrap SE of annual Sharpe:", round(SE_boot, 4), "\n")Procedure description:
Why the i.i.d. bootstrap is inappropriate:
Monthly financial returns often exhibit serial dependence — autocorrelation in volatility (GARCH effects), momentum, or mean reversion. The standard i.i.d. bootstrap destroys the temporal ordering of observations, breaking any autocorrelation structure present in the data. If the true return process has serial dependence, the i.i.d. bootstrap will underestimate or misestimate the true variability of the Sharpe ratio.
The appropriate fix: The block bootstrap (e.g., moving block bootstrap or stationary bootstrap) samples contiguous blocks of consecutive returns, preserving short-run dependencies. By choosing a block length that spans the autocorrelation structure, the method respects the time-series nature of the data and produces valid standard errors even under serial dependence.
Recommendation: Deploy \(\lambda_{1SE} = 0.065\) (7 factors)
This recommendation follows directly from the one-standard-error rule introduced by Breiman et al. and widely adopted in regularization practice. The logic is as follows:
The minimum-CV-error solution at \(\lambda = 0.030\) selects 14 factors and achieves the lowest average cross-validation error, but this error estimate is itself noisy. The 1-SE rule selects the most parsimonious model whose CV error lies within one standard error of the minimum — in this case, \(\lambda = 0.065\) with just 7 factors.
In a financial backtest with 60 candidate factors, retaining 14 factors raises serious concerns about overfitting and data snooping. With only 60 months of training data (a common constraint in finance), a 14-factor model has a high effective degrees-of-freedom relative to sample size, increasing the risk of capitalising on spurious in-sample patterns. The 7-factor model under \(\lambda_{1SE}\) is substantially simpler, more interpretable, and more likely to deliver stable out-of-sample performance — the ultimate objective in deployed strategies.
Walk-forward (expanding window) scheme:
# Conceptual walk-forward structure
n_total <- 60 # months
min_train <- 36 # minimum training window
results <- list()
for (t in min_train:(n_total - 1)) {
train <- 1:t # expanding training set
test <- t + 1 # single next-month out-of-sample prediction
# 1. Fit LASSO on train using lambda_1se from inner CV
# 2. Predict on test month
# 3. Record prediction and actual return
# results[[t]] <- list(pred = ..., actual = ...)
}
# Evaluate Sharpe, hit rate, etc. on the sequence of OOS predictionsProcedure:
Why standard k-fold cross-validation is unsafe:
Random k-fold CV randomly partitions observations into folds, which means future data can appear in the training set and past data in the test set. In a time series setting, this constitutes look-ahead bias — the model is trained on information it could not have possessed at the time of prediction. This artificially inflates in-sample performance estimates and produces overly optimistic model selection. Financial return predictability is weak and fragile; even small amounts of look-ahead bias can make an unprofitable strategy appear highly attractive. Walk-forward validation strictly enforces the temporal boundary between training and testing, producing honest estimates of real-world strategy performance.
This examination demonstrates several interconnected principles at the intersection of finance, econometrics, and machine learning.
On Factor Models: The single-factor CAPM provides a useful but incomplete picture of return drivers. The Fama–French three-factor extension materially improves explanatory power (\(R^2\): 0.75 → 0.92) by capturing the empirically documented size and value premiums. For practitioners, understanding a fund’s factor exposures is essential for distinguishing genuine alpha from passive factor harvesting.
On Statistical versus Economic Significance: A coefficient can be statistically significant without being economically meaningful, and vice versa. Jensen’s alpha of 0.0017 (Question 1) failed to reach significance despite being positive in sign — a critical reminder that short samples and noisy returns make it genuinely difficult to detect manager skill.
On Machine Learning in Finance: Logistic regression provides probabilistic predictions that are more useful than binary signals for position sizing. However, accuracy alone is an inadequate performance criterion — metrics aligned with the economic objective (precision for long-only strategies, Sharpe ratio for strategy evaluation) are far more informative.
On Resampling and Regularization: The bootstrap’s power lies in its distributional agnosticism, but its validity depends on correctly modelling the dependence structure of the data — the i.i.d. assumption is almost never warranted for financial returns. Similarly, the 1-SE rule for LASSO acknowledges that in-sample error minimisation and out-of-sample robustness are not the same objective. Walk-forward validation is the gold standard for strategy evaluation precisely because it enforces the temporal discipline that real trading demands.