Learn R Programming

SharpeR (version 1.3.0)

sm_vcov: Compute variance covariance of 'Unified' Second Moment

Description

Computes the variance covariance matrix of sample mean and second moment.

Usage

sm_vcov(X,vcov.func=vcov,fit.intercept=TRUE)

Arguments

X

an \(n \times p\) matrix of observed returns.

vcov.func

a function which takes an object of class lm, and computes a variance-covariance matrix. If equal to the string "normal", we assume multivariate normal returns.

fit.intercept

a boolean controlling whether we add a column of ones to the data, or fit the raw uncentered second moment.

Value

a list containing the following components:

mu

a \(q = p(p+3)/2\) vector of the mean, then the vech'd second moment of the sample data

Ohat

the \(q \times q\) estimated variance covariance matrix. Only the informative part is returned: one may assume a row and column of zeros in the upper left.

n

the number of rows in X.

p

the number of assets.

Details

Given \(p\)-vector \(x\), the 'unified' sample is the \(p(p+3)/2\) vector of \(x\) stacked on top of \(\mbox{vech}(x x^{\top})\). Given \(n\) contemporaneous observations of \(p\)-vectors, stacked as rows in the \(n \times p\) matrix \(X\), this function computes the mean and the variance-covariance matrix of the 'unified' sample.

One may use the default method for computing covariance, via the vcov function, or via a 'fancy' estimator, like sandwich:vcovHAC, sandwich:vcovHC, etc.

References

Pav, S. E. "Asymptotic Distribution of the Markowitz Portfolio." 2013 https://arxiv.org/abs/1312.0557

See Also

ism_vcov, sr_vcov

Examples

Run this code
# NOT RUN {
X <- matrix(rnorm(1000*3),ncol=3)
Sigmas <- sm_vcov(X)
Sigmas.n <- sm_vcov(X,vcov.func="normal")
Sigmas.n <- sm_vcov(X,fit.intercept=FALSE)

# make it fat tailed:
X <- matrix(rt(1000*3,df=5),ncol=3)
Sigmas <- sm_vcov(X)
# }
# NOT RUN {
if (require(sandwich)) {
 Sigmas <- sm_vcov(X,vcov.func=vcovHC)
}
# }
# NOT RUN {
# add some autocorrelation to X
Xf <- filter(X,c(0.2),"recursive")
colnames(Xf) <- colnames(X)
Sigmas <- sm_vcov(Xf)
# }
# NOT RUN {
if (require(sandwich)) {
Sigmas <- sm_vcov(Xf,vcov.func=vcovHAC)
}
# }
# NOT RUN {
# }

Run the code above in your browser using DataLab