import yfinance as yf
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as pltWorkshop 3, Econometric Models
1 Estimating the CAPM model for a stock
2 The CAPM model
The Capital Asset Pricing Model states that the expected return of a stock is given by the risk-free rate plus its beta coefficient multiplied by the market premium return. In mathematical terms:
E[R_i] = R_f + β_1(R_M − R_f )
We can express the same equation as:
(E[R_i] − R_f ) = β_1(R_M − R_f )
Then, we are saying that the expected value of the premium return of a stock is equal to the premium market return multiplied by its market beta coefficient. You can estimate the beta coefficient of the CAPM using a regression model and using continuously compounded returns instead of simple returns. However, you must include the intercept b0 in the regression equation:
(r_i − r_f ) = β_0 + β_1(r_M − r_f ) + ε
Where ε ∼ N(0, σ_ε); the error is a random shock with an expected mean=0 and a specific standard deviation or volatility. This error represents the result of all factors that influence stock returns, and cannot be explained by the model (by the market).
In the market model, the dependent variable was the stock return and the independent variable was the market return. Unlike the market model, here the dependent variable is the difference between the stock return minus the risk-free rate (the stock premium return), and the independent variable is the premium return, which is equal to the market return minus the risk-free rate. Let’s run this model in with a couple of stocks.
3 Data collection
We load the libraries to collect, process and visualize stock data from Yahoo Finance:
3.1 Download stock data
We download monthly stock data for Apple, Tesla and the S&P500 from Dec 2019 to July 31, 2024 from Yahoo Finance using the yfinance function and obtain continuously compounded returns for each:
data = yf.download("^GSPC AAPL TSLA", start='2020-12-01', end='2026-01-31', interval='1mo', auto_adjust=True)
[ 0% ]
[**********************67%******* ] 2 of 3 completed
[*********************100%***********************] 3 of 3 completed
# Get adjusted close prices
adjprices = data['Close']
# Calculate continuously compounded returns for the 3 prices:
#returns = np.log(adjprices) - np.log(adjprices.shift(1))
#returns = returns.dropna()
returns = np.log(adjprices).diff(1).dropna()
# I used the diff function instead of subtracting the log price and its previous log priceI have monthly returns from Jan 2020:
returnsTicker AAPL TSLA ^GSPC
Date
2021-01-01 -0.005517 0.117344 -0.011199
2021-02-01 -0.084562 -0.161038 0.025757
2021-03-01 0.008806 -0.011270 0.041563
2021-04-01 0.073453 0.060293 0.051097
2021-05-01 -0.053514 -0.126372 0.005471
... ... ... ...
2025-09-01 0.093605 0.286693 0.034714
2025-10-01 0.059980 0.026275 0.022433
2025-11-01 0.030883 -0.059540 0.001299
2025-12-01 -0.024418 0.044445 -0.000524
2026-01-01 -0.046608 -0.043887 0.013570
[61 rows x 3 columns]
3.2 Download risk-free data from the FED
We download the risk-free monthly rate for the US (3-month treasury bills), which is the TB3MS ticker. We do this with the pandas_datareader library:
# You have to install the pandas-datareader package:
#!pip install pandas-datareader
import pandas_datareader.data as pdrimport pandas_datareader.data as pdr
import datetime
# I define start as the month Jan 2020
start = datetime.datetime(2021,1,1)
# I define the end month as Jan 2026
end = datetime.datetime(2026,1,31)
Tbills = pdr.DataReader('TB3MS','fred',start,end)We see the content of Tbills:
Tbills TB3MS
DATE
2021-01-01 0.08
2021-02-01 0.04
2021-03-01 0.03
2021-04-01 0.02
2021-05-01 0.02
... ...
2025-09-01 3.92
2025-10-01 3.82
2025-11-01 3.78
2025-12-01 3.59
2026-01-01 3.57
[61 rows x 1 columns]
The TB3MS serie is given in percentage and in annual rate. I divide it by 100 and 12 to get a monthly simple rate since I am using monthly rates for the stocks:
rfrate = Tbills / 100 / 12Now I get the continuously compounded return from the simple return:
rfrate = np.log(1+rfrate)I used the formula to get cc reteurns from simple returns, which is applying the natural log of the growth factor (1+rfrate)
4 Visualize the relationship
We do a scatter plot putting the S&P500 premium returns as the independent variable (X) and Tesla premium return as the dependent variable (Y). We also add a line that better represents the relationship between the stock returns and the market returns:
import seaborn as sb
plt.clf()
x = returns['GSPC_Premr']
y = returns['TSLA_Premr']
# I plot the (x,y) values along with the regression line that fits the data:
sb.regplot(x=x,y=y)
plt.xlabel('Market Premium returns')
plt.ylabel('TSLA Premium returns')
plt.show()Sometimes graphs can be deceiving. In this case, the range of X axis and Y axis are different, so it is better to do a graph where we can make both X and Y ranges with equal distance.
plt.clf()
sb.regplot(x=x,y=y)
# I adjust the scale of the X axis so that the magnitude of each unit of X is equal to that of the Y axis
plt.xticks(np.arange(-0.6,0.8,0.2))([<matplotlib.axis.XTick object at 0x0000020E592F1310>, <matplotlib.axis.XTick object at 0x0000020E5927B9D0>, <matplotlib.axis.XTick object at 0x0000020E5931C190>, <matplotlib.axis.XTick object at 0x0000020E5931C910>, <matplotlib.axis.XTick object at 0x0000020E5931D090>, <matplotlib.axis.XTick object at 0x0000020E5931D810>, <matplotlib.axis.XTick object at 0x0000020E5931DF90>], [Text(-0.6, 0, '−0.6'), Text(-0.39999999999999997, 0, '−0.4'), Text(-0.19999999999999996, 0, '−0.2'), Text(1.1102230246251565e-16, 0, '0.0'), Text(0.20000000000000007, 0, '0.2'), Text(0.4, 0, '0.4'), Text(0.6000000000000002, 0, '0.6')])
# I label the axis:
plt.xlabel('Market Premium returns')
plt.ylabel('TSLA Premium returns')
plt.show()QUESTION: WHAT DOES THE PLOT TELL YOU? BRIEFLY EXPLAIN
WHAT DOES THE PLOT TELL YOU? BRIEFLY EXPLAIN
R: I CAN SEE THAT THE RANGE OF PREMIUM RETURNS OF THE MARKET (GSPC) RANGES APPROX. BETWEEN -18% AND +8%, WHILE THE TESLA PREMIUM RETURNS RANGES BETWEEN MORE THAN -40% TO +40% MONTHLY RETURNS.
I CAN ALSO SEE THAT TESLA PREMIUM RETURNS ARE POSITIVELY RELATED TO THE MARKET PREMIUM RETURNS, AND ITS SENSITIVITY TO CHANGES IN THE MARKET PREMIUM RETURN IS VERY HIGH. I CAN SEE THAT APPROX. FOR EACH + 1.00 PERCENT POINT OF INCREASE IN THE MARKET PREMIUM RETURN, TESLA PREMIUM RETURN MOVES IN MUCH MORE THAN +1.00 PERCENT POINT SINCE THE SLOPE OF THE LINE IS VERY INCLINED WITH A DEGREE HIGHER THAN 45 DEGREES (INCLINATION OF 45 DEGREES HAPPENS WHEN THE SLOPE=1).
5 Estimating the CAPM model for a stock
Use the premium returns to run the CAPM regression model for each stock.
We run the CAPM for TESLA:
import statsmodels.formula.api as smf
# I estimate the OLS regression model:
mkmodel = smf.ols('TSLA_Premr ~ GSPC_Premr',data=returns).fit()
# I display the summary of the regression:
print(mkmodel.summary()) OLS Regression Results
==============================================================================
Dep. Variable: TSLA_Premr R-squared: 0.203
Model: OLS Adj. R-squared: 0.190
Method: Least Squares F-statistic: 15.04
Date: mié., 04 mar. 2026 Prob (F-statistic): 0.000268
Time: 12:56:54 Log-Likelihood: 29.894
No. Observations: 61 AIC: -55.79
Df Residuals: 59 BIC: -51.57
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept -0.0057 0.020 -0.291 0.772 -0.045 0.033
GSPC_Premr 1.7518 0.452 3.878 0.000 0.848 2.656
==============================================================================
Omnibus: 1.587 Durbin-Watson: 1.888
Prob(Omnibus): 0.452 Jarque-Bera (JB): 1.536
Skew: -0.293 Prob(JB): 0.464
Kurtosis: 2.489 Cond. No. 23.4
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
I can important results of the model in the following variables:
b0=mkmodel.params.iloc[0]
b1=mkmodel.params.iloc[1]
seb0 = mkmodel.bse.iloc[0]
seb1 = mkmodel.bse.iloc[1]
tb0 = mkmodel.params.iloc[0] / mkmodel.bse.iloc[0]
tb1 = mkmodel.params.iloc[1] / mkmodel.bse.iloc[1]
pvalueb0 = mkmodel.pvalues.iloc[0]
pvalueb1 = mkmodel.pvalues.iloc[1]
confb0 = 100 * (1-pvalueb0)
minb0 = mkmodel.conf_int().iloc[0].iloc[0]
maxb0 = mkmodel.conf_int().iloc[0].iloc[1]
minb1 = mkmodel.conf_int().iloc[1].iloc[0]
maxb1 = mkmodel.conf_int().iloc[1].iloc[1]
tvalueb1 = (b1 - 1) / seb1The beta0 coefficient of the model is -0.0057, while beta1 is 1.7518.
The 95% confidence interval for beta0 goes from -0.0449 to 0.0335, while the 95% confidence interval for beta1 goes from 0.8479 to 2.6558.
If we subtract and add about 2 times the standard error of beta0 from beta0 we get the 95% confidence interval for beta0. Why? Because thanks to the Central Limit Theorem, beta0 (and also beta1) will behave similar to a normal distributed variable since the beta0 can be expressed as a linear combination of random variables.
We can construct the 95% confidence interval for beta1 in the same way we calculate the 95% C.I. for beta0.
6 CHALLENGE 1
Respond the following questions regarding Tesla CAPM model:
(a) INTERPRET THE RESULTS OF THE COEFFICIENTS (b0 and b1), THEIR STANDARD ERRORS, P-VALUES AND 95% CONFIDENCE INTERVALS.
REGARDING BETA0:
BETA0 IS -0.0057 . REMEMBER THAT BETA0 IN THE CAPM REPRESENTS THE EXCESS PREMIUM RETURNS OF THE STOCK COMPARED TO THE PREMIUM RETURNS OF THE MARKET.
THEN, THE VALUE ESTIMATED FOR BETA0 IS ACTUALLY THE AVERAGE VALUE OF BETA0. THEN, ON AVERAGE IT IS NEGATIVE.
HOWEVER, IS BETA0 SIGNIFICANTLY NEGATIVE? IN OTHER WORDS, IN THE FUTURE, IS IT PROBABLE THAT BETA0 WILL KEEP BEING NEGATIVE 95% OF THE TIME?
WE CAN RESPOND THIS QUESTION ABOUT THE STATISTICAL SIGNIFICANCE OF BETA0 WITH ANY OF THE FOLLOWING:
| PARAMETER | RULE OF THUMB FOR SIGNIFICANCE (95% CONFIDENCE) |
|---|---|
| t-VALUE | IF |t-VALUE| > 2 |
| P-VALUE | IF |P-VALUE|<0.05 |
| 95% CONFIDENCE INTERVAL | IF THE INTERVAL DOES NOT CONTAINS THE NUMBER ZERO |
ACCORDING TO THE 95% CONFIDENCE INTERVAL, IN THE FUTURE BETA0 CAN MOVE FROM -0.0449 TO 0.0335 WITH A PROBABILITY OF 0.95. THIS MEANS THAT, ALTHOUGH BETA0 ON AVERAGE IS NEGATIVE, IT IS NOT SIGNIFICANTLY NEGATIVE AT THE 95% CONFIDENCE INTERVAL. IN OTHER WORDS, WITH A PROBABILITY OF 0.95, IN THE FUTURE BETA0 CAN BE NEGATIVE, ZERO OR POSITIVE! WE HAVE NOT ENOUGH CERTAINTY AT 95% CONFIDENCE TO SAY THAT BETA0 IS NEGATIVE (OR POSITIVE); IN OTHER WORDS, WE KEEP THE HYPOTHESIS THAT BETA0 WILL BE AROUND ZERO.
SINCE BETA0 CAN MOVE FROM A NEGATIVE NUMBER TO A POSITIVE NUMBER, ITS PVALUE IS GREATER THAN 0.05 (0.7721). THE PVALUE IS THE PROBABILITY OF MAKING A MISTAKE IF WE REJECT THE NULL HYPOTHESIS, WHICH STATES THAT BETA0=0. IN OTHER WORDS, (1-PVALUE) WILL BE THE PROBABILITY THAT WE WILL BE CORRECT IF WE REJECT THE NULL HYPOTHESIS AND ACCEPT THE ALTERNATIVE HYPOTHESIS THAT STATES THAT BETA IS LESS THAN ZERO. IN THIS CASE, WE HAVE A PROBABILITY OF 0.2279 IF WE SAY THAT THE EXCESS RETURN OF TESLA WILL BE DIFFERENT THAN ZERO IN THE FUTURE.
IN OTHER WORDS, WE CANNOT REJECT THE NULL HYPOTHESIS THAT STATES THAT BETA0 = 0. THIS IS IN LINE WITH THE MARKET EFFICIENCY HYPOTHESIS, WHICH PREDICTS THAT BETA0 WILL NOT BE SIGNIFICANTLY DIFFERENT THAN ZERO FOR ANY STOCK WITHIN A FINANCIAL MARKET.
THE t VALUE IS LESS THAN 2. REMEMBER THAT THE t-VALUE IS THE DISTANCE FROM THE BETA0 COEFFICIENT TO THE ZERO MEASURED IN STANDARD DEVIATIONS OF BETA0. THEN, IF t-VALUE < 2, THIS MEANS THAT THE DISTANCE OF BETA0 FROM THE ZERO IS NOT ENOUGH TO SAY THAT IT WILL BE POSITIVE 95% OF THE TIME.
REGARDING BETA1:
BETA1 IS 1.7518 . REMEMBER THAT BETA1 IN THE CAPM REPRESENTS THE SENSITIVITY OF THE STOCK PREMIUM RETURNS WITH RESPECT TO THE MARKET PREMIUM RETURNS.
IN THE CAPM BETA1 ACTUALLY MEASURES TWO IMPORTANT ASPECTS OF THE RELATIONSHIP BETWEEN THE STOCK AND THE MARKET:
THE LINEAR RELATIONSHIP BETWEEN THE STOCK PREMIUM RETURNS AND THE MARKET PREMIUM RETURNS
THE MARKET RISK OF THE STOCK. THIS CAN BE CONCEIVED AS THE SENSITIVITY OF THE STOCK PREMIUM RETURN WHEN THE MARKET PREMIUM RETURN CHANGES IN 1%.
BET1 IS ACTUALLY THE THE SLOPE (INCLINATION) OF THE REGRESSION LINE.
THEN, THE VALUE ESTIMATED FOR BETA1 FOR TESLA IS ACTUALLY THE AVERAGE VALUE OF BETA1. THEN, ON AVERAGE IT IS POSITIVE AND IT IS GREATER THAN 1.
HOWEVER, IS BETA1 SIGNIFICANTLY POSITIVE? IN OTHER WORDS, IS THE STOCK PREMIUM RETURN LINEALY AND POSITIVELY RELATED TO THE MARKET PREMIUM RETURN? IN THE FUTURE, IS IT PROBABLE THAT BETA1 WILL KEEP BEING POSITIVE 95% OF THE TIME?
THE OTHER INTERESTING QUESTION FOR BETA1 IS:
IS BETA1 SIGNIFICANTLY GREATER THAN 1? IN OTHER WORDS, IN THE FUTURE, IS IT PROBABLE THAT BETA1 WILL KEEP GREATER THAN 1 95% OF THE TIME? SINCE BETA1 REPRESENTS MARKET RISK OF THE STOCK, WE CAN ASK: IS TESLA SIGNIFICANTLY RISKIER THAN THE MARKET?
WE CAN RESPOND THE FIRST QUESTION - IS THE STOCK PREMIUM RETURN RELATED TO THE MARKET PREMIUM RETURN (OR WHETHER BETA1 IS SIGNIFICANTLY POSITIVE)? - WITH ANY OF THE FOLLOWING:
| PARAMETER | RULE OF THUMB FOR SIGNIFICANCE (95% CONFIDENCE) |
|---|---|
| t-VALUE | IF |t-VALUE| > 2 |
| P-VALUE | IF |P-VALUE|<0.05 |
| 95% CONFIDENCE INTERVAL | IF THE INTERVAL DOES NOT CONTAINS THE NUMBER ZERO |
ACCORDING TO THE 95% CONFIDENCE INTERVAL, IN THE FUTURE BETA1 CAN MOVE FROM 0.8479 TO 2.6558 WITH A PROBABILITY OF 0.95. THIS MEANS THAT, IT IS SIGNIFICANTLY POSITIVE AT THE 95% CONFIDENCE INTERVAL. IN OTHER WORDS, WITH A PROBABILITY OF 0.95, IN THE FUTURE, TESLA PREMIUM RETURNS WILL BE POSITIVELY RELATED TO THE MARKET PREMIUM RETURNS.
SINCE BETA1 CAN MOVE FROM A POSITIVE NUMBER TO ANOTHER POSITIVE NUMBER, ITS PVALUE IS LESS THAN 0.05 (0.0003). THE PVALUE IS THE PROBABILITY OF MAKING A MISTAKE IF WE REJECT THE NULL HYPOTHESIS, WHICH STATES THAT BETA1=0. IN OTHER WORDS, (1-PVALUE) WILL BE THE PROBABILITY THAT WE WILL BE CORRECT IF WE REJECT THE NULL HYPOTHESIS AND ACCEPT THE ALTERNATIVE HYPOTHESIS THAT STATES THAT BETA1 IS GREATER THAN ZERO. IN THIS CASE, WE HAVE A PROBABILITY OF 0.2279 IF WE SAY THAT THE BETA1 OF TESLA WILL BE POSITIVE IN THE FUTURE.
THE t VALUE IS GREATER THAN 2. REMEMBER THAT THE t-VALUE IS THE DISTANCE FROM THE BETA1 COEFFICIENT TO THE ZERO MEASURED IN STANDARD DEVIATIONS OF BETA1. THEN, IF t-VALUE < 2, THIS MEANS THAT THE DISTANCE OF BETA1 FROM THE ZERO IS ENOUGH TO SAY THAT IT WILL BE POSITIVE 95% OF THE TIME.
THE SECOND QUESTION ASKS WHETHER BETA1 IS SIGNIFICANTLY GREATER THAN ONE. WE CAN RESPOND THIS QUESTION WITH ANY OF THE FOLLOWING:
| PARAMETER | RULE OF THUMB FOR SIGNIFICANCE (95% CONFIDENCE) |
|---|---|
| t-VALUE WITH H0: B1=1 | IF |t-VALUE| > 2 |
| 95% CONFIDENCE INTERVAL | IF THE INTERVAL DOES NOT CONTAINS THE NUMBER ONE |
WE CAN RESPOND THIS QUESTION WITH THE 95% CONFIDENCE INTERVAL, BUT NOT WITH THE p-VALUE NOR THE t-VALUE CALCULATED IN THE REGRESSION!
IN THIS CASE, SINCE THE 95% CONFIDENCE INTERVAL GOES FROM A NUMBER LESS THAN 1 (1 IS CONTAINED IN THE 95% C.I.), THEN WE CAN SAY THAT TESLA WILL NOT BE SIGNIFICANTLY RISKIER THAN THE MARKET AT 95% CONFIDENCE. HOWEVER, MOST OF THE TIME, BETA1 WILL BE HIGHER THAN 1 -BUT NOT 95% OF THE TIME.
(b) ACCORDING TO THE EFFICIENT MARKET HYPOTHESIS, WHAT IS THE EXPECTED VALUE OF b0 in the CAPM REGRESSION MODEL?
ACCORDING TO THE EFFICIENT MARKET HYPOTHESIS, THE EXPECTED VALUE OF BETAO IS ZERO SINCE THE MARKET EFFICIENT HYPOTHESIS STATES THAT THE MARKET IS THE MOST EFFICIENT PORTFOLIO, SO THE MARKET SYSTEMATICALLY OUTPERFORMS ANY INDIVIDUAL STOCK. THEN, FOR ANY STOCK BETA0 SHOULD NOT BE SIGNIFICANTLY POSITIVE.
IN REAL FINANCIAL MARKETS THERE ARE VERY FEW STOCKS THAT IN SOME PERIODS SYSTEMATICALLY OUTPERFORMS THE MARKET. HOWEVER, IT IS COMMON TO SEE THAT THIS IS JUST A TIME WINDOW THAT SOONER OR LATER DISAPEARS.
(c) ACCORDING TO YOUR RESULTS, IS TESLA SIGNIFICANTLY RISKIER THAN THE MARKET ? WHAT IS THE t-test YOU NEED TO DO TO RESPOND THIS QUESTION? Do the test and provide your interpretation. (Hint: Here you have to change the null hypothesis for b1: H0: b1=1; Ha=b1<>1)
AS I MENTIONED EARLIER, THE 95% CONFIDENCE INTERVAL FOR TESLA STARTS IN A NUMBER LESS THAN +1.0, SO TESLA IS NOT SIGNIFICANTLY RISKIER THAN THE MARKET AT THE 95% CONFIDENCE INTERVAL.
ANOTHER WAY TO RESPOND TO THIS QUESTION IS BY DOING THE FOLLOWING HYPOTHESIS TEST:
H0: BETA1 = 1 (THE STOCK IS EQUALLY RISY THAN THE MARKET)
HA: BETA1 > 1 (THE STOCK IS RISKIER THAN THE MARKET)
THEN, THE t-Value of this test will be:
t-Value = (1.7518 - 1 ) / 0.4518 = 1.6643
SINCE THE ABSOLUTE VALUE OF tValue IS LESS THAN 2, THEN I CANNOT REJECT the NULL HYPOTHESIS AT THE 95% CONFIDENCE. HOWEVER, BY LOOKING AT THE 95% CONFIDENCE INTERVAL, BETA1 WILL BE GREATER THAN 1 MOST OF THE TIME (BUT NOT 95% OF THE TIME). WITH THIS tValue, WE CAN CALCULATE A CORRESPONDING p-VALUE WITH THE FOLLOWING CODE:
from scipy.stats import t
tvalueb1 = (b1 - 1) / seb1
df = mkmodel.df_resid
# df is the degrees of freedom, which is equal to the # of obs minus 2 since I am estimating 2 betas
pvalueb1 = 2 * t.sf(abs(tvalueb1), df)
# I calcualte the 2-tailed pValue, which is more conservative than the 1-tailed pvalue
print("Two-tailed p-value:", pvalueb1)Two-tailed p-value: 0.10136111286794226
THEN, IN THIS CASE THE PVALUE IS ABOUT 10%, SAYING THAT WE COULD ACCEPT THAT TESLA IS MORE RISKY THAN THE MARKET AT THE 90% CONFIDENCE (1 - PVALUE) !
7 CHALLENGE 2
Follow the same procedure to get Apple’s CAPM and respond the same questions.
Use the premium returns to run the CAPM regression model for each stock.
We already have the APPLE data in the returns dataset, so we do not need to collect new data from Yahoo Finance.
However, we need to calculate the column for the PREMIUM RETURNS of Apple:
# I create new columns for the Premium returns in the returns dataset:
returns['AAPL_Premr'] = returns['AAPL'] - rfrate['TB3MS'] We run the CAPM for APPLE:
import statsmodels.formula.api as smf
# I estimate the OLS regression model:
mkmodel = smf.ols('AAPL_Premr ~ GSPC_Premr',data=returns).fit()
# I display the summary of the regression:
print(mkmodel.summary()) OLS Regression Results
==============================================================================
Dep. Variable: AAPL_Premr R-squared: 0.451
Model: OLS Adj. R-squared: 0.441
Method: Least Squares F-statistic: 48.39
Date: mié., 04 mar. 2026 Prob (F-statistic): 3.21e-09
Time: 12:56:56 Log-Likelihood: 94.862
No. Observations: 61 AIC: -185.7
Df Residuals: 59 BIC: -181.5
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 0.0008 0.007 0.113 0.911 -0.013 0.014
GSPC_Premr 1.0833 0.156 6.956 0.000 0.772 1.395
==============================================================================
Omnibus: 0.918 Durbin-Watson: 1.535
Prob(Omnibus): 0.632 Jarque-Bera (JB): 1.005
Skew: -0.250 Prob(JB): 0.605
Kurtosis: 2.618 Cond. No. 23.4
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
I can important results of the model in the following variables:
b0=mkmodel.params.iloc[0]
b1=mkmodel.params.iloc[1]
seb0 = mkmodel.bse.iloc[0]
seb1 = mkmodel.bse.iloc[1]
tb0 = mkmodel.params.iloc[0] / mkmodel.bse.iloc[0]
tb1 = mkmodel.params.iloc[1] / mkmodel.bse.iloc[1]
pvalueb0 = mkmodel.pvalues.iloc[0]
pvalueb1 = mkmodel.pvalues.iloc[1]
confb0 = 100 * (1-pvalueb0)
minb0 = mkmodel.conf_int().iloc[0].iloc[0]
maxb0 = mkmodel.conf_int().iloc[0].iloc[1]
minb1 = mkmodel.conf_int().iloc[1].iloc[0]
maxb1 = mkmodel.conf_int().iloc[1].iloc[1]
tvalueb1 = (b1 - 1) / seb1The beta0 coefficient of the model is 0.0008, while beta1 is 1.0833.
The 95% confidence interval for beta0 goes from -0.0127 to 0.0143, while the 95% confidence interval for beta1 goes from 0.7717 to 1.3949.
(a) INTERPRET THE RESULTS OF THE COEFFICIENTS (b0 and b1), THEIR STANDARD ERRORS, P-VALUES AND 95% CONFIDENCE INTERVALS.
REGARDING BETA0:
BETA0 IS 0.0008 . REMEMBER THAT BETA0 IN THE CAPM REPRESENTS THE EXCESS PREMIUM RETURNS OF THE STOCK COMPARED TO THE PREMIUM RETURNS OF THE MARKET.
THEN, THE VALUE ESTIMATED FOR BETA0 IS ACTUALLY THE AVERAGE VALUE OF BETA0. THEN, ON AVERAGE IT IS POSITIVE.
HOWEVER, IS BETA0 SIGNIFICANTLY POSITIVE? IN OTHER WORDS, IN THE FUTURE, IS IT PROBABLE THAT BETA0 WILL KEEP BEING POSITIVE 95% OF THE TIME?
WE CAN RESPOND THIS QUESTION ABOUT THE STATISTICAL SIGNIFICANCE OF BETA0 WITH ANY OF THE FOLLOWING:
| PARAMETER | RULE OF THUMB FOR SIGNIFICANCE (95% CONFIDENCE) |
|---|---|
| t-VALUE | IF |t-VALUE| > 2 |
| P-VALUE | IF |P-VALUE|<0.05 |
| 95% CONFIDENCE INTERVAL | IF THE INTERVAL DOES NOT CONTAINS THE NUMBER ZERO |
ACCORDING TO THE 95% CONFIDENCE INTERVAL, IN THE FUTURE BETA0 CAN MOVE FROM -0.0127 TO 0.0143 WITH A PROBABILITY OF 0.95. THIS MEANS THAT, ALTHOUGH BETA0 ON AVERAGE IS POSITIVE, IT IS NOT SIGNIFICANTLY POSITIVE AT THE 95% CONFIDENCE INTERVAL. IN OTHER WORDS, WITH A PROBABILITY OF 0.95, IN THE FUTURE BETA0 CAN BE NEGATIVE, ZERO OR POSITIVE! WE HAVE NOT ENOUGH CERTAINTY AT 95% CONFIDENCE TO SAY THAT BETA0 IS POSITIVE; IN OTHER WORDS, WE KEEP THE HYPOTHESIS THAT BETA0 WILL BE AROUND ZERO.
SINCE BETA0 CAN MOVE FROM A NEGATIVE NUMBER TO A POSITIVE NUMBER, ITS PVALUE IS GREATER THAN 0.05 (0.9108). THE PVALUE IS THE PROBABILITY OF MAKING A MISTAKE IF WE REJECT THE NULL HYPOTHESIS, WHICH STATES THAT BETA0=0. IN OTHER WORDS, (1-PVALUE) WILL BE THE PROBABILITY THAT WE WILL BE CORRECT IF WE REJECT THE NULL HYPOTHESIS AND ACCEPT THE ALTERNATIVE HYPOTHESIS THAT STATES THAT BETA IS LESS THAN ZERO. IN THIS CASE, WE HAVE A PROBABILITY OF 0.0892 IF WE SAY THAT THE EXCESS RETURN OF Apple WILL BE DIFFERENT THAN ZERO IN THE FUTURE.
IN OTHER WORDS, WE CANNOT REJECT THE NULL HYPOTHESIS THAT STATES THAT BETA0 = 0. THIS IS IN LINE WITH THE MARKET EFFICIENCY HYPOTHESIS, WHICH PREDICTS THAT BETA0 WILL NOT BE SIGNIFICANTLY DIFFERENT THAN ZERO FOR ANY STOCK WITHIN A FINANCIAL MARKET.
THE t VALUE IS LESS THAN 2. REMEMBER THAT THE t-VALUE IS THE DISTANCE FROM THE BETA0 COEFFICIENT TO THE ZERO MEASURED IN STANDARD DEVIATIONS OF BETA0. THEN, IF t-VALUE < 2, THIS MEANS THAT THE DISTANCE OF BETA0 FROM THE ZERO IS NOT ENOUGH TO SAY THAT IT WILL BE POSITIVE 95% OF THE TIME.
REGARDING BETA1:
BETA1 IS 1.0833 . REMEMBER THAT BETA1 IN THE CAPM REPRESENTS THE SENSITIVITY OF THE STOCK PREMIUM RETURNS WITH RESPECT TO THE MARKET PREMIUM RETURNS.
IN THE CAPM BETA1 ACTUALLY MEASURES TWO IMPORTANT ASPECTS OF THE RELATIONSHIP BETWEEN THE STOCK AND THE MARKET:
THE LINEAR RELATIONSHIP BETWEEN THE STOCK PREMIUM RETURNS AND THE MARKET PREMIUM RETURNS
THE MARKET RISK OF THE STOCK. THIS CAN BE CONCEIVED AS THE SENSITIVITY OF THE STOCK PREMIUM RETURN WHEN THE MARKET PREMIUM RETURN CHANGES IN 1%.
BET1 IS ACTUALLY THE THE SLOPE (INCLINATION) OF THE REGRESSION LINE.
THEN, THE VALUE ESTIMATED FOR BETA1 FOR Apple IS ACTUALLY THE AVERAGE VALUE OF BETA1. THEN, ON AVERAGE IT IS POSITIVE AND IT IS SLIGHTLY GREATER THAN 1.
HOWEVER, IS BETA1 SIGNIFICANTLY POSITIVE? IN OTHER WORDS, IS THE STOCK PREMIUM RETURN LINEALY AND POSITIVELY RELATED TO THE MARKET PREMIUM RETURN? IN THE FUTURE, IS IT PROBABLE THAT BETA1 WILL KEEP BEING POSITIVE 95% OF THE TIME?
THE OTHER INTERESTING QUESTION FOR BETA1 IS:
IS BETA1 SIGNIFICANTLY GREATER THAN 1? IN OTHER WORDS, IN THE FUTURE, IS IT PROBABLE THAT BETA1 WILL KEEP GREATER THAN 1 95% OF THE TIME? SINCE BETA1 REPRESENTS MARKET RISK OF THE STOCK, WE CAN ASK: IS APPLE SIGNIFICANTLY RISKIER THAN THE MARKET?
WE CAN RESPOND THE FIRST QUESTION - IS THE STOCK PREMIUM RETURN RELATED TO THE MARKET PREMIUM RETURN (OR WHETHER BETA1 IS SIGNIFICANTLY POSITIVE)? - WITH ANY OF THE FOLLOWING:
| PARAMETER | RULE OF THUMB FOR SIGNIFICANCE (95% CONFIDENCE) |
|---|---|
| t-VALUE | IF |t-VALUE| > 2 |
| P-VALUE | IF |P-VALUE|<0.05 |
| 95% CONFIDENCE INTERVAL | IF THE INTERVAL DOES NOT CONTAINS THE NUMBER ZERO |
ACCORDING TO THE 95% CONFIDENCE INTERVAL, IN THE FUTURE BETA1 CAN MOVE FROM 0.7717 TO 1.3949 WITH A PROBABILITY OF 0.95. THIS MEANS THAT, IT IS SIGNIFICANTLY POSITIVE AT THE 95% CONFIDENCE INTERVAL. IN OTHER WORDS, WITH A PROBABILITY OF 0.95, IN THE FUTURE, APPLE PREMIUM RETURNS WILL BE POSITIVELY RELATED TO THE MARKET PREMIUM RETURNS.
SINCE BETA1 CAN MOVE FROM A POSITIVE NUMBER TO ANOTHER POSITIVE NUMBER, ITS PVALUE IS LESS THAN 0.05 (0). THE PVALUE IS THE PROBABILITY OF MAKING A MISTAKE IF WE REJECT THE NULL HYPOTHESIS, WHICH STATES THAT BETA1=0. IN OTHER WORDS, (1-PVALUE) WILL BE THE PROBABILITY THAT WE WILL BE CORRECT IF WE REJECT THE NULL HYPOTHESIS AND ACCEPT THE ALTERNATIVE HYPOTHESIS THAT STATES THAT BETA1 IS GREATER THAN ZERO. IN THIS CASE, WE HAVE A PROBABILITY OF 0.0892 IF WE SAY THAT THE BETA1 OF APPLE WILL BE POSITIVE IN THE FUTURE.
THE t VALUE IS GREATER THAN 2. REMEMBER THAT THE t-VALUE IS THE DISTANCE FROM THE BETA1 COEFFICIENT TO THE ZERO MEASURED IN STANDARD DEVIATIONS OF BETA1. THEN, IF t-VALUE < 2, THIS MEANS THAT THE DISTANCE OF BETA1 FROM THE ZERO IS ENOUGH TO SAY THAT IT WILL BE POSITIVE 95% OF THE TIME.
THE SECOND QUESTION ASKS WHETHER BETA1 IS SIGNIFICANTLY GREATER THAN ONE. WE CAN RESPOND THIS QUESTION WITH ANY OF THE FOLLOWING:
| PARAMETER | RULE OF THUMB FOR SIGNIFICANCE (95% CONFIDENCE) |
|---|---|
| t-VALUE WITH H0: B1=1 | IF |t-VALUE| > 2 |
| 95% CONFIDENCE INTERVAL | IF THE INTERVAL DOES NOT CONTAINS THE NUMBER ONE |
WE CAN RESPOND THIS QUESTION WITH THE 95% CONFIDENCE INTERVAL, BUT NOT WITH THE p-VALUE NOR THE t-VALUE CALCULATED IN THE REGRESSION!
IN THIS CASE, SINCE THE 95% CONFIDENCE INTERVAL GOES FROM A NUMBER LESS THAN 1 (1 IS CONTAINED IN THE 95% C.I.), THEN WE CAN SAY THAT APPLE WILL NOT BE SIGNIFICANTLY RISKIER THAN THE MARKET AT 95% CONFIDENCE.
(b) ACCORDING TO THE EFFICIENT MARKET HYPOTHESIS, WHAT IS THE EXPECTED VALUE OF b0 in the CAPM REGRESSION MODEL?
ACCORDING TO THE EFFICIENT MARKET HYPOTHESIS, THE EXPECTED VALUE OF BETAO IS ZERO SINCE THE MARKET EFFICIENT HYPOTHESIS STATES THAT THE MARKET IS THE MOST EFFICIENT PORTFOLIO, SO THE MARKET SYSTEMATICALLY OUTPERFORMS ANY INDIVIDUAL STOCK. THEN, FOR ANY STOCK BETA0 SHOULD NOT BE SIGNIFICANTLY POSITIVE.
IN REAL FINANCIAL MARKETS THERE ARE VERY FEW STOCKS THAT IN SOME PERIODS SYSTEMATICALLY OUTPERFORMS THE MARKET. HOWEVER, IT IS COMMON TO SEE THAT THIS IS JUST A TIME WINDOW THAT SOONER OR LATER DISAPEARS.
(c) ACCORDING TO YOUR RESULTS, IS APPLE SIGNIFICANTLY RISKIER THAN THE MARKET ? WHAT IS THE t-test YOU NEED TO DO TO RESPOND THIS QUESTION? Do the test and provide your interpretation. (Hint: Here you have to change the null hypothesis for b1: H0: b1=1; Ha=b1<>1)
AS I MENTIONED EARLIER, THE 95% CONFIDENCE INTERVAL FOR APPLE STARTS IN A NUMBER LESS THAN +1.0, SO APPLE IS NOT SIGNIFICANTLY RISKIER THAN THE MARKET AT THE 95% CONFIDENCE INTERVAL.
ANOTHER WAY TO RESPOND TO THIS QUESTION IS BY DOING THE FOLLOWING HYPOTHESIS TEST:
H0: BETA1 = 1 (THE STOCK IS EQUALLY RISY THAN THE MARKET)
HA: BETA1 > 1 (THE STOCK IS RISKIER THAN THE MARKET)
THEN, THE t-Value of this test will be:
t-Value = (1.0833 - 1 ) / 0.1557 = 0.5348
SINCE THE ABSOLUTE VALUE OF tValue IS LESS THAN 2, THEN I CANNOT REJECT the NULL HYPOTHESIS AT THE 95% CONFIDENCE. HOWEVER, BY LOOKING AT THE 95% CONFIDENCE INTERVAL, BETA1 WILL BE GREATER THAN 1 MOST OF THE TIME (BUT NOT 95% OF THE TIME). WITH THIS tValue, WE CAN CALCULATE A CORRESPONDING p-VALUE WITH THE FOLLOWING CODE:
from scipy.stats import t
tvalueb1 = (b1 - 1) / seb1
df = mkmodel.df_resid
# df is the degrees of freedom, which is equal to the # of obs minus 2 since I am estimating 2 betas
pvalueb1 = 2 * t.sf(abs(tvalueb1), df)
# I calcualte the 2-tailed pValue, which is more conservative than the 1-tailed pvalue
print("Two-tailed p-value:", pvalueb1)Two-tailed p-value: 0.594789124574308
THEN, IN THIS CASE THE PVALUE IS ABOUT 59%, SO WE WILL BE WRONG WITH A PROBABILITY OF 59% IF WE ACCEPT THAT APPLE IS MORE RISKY THAN THE MARKET. IN OTHER WORDS, WE CANNOT REJECT THE NULL HYPOTHESIS, SO WE HAVE TO KEEP THE HYPOTHESIS THAT APPLE IS EQUALLY RISKY THAN THE MARKET.