Path: blob/master/sandbox/paper_analysis/insample/coskewkurtosis.R
1433 views
1vech <- function (x)2{3t(x[!upper.tri(x)])4}56fm2 = function(u){7return( mean(u^2))8}9fm3 = function(u){10return( mean(u^3))11}12fm4 = function(u){13return( mean(u^4))14}15fm6 = function(u){16return( mean(u^6))17}1819# U = matrix( rnorm(400) , ncol = 4 )20coskewCC = function( U ){21# Implementation for N >= 322# The coskewness matrix is based on stacking subcomoment matrices columnwise23# Advantage: matrix notation:24# M3 = E[ UU' %x% U ]: [U[1]%*%UU' | U[2]%*%UU' | ... | U[N]%*%UU' ]25# element [j,(i-1)N+k] is E[U[i]*U[j]*U[k]]26# U needs to be a TxN matrix holding the centred returns of asset i in column i27# N rows, N^3 columns28# See Martellini and Ziemann (Review of Financial Studies)2930N = ncol(U); T = nrow(U);31vm2 = apply(U , 2 , 'fm2' )32vm3 = apply(U , 2 , 'fm3' )33vm4 = apply(U , 2 , 'fm4' )3435vr2 = c();36for( j in 2:N ){37for( i in 1:(j-1) ){38vr2 = c( vr2 , sum( U[,i]^2*U[,j] )/sqrt( vm4[i]*vm2[j] ) )39}40}41r2 = sum(vr2)*2/( T*N*(N-1) )4243vr5 = c();44for( j in 2:N ){45for( i in 1:(j-1) ){46vr5 = c( vr5 , sum( U[,i]^2*U[,j]^2 )/sqrt( vm4[i]*vm4[j] ) )47}48}49r5 = sum(vr5)*2/( T*N*(N-1) )5051vr4 = c();52for( k in 3:N ){53for( j in 2:(k-1) ){54for( i in 1:(j-1) ){55#vr4 = c( vr4 , sum( U[,i]*U[,j]*U[,k] )/sqrt( vm2[k]*r5*sqrt(vm4[i]*vm4[j]) ) )56denom = mean(57c(vm2[k]*r5*sqrt( vm4[i]*vm4[j] ) , vm2[i]*r5*sqrt( vm4[j]*vm4[k] ) , vm2[j]*r5*sqrt( vm4[i]*vm4[k] ) ) )58vr4 = c( vr4 , sum( U[,i]*U[,j]*U[,k] )/sqrt( denom ) )59}60}61}62r4 = sum(vr4)*6/( T*N*(N-1)*(N-2) )63646566M3CC = matrix( rep(0,N^3) , nrow = N )67for( i in 1:N ){68for( j in 1:N ){69for( k in 1:N ){70if( (i==j) & (j==k) & (i==k) ){71sijk = vm3[i]72}else{73if( (i==j) | (i==k) | (j==k) ){74if( (i==j) ){ sijk = r2*sqrt( vm4[i]*vm2[k] )}75if( (i==k) ){ sijk = r2*sqrt( vm4[i]*vm2[j] )}76if( (j==k) ){ sijk = r2*sqrt( vm4[j]*vm2[i] )}77}else{78# sijk = r4*sqrt( vm2[k]*r5*sqrt( vm4[i]*vm4[j] ) )79sijk_all = r4*sqrt(80mean(81c(vm2[k]*r5*sqrt( vm4[i]*vm4[j] ) , vm2[i]*r5*sqrt( vm4[j]*vm4[k] ) , vm2[j]*r5*sqrt( vm4[i]*vm4[k] ) ) ))82sijk = sijk_all83}84}85# i denotes the subcomoment matrix86M3CC[j,(i-1)*N+k] = sijk;87}88}89}90return(M3CC)91}9293# cokurtCC(U)94cokurtCC = function( U ){95# Implementation for N >=496# The coskewness matrix is based on stacking subcomoment matrices columnwise97# Advantage: matrix notation98# M4 = E[ UU' %x% U %x% U ]:99#[ U[1]^2%*%UU'| U[1]U[2]%*%UU' | .... | U[1]U[N]%*%UU'|100# U[2]U[1]%*%UU'| U[2]^2%*%UU' | .... | U[2]U[N]%*%UU'|101# ...102# U[N]U[1]%*%UU'| U[N]U[2]%*%UU' | .... | U[N]^2%*%UU ]103# element [k,( (i-1)*(N^2)+(j-1)*N+l )] is E[ U[i]*U[j]*U[k]*U[l] ]104# U needs to be a TxN matrix holding the centred returns of asset i in column i105# N rows, N^4 columns106# See Martellini and Ziemann (Review of Financial Studies)107108N = ncol(U); T = nrow(U);109vm2 = apply(U , 2 , 'fm2' )110vm3 = apply(U , 2 , 'fm3' )111vm4 = apply(U , 2 , 'fm4' )112vm6 = apply(U , 2 , 'fm6' )113114vr3 = c();115for( j in 2:N ){116for( i in 1:(j-1) ){117vr3 = c( vr3 , sum( U[,i]^3*U[,j] )/sqrt( vm6[i]*vm2[j] ) )118}119}120r3 = sum(vr3)*2/( T*N*(N-1) )121122123vr5 = c();124for( j in 2:N ){125for( i in 1:(j-1) ){126vr5 = c( vr5 , sum( U[,i]^2*U[,j]^2 )/sqrt( vm4[i]*vm4[j] ) )127}128}129r5 = sum(vr5)*2/( T*N*(N-1) )130131vr6 = c();132for( k in 3:N ){133for( j in 2:(k-1) ){134for( i in 1:(j-1) ){135vr6 = c( vr6 , sum( U[,i]^2*U[,j]*U[,k] )/sqrt( vm4[i]*r5*sqrt(vm4[j]*vm4[k]) ) )136}137}138}139r6 = sum(vr6)*6/( T*N*(N-1)*(N-2) )140141vr7 = c();142for( l in 4:N ){143for( k in 3:(l-1) ){144for( j in 2:(k-1) ){145for( i in 1:(j-1) ){146vr7 = c( vr7 , sum( U[,i]*U[,j]*U[,k]*U[,l] )/sqrt( r5*sqrt(vm4[i]*vm4[j])*r5*sqrt(vm4[k]*vm4[l]) ) )147}148}149}150}151r7 = sum(vr7)*24/( T*N*(N-1)*(N-2)*(N-3) )152153M4CC = matrix( rep(0,N^4) , nrow = N )154for( i in 1:N ){155for( j in 1:N ){156for( k in 1:N ){157for( l in 1:N ){158# in the general case: i, j , k and l are all different159kijkl = r7*sqrt( r5*sqrt(vm4[i]*vm4[j])*r5*sqrt(vm4[k]*vm4[l]) )160# if at least one of them are equal:161162if( (i==j) | (i==k) | (i==l) | (j==k) | (j==l) | (k==l) ){163164if( (i==j) & (i==k) & (i==l) ){165# These are the kurtosis estimates of the individual assets: E[u^4]166kijkl = vm4[i];167}else{168if( ((i==j) & (i==k)) | ((i==j) & (i==l)) | ((i==k) & (i==l)) | ((j==k) & (j==l)) ){169# kiij E[ U[,i]^3*U[,j] ] = r3*sqrt( vm6[i]*vm2[j] )170if( ((i==j) & (i==k)) ){ kijkl = r3*sqrt( vm6[i]*vm2[l] ) }171if( ((i==j) & (i==l)) ){ kijkl = r3*sqrt( vm6[i]*vm2[k] ) }172if( ((i==k) & (i==l)) ){ kijkl = r3*sqrt( vm6[i]*vm2[j] ) }173if( ((j==k) & (j==l)) ){ kijkl = r3*sqrt( vm6[j]*vm2[i] ) }174}else{175if( ((i==j) & (k==l))| ( (i==k) & (j==l) ) | ( (i==l) & (j==k)) ){176# kiijj = E[ U[,i]^2*U[,j]^2 ] = r5*sqrt( vm4[i]*vm4[j] )177if ( ((i==j) & (k==l)) ){ kijkl = r5*sqrt( vm4[i]*vm4[k] ) }178if ( ((i==k) & (j==l)) ){ kijkl = r5*sqrt( vm4[i]*vm4[j] ) }179if ( ((i==l) & (j==k)) ){ kijkl = r5*sqrt( vm4[i]*vm4[j] ) }180}else{181# kiijk = E[ U[,i]^2*U[,j]*U[,k] ] = r6*sqrt( vm4[i]*r5*sqrt( vm4[j]*vm4[k] ) )182if ( (i==j) ){ kijkl = r6*sqrt( vm4[i]*r5*sqrt(vm4[k]*vm4[l]) ) }183if ( (i==k) ){ kijkl = r6*sqrt( vm4[i]*r5*sqrt(vm4[j]*vm4[l]) ) }184if ( (i==l) ){ kijkl = r6*sqrt( vm4[i]*r5*sqrt(vm4[j]*vm4[k]) ) }185if ( (j==k) ){ kijkl = r6*sqrt( vm4[j]*r5*sqrt(vm4[i]*vm4[l]) ) }186if ( (j==l) ){ kijkl = r6*sqrt( vm4[j]*r5*sqrt(vm4[i]*vm4[k]) ) }187if ( (k==l) ){ kijkl = r6*sqrt( vm4[k]*r5*sqrt(vm4[i]*vm4[j]) ) }188}189}190}191}192M4CC[k,( (i-1)*(N^2)+(j-1)*N+l )] = kijkl;193}#loop l194}#loop k195}#loop j196}#loop i197return(M4CC)198}199200201202