Estimating Monthly Covariance from Daily Asset Returns
Summary
The document raises a practical question about converting daily asset return data into monthly covariance estimates. Its example uses adjusted closing prices for three equities, groups observations by calendar month, computes percentage changes, converts those changes to log returns, and calculates a covariance matrix within each monthly group. The author asks whether that matrix should be multiplied by the number of observations in the month.
No answer or validation is included, so the document does not establish a recommended scaling rule. The question highlights an important distinction: covariance estimated from daily returns over a month is different from covariance of monthly returns, and time aggregation depends on the return definition and assumptions about dependence across days. The code also calculates a separate matrix for each month rather than directly forming a single long-run monthly estimate. Readers should therefore treat this as an unresolved question, not as a confirmed method.
Key ideas
- The example computes log returns from daily adjusted prices and groups them by calendar month.
- It calculates a separate covariance matrix from the observations within each month.
- The author asks whether multiplying daily covariance by the number of observations gives monthly covariance.
- The document provides no answer, so it does not validate that scaling procedure.
- Return aggregation and dependence across days affect how daily and monthly covariance relate.
Tags
Full text
# finding the monthly covariance matrix given daily covariance matrix
# finding the monthly covariance matrix given daily covariance matrix
consider the following problem i am trying to find the monthly covariance matrix given daily data. i have the following codeimport datetime
```
import pandas as pd
import yfinance as yf
import numpy as np
tickers = ['AAPL', 'AMZN', 'XOM']
start_date1 = datetime.date(2010, 1, 2)
end_date1 = datetime.date(2019, 12, 31)
daily_data1 = yf.download(tickers, start=start_date1, end=end_date1) # definere datasættet
daily_data1 = daily_data1['Adj Close'].dropna()
frames = [v for _, v in daily_data1.groupby(pd.Grouper(freq='M'))]
for month in frames:
cov_matrix = (month.pct_change().apply(lambda x: np.log(1 + x)).cov())
```
so i think i would multiply the cov_matrix with the length of the given month by i am unsure if its that easy so multiply the cov_matrix*len(month)? if someone could confirm it. Thanks in advanceShown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.