| Title: | Factor Copula Models | 
| Version: | 0.1.0 | 
| Description: | Inference methods for factor copula models for continuous data in Krupskii and Joe (2013) <doi:10.1016/j.jmva.2013.05.001>, Krupskii and Joe (2015) <doi:10.1016/j.jmva.2014.11.002>, Fan and Joe (2024) <doi:10.1016/j.jmva.2023.105263>, one factor truncated vine models in Joe (2018) <doi:10.1002/cjs.11481>, and Gaussian oblique factor models. Functions for computing tail-weighted dependence measures in Lee, Joe and Krupskii (2018) <doi:10.1080/10485252.2017.1407414> and estimating tail dependence parameter. | 
| License: | GPL-3 | 
| Imports: | cubature, igraph, VineCopula | 
| Encoding: | UTF-8 | 
| LazyData: | true | 
| NeedsCompilation: | yes | 
| Packaged: | 2025-10-25 06:04:23 UTC; krups | 
| Author: | Harry Joe [aut], Pavel Krupskii [aut, cre], Xinyao Fan [aut], Allan Macleod [cph], Robert Gentleman [cph], Ross Ihaka [cph] | 
| Maintainer: | Pavel Krupskii <pavel.krupskiy@unimelb.edu.au> | 
| Depends: | R (≥ 3.5.0) | 
| Repository: | CRAN | 
| Date/Publication: | 2025-10-29 20:00:11 UTC | 
GARCH-filtered log returns for Dow Jones stocks 2014-2016
Description
R workspace file with GARCH-filtered log returns for Dow Jones stocks 2014-2016
Three objects:
1. dj1416gf is a list with $filter, $uscore $zscore $uscmodel $zscmodel $sigmat $coefficient; dimensions of matrices $uscore, $zscore are 764 x 30 (n x d).
filter: GARCH filtered data nxd, before transform
uscore: empirical uniform scores (nxd)
zscore: empirical normal scores (nxd)
uscmodel: model-based uniform scores (nxd) from the GARCH fit
zscmodel: model-based normal scores (nxd) from the GARCH fit
sigmat: matrix of estimated volatilities (nxd)
coef: matrix of GARCH parameters (6xd or 5xd depending on where AR(1) was used for GARCH model; the parameters are mu, (ar1), omega, alpha1, beta1, shape.
2. dateindex is an object with the dates for the rows of $uscore, $zscore
3. lab is an object with the ticker names for the 30 stocks in dj1416gf
Usage
data(DJ20142016gf)
compute correlation matrix from 2-truncated R-vine
Description
compute correlation matrix from 2-truncated R-vine
Usage
RVtrunc2cor(RVobj)
Arguments
| RVobj | R-vine object with vine array and partial correlation matrix variable 1 is the latent variable; list with $Varray (d+1)x(d+1), $PCor 2x(d+1) | 
Details
not exported
Value
correlation matrix for 2-truncated vine structure based on partial correlations in tree 2
BB1 copula parameter (theta,delta) to tail dependence parameters
Description
BB1 copula parameter (theta,delta) to tail dependence parameters
Usage
bb1_cpar2td(cpar)
Arguments
| cpar | copula parameter with theta>0, delta>1 (vector of length 2) or mx2 matrix with columns for theta and delta | 
Value
vector or matrix with lower and upper tail dependence
Examples
cpar = matrix(c(0.5,1.5,0.8,1.2),byrow=TRUE,ncol=2)
bb1_cpar2td(cpar)
BB1, given 0<tau<1, find theta and delta with lower tail dependence equal upper tail dependence
Description
BB1, given 0<tau<1, find theta and delta with equal lower/upper tail dependence
Usage
bb1_tau2eqtd(tau,destart=1.5,mxiter=30,eps=1.e-6,iprint=FALSE)
Arguments
| tau | Kendall tau value | 
| destart | starting point for delta | 
| mxiter | maximum number of iterations | 
| eps | tolerance for convergence | 
| iprint | print flag for iterations | 
Value
copula parameter (theta,delta) with ltd=utd given tau
Examples
bb1_tau2eqtd(c(0.1,0.2,0.5))
BB1 tail dependence parameters to copula parameter (theta,delta)
Description
BB1 map (lower,upper) tail dependence to copula parameter vector
Usage
bb1_td2cpar(taildep)  
Arguments
| taildep | tail dependence parameter in mx2 matrix, by row (ltd,utd) in (0,1)^2 | 
Value
matrix of copula parameters, by row (theta,delta), theta>0, delta>1
Examples
cpar = bb1_td2cpar(c(0.4,0.6))
print(cpar)
#         theta    delta
#[1,] 0.3672112 2.060043
print(bb1_cpar2td(cpar))
Bi-factor partial correlations to correlation matrix
Description
Bi-factor partial correlations to correlation matrix, determinant, inverse
Usage
bifactor2cor(grsize,rh1,rh2)
Arguments
| grsize | vector with group sizes: d_1,d_2,...,d_G for G groups | 
| rh1 | vector of length sum(grsize) of correlation with global latent variable, ordered by group index | 
| rh2 | vector of length sum(grsize) of partial correlation with group latent variable given global | 
Value
list with Rmat = correlation matrix; det = det(Rmat); Rinv = solve(Rmat)
Examples
grsize = c(5,5,3) 
d = sum(grsize)
bifpar = c(0.84,0.63,0.58,0.78,0.79, 0.87,0.80,0.74,0.71,0.57, 0.83,0.77,0.80,
0.67,0.58,0.15,0.70,0.47,   0.32,0.27,0.73,0.19,0.12,   0.35,0.23,0.53)
bifobj = bifactor2cor(grsize,bifpar[1:d],bifpar[(d+1):(2*d)])
rmat = bifobj$Rmat
print(det(rmat)-bifobj$det)
print(max(abs(solve(rmat)-bifobj$Rinv)))
bifobj2 = bifactor2cor_v2(grsize,bifpar[1:d],bifpar[(d+1):(2*d)])
rmat2 = bifobj2$Rmat
print(det(rmat2)-bifobj2$det)
print(max(abs(solve(rmat2)-bifobj2$Rinv)))
Bi-factor partial correlations to correlation matrix version 2, using the inverse and determinant of a smaller matrix
Description
Bi-factor partial correlations to correlation matrix, determinant, inverse
Usage
bifactor2cor_v2(grsize,rh1,rh2)
Arguments
| grsize | vector with group sizes: d_1,d_2,...,d_G for G groups | 
| rh1 | vector of length sum(grsize) of correlation with global latent variable, ordered by group index | 
| rh2 | vector of length sum(grsize) of partial correlation with group latent variable given global | 
Value
list with Rmat = correlation matrix; det = det(Rmat); Rinv = solve(Rmat)
Examples
# see examples for bifactor2cor()
Sequential parameter estimation for bi-factor copula with estimated latent variables using VineCopula::BiCopSelect
Description
Sequential parameter estimation for bi-factor copula with estimated latent variables
Usage
bifactorEstWithProxy(udata,vglobal,vgroup,grsize, 
  famset_global, famset_group, iprint=FALSE)
Arguments
| udata | nxd matrix with values in (0,1) | 
| vglobal | n-vector is estimated global latent variables (or test with known values) | 
| vgroup | n*mgrp matrix with estimated group-based latent variables | 
| grsize | G-vector with group sizes with mgrp=G=length(grsize)groups | 
| famset_global | codes for allowable copula families for d global linking copulas | 
| famset_group | codes for allowable copula families for d global linking copulas VineCopula: current choices to cover a range of tail behavior are: 1 = Gaussian/normal; 2 = t; 4 = Gumbel; 5 = Frank; 7 = BB1; 10 = BB8; 14 = survival Gumbel; 17 = survival BB1; 20 = survival BB8. | 
| iprint | if TRUE print intermediate results | 
Details
It is best if variables have been oriented to be positively related to the latent variable
Value
list with fam = 2*d vector of family codes chosen via BiCopSelect;dx2 matrix global_par; dx2 matrix group_par; these contain par,par2 for the selected copula families in the 2-truncated vine rooted at the latent variables.
References
1. Krupskii P and Joe H (2013). Factor copula models for multivariate data. Journal of Multivariate Analysis, 120, 85-101. 2. Fan X and Joe H (2024). High-dimensional factor copula models with estimation of latent variables Journal of Multivariate Analysis, 201, 105263.
Examples
# BB1/Frank bi-factor copula
set.seed(2024)
th1_range = c(0.3,1)
th2_range = c(1.1,2.5)
th3_range = c(8.5,18.5)
grsize = rep(10,3)
mgrp = length(grsize)
d = sum(grsize)
parbi = c(runif(d,th1_range[1],th1_range[2]),  # BB1 theta
runif(d,th2_range[1],th2_range[2]),  # BB1 delta
runif(d,th3_range[1],th3_range[2]))  # Frank
n = 500
data = rbifactor(n,grsize=grsize,cop=7,parbi)
udata = data$data
vlat = cbind(data$v0,data$vg)
fam_true = c(rep(7,d),rep(5,d))
#
guess = c(rep(0.7,d),rep(0.5,d)) 
bif_obj = bifactorScore(udata, start=guess, grsize, prlev=1)
proxy_init = bif_obj$proxies
# selection of linking copula families and estimation of their parameters 
select1 = bifactorEstWithProxy(udata,proxy_init[,1],proxy_init[,-1], grsize, 
famset_global=c(1,4,5,7,10,17,20), famset_group=c(1,2,4,5))
fam1 = select1$fam
parglo1 = select1$global_par
pargrp1 = select1$group_par
print(fam1)  # 7,17,1 for global; 5 for group
print(parglo1)
print(pargrp1)
plot(parbi[(2*d+1):(3*d)],pargrp1[,1])
cor(parbi[(2*d+1):(3*d)],pargrp1[,1])
#
condExpProxy = latentUpdateBifactor(udata=udata, cparvec=c(parglo1,pargrp1),
grsize=grsize, family=fam1, nq=25)
proxy_improved = cbind(condExpProxy$v0, condExpProxy$vg)
par(mfrow=c(2,2))
for(j in 1:(mgrp+1))
{ plot(proxy_improved[,j],vlat[,j])
  print(cor(proxy_improved[,j],vlat[,j]))
}
rmse_values = sapply(1:ncol(proxy_improved),
function(i) sqrt(mean((proxy_improved[,i] - vlat[,i])^2)))
round(rmse_values,3)
#
# With improved proxies,
# selection of linking copula families and estimation of their parameters 
select2 = bifactorEstWithProxy(udata,proxy_improved[,1],proxy_improved[,-1],
grsize, famset_global=c(1,4,5,7,10,17,20), famset_group=c(1,2,4,5))
parglo2=select2$global_par
pargrp2=select2$group_par
fam2 = select2$fam  # 7,17 for global; 5 for local
cbind(fam_true,fam1,fam2)  
plot(parbi[(2*d+1):(3*d)],pargrp2[,1])
cor(parbi[(2*d+1):(3*d)],pargrp2[,1]) # higher correlation than pargrp1
Proxies for bi-factor copula model based on Gaussian bi-factor score
Description
Proxies (in (0,1)) for bi-factor copula model based on Gaussian bi-factor score
Usage
bifactorScore(udata, start, grsize, prlev=1)
Arguments
| udata | nxd matrix in (0,1); n is sample size, d is dimension | 
| start | starting values for fitting the bi-factor Gaussian model | 
| grsize | G-vector with group sizes with G groups | 
| prlev | printlevel in call to nlm | 
Value
list with Aloadmat=estimated loading matrix after N(0,1) transform; proxies = nx(G+1) matrix with stage 1 proxies for the latent variables (for global latent in column 1, and then for group latent); weight = weight matrix based on the correlation matrix of normal score and the loading matrix.
Examples
#See example in bifactorEstWithProxy()
Gaussian bi-factor structure correlation matrix
Description
Gaussian bi-factor structure correlation matrix with quasi-Newton
Usage
bifactor_fa(grsize,start,data=1,cormat=NULL,n=100,prlevel=0,mxiter=100)
Arguments
| grsize | vector of group sizes for bi-factor model | 
| start | starting point should have dimension 2*d | 
| data | nsize x d data set to compute the correlation matrix if correlation matrix (cormat) not given | 
| cormat | dxd empirical correlation matrix | 
| n | sample size | 
| prlevel | print.level for nlm() | 
| mxiter | maximum number of iterations for nlm() | 
Value
a list with$nllk, $parmat= dx2 matrix of correlations and partial correlations
Examples
data(rainstorm)
rmat = rainstorm$cormat
n = nrow(rainstorm$zprecip)
d = ncol(rmat)
grsize = rainstorm$grsize
fa1 = pfactor_fa(1,start=rep(0.8,d),cormat=rmat,n=n,prlevel=1)
fa2 = pfactor_fa(2,start=rep(0.8,2*d),cormat=rmat,n=n,prlevel=1)
st3 = c(rep(0.7,grsize[1]),rep(0.1,d),rep(0.7,grsize[2]),rep(0.1,d),rep(0.7,grsize[3]))
fa3 = pfactor_fa(3,start=st3,cormat=rmat,n=n,prlevel=1)
names(fa3)
loadmat_rotated = fa3$loading
# compare factanal
fa3b = factanal(factors=3,covmat=rmat)
compare = cbind(loadmat_rotated,fa3b$loadings)
print(round(compare,3)) # order of factors is different but interpretation similar
#
bifa = bifactor_fa(grsize,start=c(rep(0.8,d),rep(0.2,d)),cormat=rmat,n=n,prlevel=1)
mgrp = length(grsize)
# oblique factor model is much more parsimonious than bi-factor
obfa = oblique_fa(grsize,start=rep(0.7,d+mgrp), cormat=rmat, n=n, prlevel=1)
#
cat(fa1$nllk, fa2$nllk, fa3$nllk, bifa$nllk, obfa$nllk,"\n")
log-likelihood Gaussian bi-factor structure correlation matrix
Description
log-likelihood Gaussian bi-factor structure correlation matrix
Usage
bifactor_nllk(rhvec,grsize,Robs,nsize)
Arguments
| rhvec | vector of length d*2 for partial correlation representation of loadings, | 
| grsize | vector of group sizes for bi-factor model | 
| Robs | dxd empirical correlation matrix | 
| nsize | sample size | 
Value
negative log-likelihood and gradient for Gaussian bi-factor model
negative log-likelihood of bi-factor structured factor copula and derivatives computed in f90 for input to posDefHessMinb
Description
negative log-likelihood of bi-factor structured factor copula and derivatives
Usage
bifactorcop_nllk(param,dstruct,iprfn=FALSE)
Arguments
| param | parameter vector; parameters for copulas linking U_ij and V_0 go first; parameters for copulas linking U_ij and V_g (j in group g) given V_0 go next. For BB1 linking copulas for the global latent, the order is theta1,..,theta[d],delta1, ...,delta[d]; V_0 is the global latent variable that loads on all variables; V_j is a latent variable that loads only for variables in group j (by group g=1,2,..,mgrp etc) | 
| dstruct | list with data set $data, copula name $copname, $quad is a Gauss-Legendre quadrature object, $repar is a flag for reparametrization (for Gumbel, BB1), $nu is a 2-vector with 2 degree of freedom parameters (for t) $grsize is a vector with group sizes; if dstruct$pdf == 1 the function evaluates nllk only (and returns zero gradient and hessian). Options for copname are: frank, gumbel, gumbelfrank, bb1frank, bb1gumbel, t. | 
| iprfn | indicator for printing of function and gradient (within Newton-Raphson iterations) | 
Value
nllk, grad, hess (gradient and hessian included)
Examples
grsize = c(4,4,3)
d = sum(grsize)
n = 500
mgrp = length(grsize)
par_bi = c(seq(1.4,3.4,0.2),seq(2.0,1.7,-0.1),seq(1.9,1.6,-0.1),rep(1.4,3))
set.seed(333)
udat_obj = rbifactor(n,grsize,cop=4,par_bi)
udat = udat_obj$data
summary(udat_obj$v0)
summary(udat_obj$vg)
zdat = qnorm(udat)
rmat = cor(zdat)
round(rmat,3)
# run bifactor_fa to get bi-factor correlation structure
bifa = bifactor_fa(grsize,start=c(rep(0.8,d),rep(0.2,d)),cormat=rmat,n=n,prlevel=0)
loading1 = bifa$parmat[,1] # correlations
pcor = bifa$parmat[,2] # partial correlations given global latent
pcor2 = pcor;  pcor2[pcor<0]=0.05  # for cases with only positive dependence
# starting values for different cases
# convert loading/pcor to Frank, Gumbel and BB1 parameters etc
# Frank for conditional given global latent can allow for conditional negative dependence
start_frk1 = frank_rhoS2cpar(loading1)
start_frk2 = frank_rhoS2cpar(pcor)
start_frk = c(start_frk1,start_frk2)
start_gum1 = gumbel_rhoS2cpar(loading1)
start_gum2 = gumbel_rhoS2cpar(pcor2)
start_gum = c(start_gum1,start_gum2)
start_tnu = c(loading1,pcor)
tau = bvn_cpar2tau(c(loading1))
# order of BB1 parameters has all thetas and then all deltas (different from 1-factor)
start_bb1 = bb1_tau2eqtd(tau)
start_bb1 = c(start_bb1[,1:2])
start_gumfrk = c(start_gum1,start_frk2)
start_bb1frk = c(start_bb1,start_frk2)
start_bb1gum = c(start_bb1,start_gum2)
#
gl = gaussLegendre(25)
npar = 2*d
dstrfrk = list(data=udat,copname="frank",quad=gl,repar=0,grsize=grsize,pdf=0)
dstrfrk1 = list(data=udat,copname="frank",quad=gl,repar=0,grsize=grsize,pdf=1)
obj1 = bifactorcop_nllk(start_frk,dstrfrk1) # nllk only  
obj = bifactorcop_nllk(start_frk,dstrfrk) # nllk, grad, hess 
print(obj1$fnval)
print(obj$grad)
ml_frk = posDefHessMinb(start_frk,bifactorcop_nllk,ifixed=rep(FALSE,npar),
dstrfrk, LB=rep(-20,npar), UB=rep(30,npar), mxiter=30, eps=5.e-5,iprint=TRUE)
dstrgum = list(data=udat,copname="gumbel",quad=gl,repar=0,grsize=grsize,pdf=0)
ml_gum = posDefHessMinb(start_gum,bifactorcop_nllk,ifixed=rep(FALSE,npar),
dstrgum, LB=rep(1,npar), UB=rep(20,npar), mxiter=30, eps=5.e-5,iprint=TRUE)
dstrgumfrk = list(data=udat,copname="gumbelfrank",quad=gl,repar=0,grsize=grsize,pdf=0)
ml_gumfrk = posDefHessMinb(start_gumfrk,bifactorcop_nllk,ifixed=rep(FALSE,npar),
dstrgumfrk, LB=c(rep(1,d),rep(-20,d)), UB=rep(25,npar), mxiter=30, eps=5.e-5,iprint=TRUE)
dstrtnu = list(data=udat,copname="t",quad=gl,repar=0,grsize=grsize,nu=c(10,20),pdf=0)
# slow because of many qt() calculations
# numerical issues because data does not have both upper and lower taildep
ml_tnu = posDefHessMinb(start_tnu,bifactorcop_nllk,ifixed=rep(FALSE,npar),
dstrtnu, LB=rep(-1,npar), UB=rep(1,npar), mxiter=30, eps=5.e-5,iprint=TRUE)
npar3 = 3*d
dstrbb1frk = list(data=udat,copname="bb1frank",quad=gl,repar=0,grsize=grsize,pdf=0)
ml_bb1frk = posDefHessMinb(start_bb1frk,bifactorcop_nllk,ifixed=rep(FALSE,npar3),
dstrbb1frk, LB=c(rep(0,d),rep(1,d),rep(-20,d)), UB=rep(20,npar3), mxiter=30, eps=5.e-5,iprint=TRUE)
dstrbb1gum = list(data=udat,copname="bb1gumbel",quad=gl,repar=0,grsize=grsize,pdf=0)
ml_bb1gum = posDefHessMinb(start_bb1gum,bifactorcop_nllk,ifixed=rep(FALSE,npar3),
dstrbb1gum, LB=c(rep(0,d),rep(1,2*d)), UB=rep(20,npar3), mxiter=30, eps=5.e-5,iprint=TRUE)
#
cat(ml_frk$fnval,ml_gum$fnval,ml_gumfrk$fnval,ml_tnu$fnval,ml_bb1frk$fnval,ml_bb1gum$fnval,"\n")
# -2256.602 -2574.16 -2509.274 -6793.963 -2514.124 -2581.214
cat(ml_frk$iter, ml_gum$iter, ml_gumfrk$iter, ml_tnu$iter, ml_bb1frk$iter, ml_bb1gum$iter, "\n")
# 5 6 5 23 15 12
# bi-factor t(10)/t(20) failed because some parameters approached the
# upper bound of 1 in which case the numerical integration is inaccurate.
Semi-correlation for bivariate normal/Gaussian distribution
Description
semicorrelation assuming bivariate normal/Gaussian copula
Usage
bvnSemiCor(rho)
Arguments
| rho | correlation in (-1,1) | 
Value
Cor(Z1,Z2| Z1>0,Z2>0) when (Z1,Z2)~bivariate standard normal(rho)
References
Joe (2014), Dependence Modeling with Copulas, Chapman&Hall/CRC; p 71
Kendall's tau for bivariate normal
Description
Kendall's tau for bivariate normal
Usage
bvn_cpar2tau(rho) 
Arguments
| rho | in (-1,1) | 
Value
Kendall's tau = 2*arcsin(rho)/pi
Discrepancy of model-based and observed correlation matrices based on Gaussian log-likelihood
Description
Discrepancy of model-based and observed correlation matrices
Usage
corDis(Rmodel,Rdata,n=0,npar=0)
Arguments
| Rmodel | model-based correlation matrix | 
| Rdata | empirical correlation matrix (could be observed or polychoric) | 
| n | sample size (if positive integer) | 
| npar | #parameters in the correlation structure | 
Value
vector with discrepancy Dfit, and also nllk2 (wice negative log-likelihood), BIC, AIC if n and npar are inputted
Examples
Rmodel = matrix(c(1,.3,.4,.4,.3,1,.5,.6,.4,.5,1,.7,.4,.6,.7,1),4,4)
print(Rmodel); print(chol(Rmodel))
Rdata = matrix(c(1,.32,.38,.41,.32,1,.53,.61,.38,.53,1,.67,.41,.61,.67,1),4,4)
print(corDis(Rmodel,Rdata))
print(corDis(Rmodel,Rdata,n=400,npar=3))
Convert from correlations in vector form to a correlation matrix
Description
Convert from correlations in vector form to a correlation matrix
Usage
corvec2mat(rvec)
Arguments
| rvec | correlations in vector form of length d*(d-1)/2 in the order r12,r13,r23,r14,... r[d-1,d] | 
Value
dxd correlation matrix
Examples
rvec = c(0.3,0.4,0.5,0.4,0.6,0.7)
Rmat = corvec2mat(rvec)
print(Rmat) # column 1 has 1, 0.3, 0.4, 0.4
lower and upper bounds for copula parameters (1-parameter, 2-parameter families)
Description
lower and upper bounds for copula parameters for use in min negative log-likelihood
Usage
cparBounds(familyvec)
Arguments
| familyvec | vector of family codes linking copula families | 
Value
lower bound LB1/LB2 and upper bound LB2/UB2 for par1 and par2
Examples
famvec = c(1,4,5,14,2,7,17,10,20, 4,5,1)
out = cparBounds(famvec)
print(out)
print(out$LB1)
Integrand for 1-factor copula with 1-parameter bivariate linking copula families; or for m-parameter bivariate linking copulas
Description
Integrand for 1-factor copula
Usage
d1factcop(u0,uvec,dcop,param)
Arguments
| u0 | latent variable for integrand | 
| uvec | vector of length d, components in (0,1) | 
| dcop | name of function of bivariate copula density (common for all variables), dcop accepts input of form of d-vector or dxm matrix | 
| param | d-vector or mxd matrix, parameter of dcop | 
Value
integrand for 1-factor copula density
log returns and GARCH-filtered log returns for some Euro markets 2007
Description
Log returns and GARCH filtered values of log returns for OSEAX FTSE AEX FCHI SSMI GDAXI ATX (market indexes in Norway, UK, Holland, France, Switzerland, Germany, Austria). This is a small data set with n=239 that can be used for illustration of functions for fitting vine and factor copulas. The original source is http://quote.yahoo.com
euro07gf has two objects: (i) euro07names has the above labels for the markets and (ii) euro07lr is a list with several matrices given below.
Usage
data(euro07gf) # objects euro07names and euro07gf
Format
The following are components.
- filter
- 239x7 matrix of GARCH filtered returns 
- uscore
- 239x7 matrix of empirical U(0,1) scores of GARCH filtered returns 
- zscore
- 239x7 matrix of empirical normal scores of GARCH filtered returns 
- uscmodel
- 239x7 matrix of U(0,1) scores of GARCH filtered returns based on assuming standardized Student t distributions for the innovations 
- zscmodel
- 239x7 matrix of normal scores of GARCH filtered returns based on assuming standardized Student t distributions for the innovations 
- sigmat
- 239x7 matrix of volatilities 
- coef
- 5x7 matrix of GARCH parameter estimates 
rows are mu, omega, alpha1, beta1, shape, where 'shape' is the shape or degree of freedom parameter for the Student t innovations.
negative log-likelihood with gradient and Hessian computed in f90 for copula from 1-factor/1-truncated vine (tree for residual dependence conditional on a latent variable); models included are BB1 for latent with Frank or Gaussian(bvncop) for truncated vine residual dependence
Description
negative log-likelihood for 1-factor with tree for residual dependence
Usage
factor1trvine_nllk(param,dstruct,iprint=FALSE)
Arguments
| param | parameter vector (length 2*d+(d-1)); BB1 parameters for links of observed variable U_j to latent V, j=1,...,d; Frank or Gaussian parameters for edge_k=(node_k[1],node_k[2]) observed variables nodek[1],nodek[2] given V, k=1,...,d-1, where the d-1 edges form a tree. 2*d BB1 parameters (theta_1,delta_1,...,theta_d,delta_d); d-1 Frank or BVN parameters for residual dependence. | 
| dstruct | list with nxd data set $data on (0,1)^d ; $quad is list with quadrature weights and nodes; $edg1, $edg2 (d-1)-vectors for node labels of edges 1,...,d-1; for the tree for residual dependence; $fam for copula family label, where $fam=1 for Frank copula for residual dependence conditional on latent; $fam=2 for bivariate Gaussian/normal copula. | 
| iprint | indicator for printing of function and gradient | 
Value
nllk, grad, hess (negative log-likelihood, gradient, Hessian at MLE)
References
Joe (2018). Parsimonious graphical dependence models constructed from vines. Canadian Journal of Statistics 46(4), 532-555.
Examples
data(DJ20142016gf)
udat = dj1416gf$uscore
d = ncol(udat)
loadings = c(0.53,0.68,0.68,0.62,0.69,0.58,0.60,0.67,0.73,0.72,
0.64,0.70,0.65,0.69,0.75,0.56,0.56,0.79,0.59,0.66,
0.57,0.60,0.60,0.71,0.57,0.73,0.70,0.56, 0.52,0.61) 
# starting values for BB1 that have roughly dependence of bivariate Gaussian
tau = bvn_cpar2tau(loadings)
par0 = bb1_tau2eqtd(tau)
par0 = par0[,c(1,2)]
par0=c(t(par0))
# from gauss1f1t()
edg1 = c(4,4,4,2,5,10,10,16,9,14,1,3,12,13,8,11,
17,19,4,10,16,16,22,3,4,21,16,23,6)
edg2 = c(6,7,9,10,13,14,15,17,18,19,20,20,20,20,21,21,
21,22,23,23,23,24,25,26,26,27,28,29,30)
pc = c(0.2986594,0.1660604,0.213082,0.2975893,0.2534793,-0.1485211,
0.6179934,0.2207242,0.1877172,0.2625087,0.1414915,-0.1171917,
0.1396517,0.2632831,0.1964068,0.2850865,0.1679997,0.3683564,
-0.1666632,-0.2291848,0.3600637,0.1737616,0.2022859,0.2136862,
0.1948507,0.1731044,0.186075,0.2177455,0.6606208)
# convert above 29 rho parameters from above to Frank parameters with roughly
# the same Spearman rhos, e.g. frank_rhoS2cpar()
print(frank_rhoS2cpar(pc))
parfrk = c(1.87, 1.00, 1.30, 1.86, 1.57, -0.90, 4.67, 1.35, 1.14, 1.63, 
0.85, -0.70, 0.84, 1.63, 1.20, 1.78, 1.02, 2.37, -1.01, -1.41, 
2.30, 1.05, 1.23, 1.31, 1.19, 1.05, 1.13, 1.33, 5.23)
# parameters for tree 1 (latent) and tree 2 (residual dependence)
gl = gaussLegendre(21)
bffxvar = rep(FALSE,d-1) 
ifixed = c(rep(FALSE,2*d),bffxvar)
LB = c(rep(c(0.01,1.01),d),rep(-15,d-1)) 
UB = c(rep(c(10,10),d),rep(20,d-1))
st_bb1frk = c(par0,parfrk)
dstrbb1frk = list(data=udat,quad=gl, edg1=edg1, edg2=edg2, fam=1)
tem_frk = factor1trvine_nllk(st_bb1frk,dstrbb1frk)
print(tem_frk$fnval)
# -6600.042
ml_bb1frk = posDefHessMinb(st_bb1frk, factor1trvine_nllk, ifixed= ifixed, 
dstrbb1frk, LB, UB, mxiter=30, eps=5.e-5, bdd=5, iprint=TRUE)
#1 -6600.042 0.537193 
#2 -6645.547 0.06360556 
#3 -6645.968 0.0008600067 
#4 -6645.968 6.065411e-07
cat("BB1frk: parmin (mle for udata), SEs\n")
print(ml_bb1frk$fnval)
#  -6645.968
print(ml_bb1frk$parmin)
print(sqrt(diag(ml_bb1frk$invh)))
#
dstrbb1gau = list(data=udat,quad=gl, edg1=edg1, edg2=edg2, fam=2)
LB = c(rep(c(0.01,1.01),d),rep(-1,d-1)) 
UB = c(rep(c(10,10),d),rep(1,d-1))
st_bb1gau = c(par0,pc)
tem_gau = factor1trvine_nllk(st_bb1gau,dstrbb1gau)
print(tem_gau$fnval)
# -6587.514
ml_bb1gau = posDefHessMinb(st_bb1gau, factor1trvine_nllk, ifixed= ifixed, 
dstrbb1gau, LB, UB, mxiter=30, eps=5.e-5, bdd=5, iprint=TRUE)
#1 -6587.514 0.1732503 
#2 -6621.988 0.03526498 
#3 -6622.375 0.000806789 
#4 -6622.375 7.05569e-07 
cat("BB1gau: parmin (mle for udata), SEs\n")
print(ml_bb1gau$fnval)
# -6622.375
print(ml_bb1gau$parmin)
print(sqrt(diag(ml_bb1gau$invh)))
Frank: Blomqvist's beta to copula parameter
Description
Frank: Blomqvist's beta to copula parameter, vectorized
Usage
frank_beta2cpar(beta, cpar0=0,mxiter=20,eps=1.e-8,iprint=FALSE)
Arguments
| beta | vector of Blomqvist's beta values, -1<beta<1 | 
| cpar0 | starting point for Newton-Raphson iterations | 
| mxiter | maximum number of iterations, default 20 | 
| eps | tolerance for convergence, default 1.e-8 | 
| iprint | print flag for iterations, default FALSE | 
Details
Solve equation to get cpar given Blomqvist's beta, Newton-Raphson iterations; vectorized input beta is OK, beta=0 fails
Value
vector of Frank copula parameters with the given betas
Examples
b = seq(-0.2,0.5,0.1) 
frank_beta2cpar(b)
frank_beta2cpar(b,iprint=TRUE)
Frank: Spearman rho to copula parameter
Description
Frank: Spearman rho to copula parameter
Usage
frank_rhoS2cpar(rho)
Arguments
| rho | vector of Spearman values, -1<rho<1 | 
Value
vector of Frank copula parameters with the given rho
Examples
rho = seq(-0.2,0.6,0.1)
frank_rhoS2cpar(rho)
Compute correlation matrix according to 1-factor + 1-truncated vine (residual dependence) model
Description
Compute correlation matrix according to a 1-factor + 1-truncated vine (for residual dependence) model
Usage
gauss1f1t(cormat, start_loading, iter=10, est="mle", plots=TRUE, trace=TRUE)
Arguments
| cormat | dxd correlation matrix | 
| start_loading | dx1 loading vector (for latent factor) | 
| iter | number of iterations for modified EM | 
| est | "mle" or "mom" | 
| plots | flag that is TRUE to show plots of EM steps | 
| trace | flag that is TRUE to print every 100th integer for iter | 
Details
A modified EM algorithm is used – first step of the M-step performed either by MLE or by method of moments – the second step assumes the moment estimator has been used
Value
components:loading = final estimate for loading vector; R = correlation matrix (from MLE for 1F1T structure); Psi = vector of residual variances; loadings = matrix where ith row has the ith iteration; Rmats = list of correlation matrices; Rmats[[i]] has the ith iteration; Rstart = starting value of R based on starting values; dists = vector of distance measures as GOF criterion, ith entry for ith iteration; incls = iter x d*(d-1)/2 matrix, ith row for ith iteration columns are whether edge 12, 13, 23, 14, .... (d-1,d) are in residual tree; partcor = dxd matrix of partial correlations given latent variable; loglik = vector of loglik values, ith entry for ith iteration.
References
Brechmann EC and Joe H (2014). Parsimonious parameterization of correlation matrices using truncated vines and factor analysis. Computational Statistics and Data Analysis, 77, 233-251.
Examples
library(igraph)
data(DJ20142016gf)
zdat = dj1416gf$zscore # GARCH-filtered returns that have been transformed to N(0,1)
rzmat = cor(zdat)
d = ncol(zdat)
cat("\n1-factor start for 1f1t\n")
fa = factanal(factors=1,covmat=rzmat)
start = c(fa$loading)
# fitting 1Factor 1Truncated vine residual dependence structure
out1f1t = gauss1f1t(rzmat,start_loading=start,iter=20,plots=FALSE)
print(out1f1t$loading)
cat("\nedges for tree of residual dependence\n")
i = 1:d
nn = i*(i-1)/2
niter = 21  # above iteration bound +1
incls = out1f1t$incls[niter,]
for(j in 2:d)
{ for(k in 1:(j-1)) 
  { if(incls[nn[j-1]+k]) 
    { cat("edge ", k,j," "); cat(out1f1t$partcor[k,j],"\n") } 
  }
}
# extract three columns of this output to use with factor1trvine_nllk
# See example in cop1f1t()
R interface for Gauss-Legendre quadrature
Description
Gauss-Legendre quadrature nodes and weights
Usage
gaussLegendre(nq)
Arguments
| nq | number of quadrature points | 
Details
links to C code translation of jacobi.f in Stroud and Secrest (1966)
Value
structures with
Examples
out = gaussLegendre(15)
# same as statmod::gauss.quad.prob(15,dist="uniform") in library(statmod)
print(sum(out$weights)) # should be 1
print(sum(out$weights*out$nodes)) # should be 0.5  = E(U), U~Uniform(0,1)
print(sum(out$weights*out$nodes^2)) # should be 1/3 = E(U^2)
Gumbel: Blomqvist's beta to copula parameter
Description
Gumbel: Blomqvist's beta to copula parameter, vectorized
Usage
gumbel_beta2cpar(beta)
Arguments
| beta | vector of Blomqvist's beta values, 0<beta<1 | 
Value
vector of Gumbel copula parameters with the given betas
Examples
b = seq(0.1,0.5,0.1)
gumbel_beta2cpar(b)
Gumbel: Spearman rho to copula parameter
Description
Gumbel: Spearman rho to copula parameter
Usage
gumbel_rhoS2cpar(rho)
Arguments
| rho | vector of Spearman values, 0<rho<1 | 
Value
vector of Gumbel copula parameters with the given rho
Examples
rho = seq(0.1,0.5,0.1)
gumbel_rhoS2cpar(rho)
Check if a square symmetric matrix is positive definite
Description
Check if a square symmetric matrix is positive definite
Usage
isPosDef(amat)
Arguments
| amat | symmetric matrix | 
Value
TRUE if amat is positive definite, FALSE otherwise
Examples
a1 = matrix(c(1,.5,.5,1),2,2)
a2 = matrix(c(1,1.5,1.5,1),2,2)
t1 = try(chol(a1))
t2 = try(chol(a2))
print(isPosDef(a1))
print(isPosDef(a2))
Compute new proxies for 1-factor copula based on the mean of observations
Description
Compute new proxies for 1-factor copula for 1-parameter or 2-parameter linking copulas
Usage
latentUpdate1factor(cpar_est,udata,nq,family) 
Arguments
| cpar_est | estimated parameters (based on complete likelihood with latent variables known or estimated) | 
| udata | nxd matrix of data in (0,1) | 
| nq | number of nodes for Gaussian-Legendre quadrature | 
| family | vector of code for d linking copula families (choices 1,2,4,5,7,10,14,17,20) | 
Value
latent_est: proxies as estimates of latent variables
Examples
# See examples in onefactorEstWithProxy()
Compute new proxies for 1-factor copula based on the mean of observations
Description
Compute new proxies for 1-factor copula for 1-parameter linking copulas
Usage
latentUpdate1factor1(cpar_est,udata,nq,family) 
Arguments
| cpar_est | estimated parameters (based on complete likelihood with latent variables known or estimated) | 
| udata | nxd matrix of data in (0,1) | 
| nq | number of nodes for Gaussian-Legendre quadrature | 
| family | vector of code for d linking copula families (choices 1,4,5,14) | 
Value
latent_est: proxies as estimates of latent variables
Examples
# See examples in onefactorEstWithProxy()
Conditional expectation proxies for bi-factor copula models with linking copulas in different copula families
Description
Conditional expectation proxies for bi-factor copula models with linking copulas in different copula families
Usage
latentUpdateBifactor(udata,cparvec,grsize,family, nq)
Arguments
| udata | nxd matrix with valies in (0,1) | 
| cparvec | parameters for linking copulas; order is global_par1, global_par2, local_par1, local_par2 | 
| grsize | group size vector of length mgrp | 
| family | codes for linking copula (VineCopula) | 
| nq | number of Gaussian-Legendre points | 
Value
v0: proxies of the global latent variable andvg: proxies of the local latent variables
Examples
# See example in bifactorEstWithProxy()
max likelihood (min negative log-likelihood) for 1-factor copula model
Description
min negative log-likelihood for 1-factor copula model
Usage
ml1factor(nq,start,udata,dcop,LB=0,UB=1.e2,prlevel=0,mxiter=100)
Arguments
| nq | number of quadrature points | 
| start | starting point (d-vector or m*d vector, e.g. 2*d vector for BB1) | 
| udata | nxd matrix of uniform scores | 
| dcop | name of function for a bivariate copula density (common for all variables) | 
| LB | lower bound on parameters (scalar or same dimension as start) | 
| UB | upper bound on parameters (scalar or same dimension as start) | 
| prlevel | printlevel for nlm() | 
| mxiter | maximum number of iteration for nlm() | 
Value
nlm object with minimum, estimate, hessian at MLE
Examples
# See example in r1factor() 
min negative log-likelihood for 1-factor copula with nlm()
Description
min negative log-likelihood for 1-factor copula with nlm()
Usage
ml1factor_f90(nq,start,udata,copname,LB=0,UB=40,ihess=FALSE,prlevel=0,
  mxiter=100,nu=3)
Arguments
| nq | number of quadrature points | 
| start | starting point (d-vector or m*d vector, e.g. 2*d vector for BB1) | 
| udata | nxd matrix of uniform scores | 
| copname | name of copula family such as "gumbel", "frank", "bb1", "t" (copname common for all variables) | 
| LB | lower bound on parameters (scalar or same dimension as start) | 
| UB | upper bound on parameters (scalar or same dimension as start) | 
| ihess | flag for hessian option in nlm() | 
| prlevel | printlevel for nlm() | 
| mxiter | max number of iterations for nlm() | 
| nu | degree of freedom parameter if copname ="t" | 
Value
MLE as nlm object (estimate, Hessian, SEs, nllk)
Examples
# See example in r1factor() 
min negative log-likelihood for 1-factor copula model (some parameters can be fixed)
Description
min negative log-likelihood (nllk) for 1-factor copula model (some parameters can be fixed)
Usage
ml1factor_v2(nq,start,ifixed,udata,dcop,LB=0,UB=1.e2,prlevel=0,mxiter=100)
Arguments
| nq | number of quadrature points | 
| start | starting point (d-vector or m*d vector, e.g. 2*d vector for BB1) | 
| ifixed | vector of length(param) of True/False, such that ifixed[i]=TRUE iff param[i] is fixed at the given value start[j] | 
| udata | nxd matrix of uniform scores | 
| dcop | name of function for a bivariate copula density (common for all variables) | 
| LB | lower bound on parameters (scalar or same dimension as start) | 
| UB | upper bound on parameters (scalar or same dimension as start) | 
| prlevel | printlevel for nlm() | 
| mxiter | maximum number of iteration for nlm() | 
Value
nlm object with nllk value, estimate, hessian at MLE
MLE for multivariate normal/t with a bi-factor or nested factor correlation structure
Description
MLE for the bi-factor or nested factor structure for multivariate normal/t
Usage
mvtBifact(tdata,start,grsize,df,prlevel=2,model="bifactor",mxiter=100)
Arguments
| tdata | nxd matrix of t-scores or z-scores | 
| start | vector of length 2*d with starting values of partial correlations values for correlations of observed Z_[gj] and common latent V_0 go first, then partial correlations of Z_[gj] and V_g given V_0 (j in group g) | 
| grsize | vector of group sizes for bi-factor model | 
| df | degrees of freedom parameter >0 | 
| prlevel | print.level for nlm() | 
| model | "bifactor" or "nestfactor" nested-factor is reduced model with fewer parameters | 
| mxiter | maximum number of iterations for nlm() | 
Details
Note the minimum nllk can be the same for different parameter vectors if some group size values are 1 or 2.
Value
nlm object with ($code,$estimate,$gradient,$iterations,$minimum)
Examples
data(rainstorm)
udat = rainstorm$uprecip
d = ncol(udat)
grsize = rainstorm$grsize
df = 10
tdata = qt(udat,df)
bif = mvtBifact(tdata, c(rep(0.8,d),rep(0.2,d)), grsize, df=df,
prlevel=1, model="bifactor", mxiter=100)
#
# nested-factor: parameters for group latent linked to global latent
# come in the first tree of the 2-truncated vine.
nestf = mvtBifact(tdata, c(0.7,0.7,0.7,rep(0.85,d)), grsize, df=df,
prlevel=1, model="nestfactor", mxiter=100)
# doesn't converge properly, group2 latent matches global latent
#
st1 = rep(0.7,d)
out1t = mvtPfact(tdata,st1,pfact=1,df=df,prlevel=1)
st2 = rep(0.7,2*d)
out2t = mvtPfact(tdata,st2,pfact=2,df=df,prlevel=1)
st3 = c(rep(0.7,grsize[1]),rep(0.1,d),rep(0.7,grsize[2]),rep(0.1,d),rep(0.7,grsize[3]))
out3t = mvtPfact(tdata,st3,pfact=3,df=df,prlevel=1)
cat(bif$minimum, nestf$minimum, out1t$minimum, out2t$minimum, out3t$minimum,"\n")
negative log-likelihood for the bi-factor Gaussian/t model
Description
negative log-likelihood in the bi-factor Gaussian or t model
Usage
mvtBifact_nllk(rhovec,grsize,tdata,df)
Arguments
| rhovec | vector of length d*2 for partial correlation representation of loadings, first d correlations with common factor, then partial correlations with group factor given common factor | 
| grsize | vector of group sizes for bi-factor model | 
| tdata | nxd data set of scores for t df (e.g., qt(u,df)) | 
| df | degree of freedom parameter (positive) | 
Value
negative log-likelihood (nllk) of copula for mvt bi-factor model
MLE in a MVt model with a p-factor correlation structure
Description
MLE in a MVt model with a p-factor correlation structure
Usage
mvtPfact(tdata,start,pfact,df,prlevel=0,mxiter=100)
Arguments
| tdata | nxd matrix of t-scores | 
| start | vector of length p*d with starting values for partial correlation representation of loadings (algberaically independent) | 
| pfact | number of factors (such as 1,2,3,... ) | 
| df | degree of freedom parameter >0 | 
| prlevel | print.level for nlm() | 
| mxiter | maximum number of iterations for nlm() | 
Value
nlm object with ($code,$estimate,$gradient,$iterations,$minimum) Note the minimum nllk can be the same for different parameter vectors because of invariance of the loading matrix to rotations
Examples
# See example in mvtBifact()
negative log-likelihood for the p-factor Gaussian/t model
Description
negative log-likelihood in the p-factor Gaussian or t model
Usage
mvtPfact_nllk(rhvec,tdata,df)
Arguments
| rhvec | vector of length d*p with partial correlation representation of loadings | 
| tdata | nxd data set of t(df)-scores | 
| df | degree of freedom parameter >0 | 
Value
negative log-likelihood of copula for mvt p-factor model
negative log-likelihoods of nested factor structured factor copula and derivatives computed in f90 for input to posDefHessMinb
Description
negative log-likelihoods of nested factor structured factor copula and derivatives
Usage
nestfactorcop_nllk(param,dstruct,iprfn=FALSE)
Arguments
| param | parameter vector; parameters for copulas linking U_ij and V_j go *at the end* (i's with j=1 then j=2 etc) parameters for copulas linking V_j and V_0 go *first* (j=1,2 etc). For BB1 linking copulas for the global latent, the order is theta1,..,theta[d],delta1, ...,delta[d]; V_0 is the global/common latent variable that loads on all variables; V_j is a latent variable that loads only for variables in group j (by group g=1,2,..,mgrp etc). | 
| dstruct | list with data set $data, copula name $copname, $quad is a Gauss-Legendre quadrature object, $repar is a flag for reparametrization (for Gumbel, BB1), $nu is a scalar or 2-vector for degree of freedom parameter(s), $grsize is a vector with group sizes; if dstruct$pdf == 1 the function evaluates nllk only (and returns zero gradient and hessian). Options for copname are: frank, gumbel, frankgumbel, frankbb1, gumbelbb1, tbb1, t. For tbbb1, nu is a scalar. For t, nu is a 2-vector. | 
| iprfn | indicator for printing of function and gradient (within Newton-Raphson iterations) | 
Value
nllk, grad, hess (gradient and hessian included)
Examples
grsize = c(4,4,3)
d = sum(grsize)
n = 500
mgrp = length(grsize)
set.seed(222)
par_nest = c(rep(1.7,3),seq(1.7,3.7,0.2))
udat_obj = rnestfactor(n,grsize,cop=4,par_nest)
udat = udat_obj$data
summary(udat_obj$v0)
summary(udat_obj$vg)
zdat = qnorm(udat)
rmat  = cor(zdat)
round(cor(zdat),3)
# run oblique_fa to get oblqiue factor correlation matrix
obfa = oblique_fa(grsize,start=c(rep(0.8,d),rep(0.5,mgrp)),cormat=rmat,n=n,prlevel=0)
loading1 = rowSums(obfa$loadings)
corlat = obfa$cor_lat # correlations of group latent variables
fa1 = factanal(covmat=corlat,factors=1)
loadlat = c(fa1$loadings)
print(loadlat)  
# starting values for different cases
# convert loading/latcor to Frank, Gumbel and BB1 parameters etc
start_frk1 = frank_rhoS2cpar(loading1)
start_frk0 = frank_rhoS2cpar(loadlat)
start_frk = c(start_frk0,start_frk1)
start_gum1 = gumbel_rhoS2cpar(loading1)
start_gum0 = gumbel_rhoS2cpar(loadlat)
start_gum = c(start_gum0,start_gum1)
start_frkgum = c(start_frk0,start_gum1)
start_tnu = c(loadlat,loading1)
tau = bvn_cpar2tau(loading1)
start_bb1 = bb1_tau2eqtd(tau)
start_bb1 = c(start_bb1[,1:2]) # all thetas and then all deltas
start_frkbb1 = c(start_frk0,start_bb1)
start_gumbb1 = c(start_gum0,start_bb1)
start_tnubb1 = c(loadlat,start_bb1)
#
gl = gaussLegendre(25)
npar = mgrp+d
dstrfrk = list(data=udat,copname="frank",quad=gl,repar=0,grsize=grsize)
out = nestfactorcop_nllk(start_frk, dstrfrk)
print(out$fnval)
print(out$grad)
ml_frk = posDefHessMinb(rep(3,npar),nestfactorcop_nllk, ifixed=rep(FALSE,npar), 
dstrfrk, LB=rep(-20,npar), UB=rep(30,npar), mxiter=30, eps=5.e-5, iprint=TRUE)
dstrgum = list(data=udat,copname="gumbel",quad=gl,repar=0,grsize=grsize)
ml_gum = posDefHessMinb(start_gum,nestfactorcop_nllk, ifixed=rep(FALSE,npar), 
dstrgum, LB=rep(1,npar), UB=rep(20,npar), mxiter=30, eps=5.e-5, iprint=TRUE)
dstrfrkgum = list(data=udat,copname="frankgumbel",quad=gl,repar=0,grsize=grsize)
ml_frkgum = posDefHessMinb(start_frkgum,nestfactorcop_nllk, ifixed=rep(FALSE,npar), 
dstrfrkgum, LB=c(rep(-20,mgrp),rep(1,d)), UB=rep(25,npar), mxiter=30, 
eps=5.e-5, iprint=TRUE)
dstrtnu = list(data=udat,copname="t",quad=gl,repar=0,grsize=grsize, nu=c(10,20))
ml_tnu = posDefHessMinb(start_tnu,nestfactorcop_nllk, ifixed=rep(FALSE,npar), 
dstrtnu, LB=c(rep(-1,npar)), UB=rep(1,npar), mxiter=30, eps=5.e-5, iprint=TRUE)
# diverges with parameters approaching 1
#
npar2 = mgrp+2*d
dstrfrkbb1 = list(data=udat,copname="frankbb1",quad=gl,repar=0,grsize=grsize)
out = nestfactorcop_nllk(start_frkbb1,dstrfrkbb1)
print(out$fnval)
print(out$grad)
ml_frkbb1 = posDefHessMinb(start_frkbb1,nestfactorcop_nllk, ifixed=rep(FALSE,npar2), 
dstrfrkbb1, LB=c(rep(-20,mgrp),rep(0,d),rep(1,d)), UB=rep(20,npar2), 
mxiter=30, eps=5.e-5, iprint=TRUE)
dstrgumbb1 = list(data=udat,copname="gumbelbb1",quad=gl,repar=0,grsize=grsize)
ml_gumbb1 = posDefHessMinb(start_gumbb1,nestfactorcop_nllk, ifixed=rep(FALSE,npar2), 
dstrgumbb1, LB=c(rep(1,mgrp),rep(0,d),rep(1,d)), UB=rep(20,npar2),
mxiter=30, eps=5.e-5, iprint=TRUE)
dstrtnubb1 = list(data=udat,copname="tbb1",quad=gl,repar=0,grsize=grsize, nu=20)
ml_tnubb1 = posDefHessMinb(start_tnubb1,nestfactorcop_nllk, ifixed=rep(FALSE,npar2), 
dstrtnubb1, LB=c(rep(-1,mgrp),rep(0,d),rep(1,d)), UB=c(rep(1,mgrp),rep(20,2*d)), 
mxiter=30, eps=5.e-5, iprint=TRUE)
#
# compare nllk and number of iterations
cat(ml_frk$fnval, ml_gum$fnval, ml_frkgum$fnval, ml_tnu$fnval,
ml_frkbb1$fnval, ml_gumbb1$fnval, ml_tnubb1$fnval, "\n")
# -1438.187 -1760.851 -1725.286 -5555.964 -1729.274 -1764.83 -1746.629
cat(ml_frk$iter, ml_gum$iter, ml_frkgum$iter, ml_tnu$iter,
ml_frkbb1$iter, ml_gumbb1$iter, ml_tnubb1$iter, "\n")
# 7 8 6 23 15 16 16 
# nested-factor t(10)/t(20) failed because some parameters approached the
# upper bound of 1 in which case the numerical integration is inaccurate.
Rank-based normal scores transform
Description
Rank-based normal scores transform
Usage
nscore(data)
Arguments
| data | dataframe or matrix, or vector, of reals | 
Value
matrix or vector of normal scores
Gaussian oblique factor structure correlation matrix
Description
MLE of parameters in the Gaussian oblique factor model for d variables and m groups,
Usage
oblique_fa(grsize, start, data=1, cormat=NULL, 
                       n=100, prlevel=0, mxiter=100)   
Arguments
| grsize | vector of group sizes (variables ordered by group) | 
| start | starting point should have dimension d+m*(m-1)/2 | 
| data | nxd data set to compute the correlation matrix if cormat not given | 
| cormat | dxd empirical correlation matrix (of normal scores) | 
| n | sample size, if available | 
| prlevel | print.level for nlm() | 
| mxiter | maximum number of iterations for nlm() | 
Value
list with nllk: negative log-likelihood; rhovec: the estimated mle; loadings: loading matrix; cor_lat: correlation matrix of the latent variables; Rmod: the correlation matrix with optimized parameters.
Examples
 # See example in bifact_fa() for a comparison with a data example
# Simpler example below
rhpar = c(0.81,0.84,0.84, 0.54,0.57,0.49, 0.51,0.54,0.55,0.70,  0.53,0.56,0.53,0.67,0.70)
cormat = corvec2mat(rhpar)
grsize = c(3,3)
mgrp = length(grsize)
d = sum(grsize)
start = rep(0.7,d+mgrp*(mgrp-1)/2)
res = oblique_fa(grsize, start, cormat=cormat, n=100, prlevel=1)
# iteration = 18
# Parameter:
# [1] 0.9005171 0.9064707 0.9270258 0.8202611 0.8480912 0.8243349 0.7039589
# Function Value
# [1] 622.5533
# Gradient:
# [1]  1.796252e-05  1.464286e-04  9.424639e-05 -8.344614e-05 -9.640644e-05
# [6] -9.799805e-05 -1.705303e-05
#
# Relative gradient close to zero.
# Current iterate is probably solution.
Gaussian oblique factor structure correlation matrix
Description
MLE of parameters in the Gaussian oblique factor model for d variables and m groups,
Usage
oblique_grad_fa(grsize, start, data=1, cormat=NULL, 
                            n=100, prlevel=0, mxiter=100)   
Arguments
| grsize | vector of group sizes (variables ordered by group) | 
| start | starting vector of length d + m*(m-1)/2; d loading parameters followed by m*(m-1)/2 entries in correlation matrix of latent variables (lower triangle by row) | 
| data | n x d data set to compute the correlation matrix if correlation matrix (cormat) not given | 
| cormat | dxd (empirical) correlation matrix of normal scores | 
| n | sample size, if available | 
| prlevel | print.level for nlm() | 
| mxiter | maximum number of iterations for nlm() | 
Value
list with nllk: negative log-likeilihood;rhovec: the estimated mle; loadings: loading matrix; cor_lat: correlation matrix of the latent variables; Rmod: the correlation matrix with optimized parameters.
log-likelihood Gaussian oblique factor structure correlation matrix
Description
log-likelihood Gaussian oblique factor structure correlation matrix with gradient for d variables and m groups,
Usage
oblique_grad_nllk(theta, grsize, Robs, nsize=100)
Arguments
| theta | vector of length d + m*(m-1)/2; d loading parameters followed by m*(m-1)/2 entries in correlation matrix of latent variables (lower triangle by row) | 
| grsize | vector of group sizes (variables ordered by group) | 
| Robs | dxd empirical correlation matrix | 
| nsize | sample size if available | 
Value
negative log-likelihood and gradient for Gaussian p-factor model
log-likelihood Gaussian oblique factor structure correlation matrix
Description
negative log-likelihood of the Gaussian oblique factor model for d variables and m groups,
Usage
oblique_nllk(theta, grsize, Robs, nsize=100)
Arguments
| theta | vector of length d + m*(m-1)/2; d loading parameters followed by m*(m-1)/2 entries in correlation matrix of latent variables (lower triangle by row) | 
| grsize | vector of group sizes (variables ordered by group) | 
| Robs | dxd (empirical) correlation matrix of normal scores | 
| nsize | sample size used to get Robs if available | 
Value
negative log-likelihood value of the oblique Gaussian factor modelwith fixed group size at MLE
Examples
 rhpar = c(0.81,0.84,0.84, 0.54,0.57,0.49, 0.51,0.54,0.55,0.70, 0.53,0.56,0.53,0.67,0.70)
cormat = corvec2mat(rhpar)
print(cormat)
#    [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1.00 0.81 0.84 0.54 0.51 0.53
#[2,] 0.81 1.00 0.84 0.57 0.54 0.56
#[3,] 0.84 0.84 1.00 0.49 0.55 0.53
#[4,] 0.54 0.57 0.49 1.00 0.70 0.67
#[5,] 0.51 0.54 0.55 0.70 1.00 0.70
#[6,] 0.53 0.56 0.53 0.67 0.70 1.00
grsize = c(3,3)
mgrp = length(grsize)
d = sum(grsize)
theta = c(rep(0.3,d+mgrp*(mgrp-1)/2))
ml_obl = oblique_nllk(theta=theta, grsize, Robs=cormat)
print(ml_obl)
# 806.7432
oblique factor correlation structure for d variables and m groups
Description
For oblique factor correlation structure for d variables and m groups, convert the vector of parameters theta into the loading matrix and correlation matrix of latent variables The variables are assumed ordered by group.
Usage
oblique_par2load(theta,grsize)
Arguments
| theta | vector of length d + m*(m-1)/2; d loading parameters followed by m*(m-1)/2 entries in correlation matrix of latent variables (lower triangle by row) | 
| grsize | vector of group sizes (variables ordered by group) | 
Value
loadings: loading matrix; cor_lat: correlation matrix of latent variables; Rmod: correlation matrix based on theta for oblique factor model
Examples
 theta = c(0.6,0.7,0.8,0.7,0.6,0.5,0.5)
oblique_par2load(theta,grsize=c(3,3))
#$loadings
#[,1] [,2]
#[1,]  0.6  0.0
#[2,]  0.7  0.0
#[3,]  0.8  0.0
#[4,]  0.0  0.7
#[5,]  0.0  0.6
#[6,]  0.0  0.5
# 
#$cor_lat
#[,1] [,2]
#[1,]  1.0  0.5
#[2,]  0.5  1.0
#
#$Rmod
#[,1]  [,2] [,3]  [,4] [,5]  [,6]
#[1,] 1.00 0.420 0.48 0.210 0.18 0.150
#[2,] 0.42 1.000 0.56 0.245 0.21 0.175
#[3,] 0.48 0.560 1.00 0.280 0.24 0.200
#[4,] 0.21 0.245 0.28 1.000 0.42 0.350
#[5,] 0.18 0.210 0.24 0.420 1.00 0.300
#[6,] 0.15 0.175 0.20 0.350 0.30 1.000
oblique factor correlation structure for d variables and m groups include determinant and inverse
Description
For oblique factor correlation structure for d variables and m groups, convert the vector of parameters theta into the loading matrix and correlation matrix of latent variables The variables are assumed ordered by group.
Usage
oblique_pp_par2load(theta,grsize, icheck=FALSE)
Arguments
| theta | vector of length d + m*(m-1)/2; d loading parameters followed by m*(m-1)/2 entries in correlation matrix of latent variables (lower triangle by row) | 
| grsize | vector of group sizes (variables ordered by group) | 
| icheck | flag, if TRUE checks are made | 
Value
loadings: loading matrix; cor_lat: correlation matrix of latent variables; Rmod: correlation matrix based on theta for oblique factor model
Examples
 theta = c(0.6,0.7,0.8,0.7,0.6,0.5,0.5)
oblique_pp_par2load(theta,grsize=c(3,3))
#$loadings
#[,1] [,2]
#[1,]  0.6  0.0
#[2,]  0.7  0.0
#[3,]  0.8  0.0
#[4,]  0.0  0.7
#[5,]  0.0  0.6
#[6,]  0.0  0.5
#
#$cor_lat
#[,1] [,2]
#[1,]  1.0  0.5
#[2,]  0.5  1.0
# 
#$Rmod
#[,1]  [,2] [,3]  [,4] [,5]  [,6]
#[1,] 1.00 0.420 0.48 0.210 0.18 0.150
#[2,] 0.42 1.000 0.56 0.245 0.21 0.175
#[3,] 0.48 0.560 1.00 0.280 0.24 0.200
#[4,] 0.21 0.245 0.28 1.000 0.42 0.350
#[5,] 0.18 0.210 0.24 0.420 1.00 0.300
#[6,] 0.15 0.175 0.20 0.350 0.30 1.000
Parameter estimation for 1-factor copula with estimated latent variables using VineCopula::BiCopSeelct
Description
Parameter estimation for 1-factor copula with estimated latent variables
Usage
onefactorEstWithProxy(udata,vlatent, famset, iprint=FALSE)
Arguments
| udata | nxd matrix with values in (0,1) | 
| vlatent | vector is estimated latent variables (or test with known values) | 
| famset | 2*d vector of codes for copula families for d global linking copulas and d group-based linking copulas, using those from VineCopula: current choices to cover a range of tail behavior are: 1 = Gaussian/normal; 2 = t; 4 = Gumbel; 5 = Frank; 7 = BB1; 10 = BB8; 14 = survival Gumbel; 17 = survival BB1; 20 = survival BB8. | 
| iprint | if TRUE print intermediate results | 
Details
It is best if variables have been oriented to be positively related to the latent variable
Value
list with fam = d-vector of family codes chosen via BiCopSelect;par1 = d-vector; par2 = d-vector of parameters for the selected copula families in the 1-truncated vine rooted at the latent variable,
References
1. Krupskii P and Joe H (2013). Factor copula models for multivariate data. Journal of Multivariate Analysis, 120, 85-101. 2. Fan X and Joe H (2024). High-dimensional factor copula models with estimation of latent variables Journal of Multivariate Analysis, 201, 105263.
Examples
## Not run: 
# simulate data from 1-factor model with all Frank copulas
n = 500
d = 40
set.seed(20)
cpar = runif(d,4.2,18.5)
param = c(rbind(cpar,rep(0,d))) #Kendall's tau 0.4 to 0.8
data = r1factor(n,d,param,fam=rep(5,d))
vlat = data$vlatent # latent variables
udata = data$udata
proxyMean = uscore(apply(udata,1,mean)) # mean proxy
# RMSE of estimated latent variables
print(sqrt(mean((proxyMean-vlat)^2)))
# first estimation of 1-factor copula parameters
# allow for Frank, gaussian, t linking copulas
est1 = onefactorEstWithProxy(udata,proxyMean, famset=c(1,2,5))
print(est1$fam) # check choices , all 5s (Frank) in this case
print(est1$par1)
# estimation with only Frank copula as choice
est0 = onefactorEstWithProxy(udata,proxyMean, famset=c(5))
print(summary(abs(est0$par1-cpar)))  # same as $est1$par1
# improved conditional expectation proxies
# latentUpdate1factor allows for estimated linking copula with 2-parameters
# latentUpdate1factor1 can be used if estimated linking copulas all have par2=0
condExpProxy = latentUpdate1factor(c(rbind(est1$par1,est1$par2)),
udata=udata,nq=25,family=rep(5,d))
# improved estimation of 1-factor copula parameters
est2 = onefactorEstWithProxy(udata,condExpProxy, famset=est1$fam)
print(est2$par1)  
# simple version of update for 1-parameter linking copulas
condExpProxy1 = latentUpdate1factor1(est0$par1,
udata=udata,nq=25,family=rep(5,d))
summary(condExpProxy-condExpProxy1)  # 0 because family was chosen as 5 
print(summary(abs(est2$par1-cpar)))
# rmse of estimated latent variables
print(sqrt(mean((condExpProxy-vlat)^2))) 
# smaller rmse than initial proxies
## End(Not run)
negative log-likelihood of 1-factor copula for input to posDefHessMin and posDefHessMinb
Description
negative log-likelihood (nllk) of 1-factor copula for input to posDefHessMin and posDefHessMinb
Usage
onefactorcop_nllk(param,dstruct,iprfn=FALSE)
Arguments
| param | parameter vector | 
| dstruct | list with data set $data, copula name $copname, $quad is list with quadrature weights and nodes, $repar is code for reparametrization (for Gumbel, BB1), $nu is positive degree of freedom parameter (for t) (linking copula is common for all variables). Options for copname are: frank, gumbel, bb1, t. For reflected gumbel or bb1, use something like dstruct$dat = 1-udata | 
| iprfn | print flag for function and gradient (within Newton-Raphson) iterations) for BB1, param is 2*d-vector with th1,de1,th2,de2,... | 
Details
linked to Fortran 90 code for speed
Value
nllk, grad (gradient), hess (hessian) at MLE
Examples
cpar_gum = seq(1.9,3.7,0.2)
d = length(cpar_gum)
n = 300
param = c(rbind(cpar_gum,rep(0,d)))  # second par2 is 0 for VineCopula
set.seed(111)
gum_obj = r1factor(n,d,param,famvec=rep(4,d)) # uses VineCopula
udat = gum_obj$udata
zdat = qnorm(udat)
rmat = cor(zdat)
print(round(rmat,3))
# run factanal to get loading (rho in normal scale close to Spearman rho)
fa1 = factanal(covmat=rmat,factors=1)
loadings = c(fa1$loading)
# convert loadings to Frank, Gumbel and BB1 parameters 
start_frk = frank_rhoS2cpar(loadings)
start_gum = gumbel_rhoS2cpar(loadings)
tau = bvn_cpar2tau(loadings)
start_bb1 = bb1_tau2eqtd(tau)
start_bb1 = c(t(start_bb1[,1:2]))
gl = gaussLegendre(25)
dstrfrk1 = list(copname="frank",data=udat,quad=gl,repar=0, pdf=1)
dstrfrk = list(copname="frank",data=udat,quad=gl,repar=0, pdf=0)
obj1 = onefactorcop_nllk(start_frk,dstrfrk1) #nllk only
obj = onefactorcop_nllk(start_frk,dstrfrk) # nllk, grad, hess
print(obj1$fnval)
print(obj$grad)
#
ml_frk = posDefHessMinb(start_frk,onefactorcop_nllk,ifixed=rep(FALSE,d),
  dstruct=dstrfrk, LB=rep(-30,d),UB=rep(30,d),iprint=TRUE,eps=1.e-5)
dstrgum = list(copname="gumbel",data=udat,quad=gl,repar=0)
ml_gum = posDefHessMinb(start_gum,onefactorcop_nllk,ifixed=rep(FALSE,d),
  dstruct=dstrgum, LB=rep(-30,d),UB=rep(30,d),iprint=TRUE,eps=1.e-5)
dstrgumr = list(copname="gumbel",data=1-udat,quad=gl,repar=0)
ml_gumr = posDefHessMinb(start_gum,onefactorcop_nllk,ifixed=rep(FALSE,d),
  dstruct=dstrgumr, LB=rep(-30,d),UB=rep(30,d),iprint=TRUE,eps=1.e-5)
dstrtnu = list(copname="t",data=udat,quad=gl,repar=0,nu=10)
ml_tnu = posDefHessMinb(loadings,onefactorcop_nllk,ifixed=rep(FALSE,d),
  dstruct=dstrtnu, LB=rep(-1,d),UB=rep(1,d),iprint=TRUE,eps=1.e-5)
dstrbb1 = list(copname="bb1",data=udat,quad=gl,repar=0)
ml_bb1 = posDefHessMinb(start_bb1,onefactorcop_nllk,ifixed=rep(FALSE,2*d),
  dstruct=dstrbb1, LB=rep(c(0,1),d),UB=rep(20,2*d),iprint=TRUE,eps=1.e-5)
dstrbb1r = list(copname="bb1",data=1-udat,quad=gl,repar=0)
ml_bb1r = posDefHessMinb(start_bb1,onefactorcop_nllk,ifixed=rep(FALSE,2*d),
  dstruct=dstrbb1r, LB=rep(c(0,1),d),UB=rep(20,2*d),iprint=TRUE,eps=1.e-5)
cat(ml_frk$fnval, ml_gum$fnval, ml_gumr$fnval, ml_tnu$fnval, ml_bb1$fnval, ml_bb1r$fnval, "\n")
# -1342.936 -1560.391 -1198.837 -1454.907 -1560.45 -1549.935
cat(ml_frk$iter, ml_gum$iter, ml_gumr$iter, ml_tnu$iter, ml_bb1$iter, ml_bb1r$iter, "\n")
# 4 4 5 4 16 6
Partial correlation representation to loadings for p-factor
Description
Partial correlation representation to loadings for p-factor
Usage
pcor2load(rhomat)
Arguments
| rhomat | dxp matrix with correlations for factor 1 in column 1, and partial correlations with factor k given previous factors in column k | 
Details
Partial correlation representation to loadings for p-factor
Value
loading matrix
Examples
grsize = c(5,4,3) 
# bi-factor parameters: 13 correlations with global latent and then 
# 5 partial correlations for group1 latent given global,
# 4 partial correlations for group2 latent given global,
# 3 partial correlations for group3 latent given global
par_bifact = c(0.84,0.63,0.58,0.78,0.79,  0.87,0.80,0.74,0.71,  0.83,0.77,0.80,
0.67,0.58,0.15,0.70,0.47,  0.32,0.27,0.73,0.19,  0.35,0.23,0.53)
mgrp = length(grsize)
d = sum(grsize)
pcmat = matrix(0,d,mgrp+1) # bi-factor structure has mgrp+1 factors
pcmat[,1] = par_bifact[1:d]
iend = cumsum(grsize)
ibeg = iend+1; ibeg = c(1,1+iend[-mgrp])
for(g in 1:mgrp)
{ pcmat[ibeg[g]:iend[g],g+1] = par_bifact[d+ibeg[g]:iend[g]] }
print(pcmat)
aload = pcor2load(pcmat)
print(aload)
Gaussian p-factor structure correlation matrix
Description
Gaussian p-factor structure correlation matrix with quasi-Newton
Usage
pfactor_fa(factors,start,data=1,cormat=NULL,n=100,prlevel=0,mxiter=100)
Arguments
| factors | p = #factors | 
| start | starting point should have dimension 2*d | 
| data | nsize x d data set to compute the correlation matrix if correlation matrix (cormat) not given | 
| cormat | dxd empirical correlation matrix | 
| n | sample size | 
| prlevel | print.level for nlm() | 
| mxiter | maximum number of iterations for nlm() | 
Value
a list with $nllk, $rhmat = dxp matrix of partial correlations, $loading = dxp loading matrix after varimax, $rotmat = pxp rotation matrix used by varimax
Examples
# See example in bifactor_fa()
log-likelihood Gaussian p-factor structure correlation matrix
Description
log-likelihood Gaussian p-factor structure correlation matrix with gradient
Usage
pfactor_nllk(rhvec,Robs,nsize)
Arguments
| rhvec | vector of length d*p with partial corr representation of loadings | 
| Robs | dxd empirical correlation matrix | 
| nsize | sample size | 
Value
negative log-likelihood and gradient for Gaussian p-factor model
Minimization with modified Newton-Raphson iterations, Hessian is modified to be positive definite at each step. Algorithm and code produced by Pavel Krupskii (2013) see PhD thesis Krupskii (2014), UBC and Section 6.2 of # Joe (2014) Dependence Models with Copulas. Chapman&Hall/CRC
Description
modified Newton-Raphson minimization with positive Hessian
Usage
posDefHessMin(param,objfn,dstruct,LB,UB,mxiter=30,eps=1.e-6,bdd=5,iprint=FALSE)
Arguments
| param | starting point for minimization | 
| objfn | function to be minimized with gradient and Hessian | 
| dstruct | list with data set and other variables used by objfn | 
| LB | lower bound vector | 
| UB | upper bound vector | 
| mxiter | max number of iterations | 
| eps | tolerance for Newton-Raphson iterations | 
| bdd | bound on difference of 2 consecutive iterations (useful is starting point is far from solution and func is far from convex) | 
| iprint | control on amount of printing, FALSE for no printing of iterations and TRUE for printing x^(k) on each iteration. | 
Value
list withfnval = function value at minimum; parmin = param for minimum; invh = inverse Hessian; iconv = 1 if converged, -1 for a boundary point, 0 otherwise; iter = number of iterations.
Examples
# See examples in onefactorcop_nllk(), bifactorcop_nllk(), nestfactorcop_nllk()
Version with ifixed as argument
Description
modified Newton-Raphson minimization with positive Hessian
Usage
posDefHessMinb(param,objfn,ifixed,dstruct,LB,UB,mxiter=30,eps=1.e-6,
  bdd=5,iprint=FALSE) 
Arguments
| param | starting point for minimization | 
| objfn | function to be minimized with gradient and Hessian | 
| ifixed | vector of length(param) of TRUE/FALSE, such that ifixed[i]=TRUE iff param[i] is fixed at the given value | 
| dstruct | list with data set and other variables used by objfn | 
| LB | lower bound vector | 
| UB | upper bound vector | 
| mxiter | max number of iterations | 
| eps | tolerance for Newton-Raphson iterations | 
| bdd | bound on difference of 2 consecutive iterations (useful is starting point is far from solution and func is far from convex) | 
| iprint | control on amount of printing, FALSE for no printing of iterations and TRUE for printing x^(k) on each iteration. | 
Value
list withfnval = function value at minimum; parmin = param for minimum; invh = inverse Hessian; iconv = 1 if converged, -1 for a boundary point, 0 otherwise; iter = number of iterations.
Examples
# See examples in onefactorcop_nllk(), bifactorcop_nllk(), nestfactorcop_nllk()
C_[2|1]^[-1](p|u) for bivariate Frank copula
Description
Frank bivariate copula conditional quantile
Usage
qcondFrank(p,u,cpar)
Arguments
| p | 0<p<1, could be a vector | 
| u | 0<u<1, could be a vector | 
| cpar | copula parameter: cpar>0 or cpar<0; cpar=0 input will not work | 
Details
1-exp(-cpar) becomes 1 in double precision for cpar>37.4; any argument can be a vector, but all vectors must have same length. Form of inputs not checked (for readability of code).
Value
conditional quantiles of bivariate Frank copula
C_[2|1]^[-1](p|u) for bivariate Student t copula
Description
bivariate Student t copula conditional quantile
Usage
qcondbvtcop(p,u,cpar)
Arguments
| p | 0<p<1, could be a vector | 
| u | 0<u<1, could be a vector | 
| cpar | copula parameter: 2-vector with -1<rho<1, df>0 | 
Value
conditional quantiles of bivariate Student t copula
simulate from 1-factor copula model with different linking copula families
Description
simulate from 1-factor copula model and include corresponding latent variables
Usage
r1factor(n,d,param,famvec,vlatent=NULL)
Arguments
| n | sample size | 
| d | dimension | 
| param | copula parameter vector of dimension 2*d (par[j],par2[j], j=1,...,d) for d linking copulas, for one-parameter families set par2=0 | 
| famvec | family vector for d linking copulas same index with VineCopula package, for a range of tail properties, select 1:Gaussian; 2:t; 4:Gumbel; 14:survival Gumbel; 5:Frank; 7:BB1; 17:survival BB1; 10:BB8; 20:survival BB8; | 
| vlatent | given n-vector of latent variavles in U(0,1); use for simulating from a group for oblique factor copula (in this case, apply this function G times for G groups, extracting dependent latent variables from a nxG matrix) | 
Value
list with udata: nxd matrix in (0,1) andvlatent n-vector of corresponding latent variables in (0,1).
Examples
 # Example 1
cpar_frk = c(12.2,3.45,4.47,4.47,5.82)
d = length(cpar_frk)
cpar2_frk = rep(0,d)
param = c(rbind(cpar_frk,cpar2_frk))
n = 300
set.seed(123)
frk_obj = r1factor(n,d,param,famvec=rep(5,d)) # uses VineCopula
frkdat = frk_obj$udata
print(cor(frkdat))
print(summary(frk_obj$vlatent))
dfrank = function(u,v,cpar)
{ t1 = 1.-exp(-cpar); tem1 = exp(-cpar*u); tem2 = exp(-cpar*v);
  pdf = cpar*tem1*tem2*t1; tem = t1-(1.-tem1)*(1.-tem2);
  pdf = pdf/(tem*tem);
  pdf
}
cat("\nFrank 1-factor MLE: standalone R\n")
out1_frk = ml1factor(nq=21,cpar_frk,frkdat,dfrank,LB=-30,UB=30,prlevel=1,mxiter=100)
cat("\nFrank 1-factor MLE: nlm with f90 code\n")
out2_frk = ml1factor_f90(nq=21,cpar_frk,frkdat,copname="frank",LB=-30,UB=30,prlevel=1,mxiter=100)
cat("\nFrank 1-factor MLE: posDefhessMinb with f90 code\n")
gl21 = gaussLegendre(21)
dstrfrk = list(copname="frank",data=frkdat,quad=gl21,repar=0)
out3_frk = posDefHessMinb(cpar_frk,onefactorcop_nllk,ifixed=rep(FALSE,d),
dstruct=dstrfrk, LB=rep(-30,d),UB=rep(30,d),iprint=TRUE,eps=1.e-5)
cat(out1_frk$minimum, out2_frk$minimum, out3_frk$fnval,"\n")
print(cbind(out1_frk$estimate, out2_frk$estimate, out3_frk$parmin))
print(sqrt(diag(out3_frk$invh))) # SEs
#
# Example 2 (oblique factor with 3 groups)
n = 500
d = 10
ltd1 = c(0.3,0.4,0.6,0.7,0.6); utd1 = c(0.5,0.6,0.7,0.5,0.4) 
ltd2 = c(0.3,0.4,0.6,0.5,0.4); utd2 = c(0.6,0.3,0.5,0.7,0.6)
ltd3 = c(0.5,0.4,0.5,0.5); utd3 = c(0.5,0.4,0.5,0.5)
grsize = c(5,5,4)
rmat = toeplitz(c(1,0.5,0.5))  # for Gaussian copula parameter of  latent
cpar1 = bb1_td2cpar(cbind(ltd1,utd1))
cpar2 = bb1_td2cpar(cbind(ltd2,utd2))
cpar3 = bb1_td2cpar(cbind(ltd3,utd3))
set.seed(205)
zmat = rmvn(n,rmat); vmat = pnorm(zmat)
# Any vine copula could be used for latent variables, besides multivariate normal
data1g = r1factor(n=500,grsize[1],param=c(t(cpar1)),
famvec=rep(7,grsize[1]), vlatent=vmat[,1])
data2g = r1factor(n=500,grsize[2],param=c(t(cpar2)),
famvec=rep(7,grsize[2]), vlatent=vmat[,2])
data3g = r1factor(n=500,grsize[3],param=c(t(cpar3)),
famvec=rep(7,grsize[3]), vlatent=vmat[,3])
udata_oblf = cbind(data1g$udata,data2g$udata,data3g$udata)
rr_oblf = cor(udata_oblf,method="spearman")
print(round(rr_oblf,2))
Precipitation by rainstorm at 28 stations
Description
R workspace file with transformed precipitation by rainstorm at 28 stations
There are 4 components:
1. $uprecip: 256x28 matrix with total precipitation in mm by storm at 28 stations, after rank transform to U(0,1);
2. $zprecip: 256x28 matrix with total precipitation in mm by storm at 28 stations, after rank transform to N(0,1);
3. $cormat: the correlation matrix of $zprecip;
4. $grsize: vector (6,12,10) for sizes of 3 goups of stations found by a variable clustering method.
Usage
data(rainstorm)
simulate from bi-factor copula model
Description
simulate from bi-factor copula model and include corresponding latent variables
Usage
rbifactor(n, grsize, cop=5, param) 
Arguments
| n | sample size | 
| grsize | G-vector of group sizes for G groups | 
| cop | code for copula families 1: Gaussian/Gaussian; 2: t/t; 4: Gumbel/Gumbel; 5: Frank/Frank; 7: BB1/Frank; 14: survival Gumbel, 17: survivalBB1 /Frank if cop = 1, data have standard normal marginals if cop = 2, data have t marginals if cop > 2, data have uniform(0,1) marginals | 
| param | vector of parameters (those for the common factor go first) The order in param is the same as in start for mvtbifct(full=T) function. For BB1/Frank: BB1thetas then BB1deltas, then Frank parameters – the order in param is the same as in start for mvtbifct(full=F) function | 
Details
The user can modify this code to get other linking copulas.
Value
list with data: nxd data set with U(0,1) or N(0,1) or t(df) margin; v0: n-vector of corresponding global latent variables; and vg: nxG matrix of corresponding local (group) latent variables.
Examples
grsize = c(4,3)
cop = 4; param4 = c(seq(1.5,2.1,0.1),  rep(1.1,7))
cop = 14; param14 = c(seq(1.5,2.1,0.1),  rep(1.1,7))
cop = 5; param5 = c(seq(1.5,2.1,0.1),  rep(1.1,7))
cop = 1; param1 = c(0.5,0.6,0.7,0.8,0.9,0.4,0.5,  rep(1.1,7)) 
cop = 2; param2 = c(0.5,0.6,0.7,0.8,0.9,0.4,0.5,  rep(1.1,7), 7)
cop = 7; param7 = c(seq(0.5,1.1,0.1), 1.5,1.6,1.7,1.8,1.9,1.4,1.5, rep(1.1,7)) 
cop = 17; param17 = c(seq(0.5,1.1,0.1), 1.5,1.6,1.7,1.8,1.9,1.4,1.5, rep(1.1,7)) 
set.seed(123)
gumdat = rbifactor(n=10, grsize=grsize, cop=4, param=param4)    # U(0,1)
gumrdat = rbifactor(n=10, grsize=grsize, cop=14, param=param14) # U(0,1)
frkdat = rbifactor(n=10, grsize=grsize, cop=5, param=param5)    # U(0,1)
gaudat = rbifactor(n=10, grsize=grsize, cop=1, param=param1)    # N(0,1)
bvtdat = rbifactor(n=10, grsize=grsize, cop=2, param=param2)    # t_7
bb1frkdat = rbifactor(n=10, grsize=grsize, cop=7, param=param7)    # U(0,1)
bb1rfrkdat = rbifactor(n=10, grsize=grsize, cop=17, param=param17) # U(0,1)
summary(bb1frkdat$data)
summary(bb1frkdat$v0)
summary(bb1frkdat$vg)
correlation matrix for 1-factor plus 1-truncated vine (for residual dependence)
Description
correlation matrix for 1-factor plus 1-truncated vine (for residual dependence)
Usage
residDep(cormat,loading)
Arguments
| cormat | dxd correlation matrix | 
| loading | d-dimensional loading vector (for latent factor), -1<loading[j]<1 | 
Details
MST algorithm with weights log(1-rho^2), rho's are partial correlations fiven the latent variable. not exported
Value
list with R = correlation matrix for structure of 1-factor+Markov tree residual dependence;incl = d*(d-1)/2 binary vector: indicator of edges [1,2], [1,3], [2,3], [1,4], ...[d-1,d] edges in tree with d-1 edges; partcor = conditional correlation matrix given the latent variable.
Spearman's rho for bivariate copula with parameter cpar
Description
Spearman's rho for bivariate copula with parameter cpar
Usage
rhoS(cpar,cop, zero=0, icond=FALSE, tol=0.0001)
Arguments
| cpar | copula parameter | 
| cop | function name of joint cdf or conditional cdf C_2|1 | 
| zero | 0 or something like 1.e-6 (to avoid endpoint problems) | 
| icond | icond flag for using condition cdf of copula; if icond = TRUE, cop = conditional cdf pcondcop if icond = FALSE, cop = joint cdf pcop default is to integrate on [zero,1-zero]^2 for icond=TRUE. | 
| tol | accuracy for 2-dimensional integration | 
Value
Spearman rho value for copula
Examples
# Bivariate margin of 1-factor copula
# using conditional cdf via VineCopula::BiCopHfunc2
# cpar1 = (par,par2) for fam1 for first variable
# cpar2 = (par,par2) for fam2 for second variable
# family codes 1:Gaussian, 2:t, 4:Gumbel, 5:Frank, 7:BB1, 14:survGumbel, 17:survBB1
p1factbiv = function(u1,u2,cpar1,cpar2,fam1,fam2,nq)
{ if(length(u1)==1) u1 = rep(u1,nq)
  if(length(u2)==1) u2 = rep(u2,nq)
  gl = gaussLegendre(nq)
  wl = gl$weights; vl = gl$nodes
  a1 = VineCopula::BiCopHfunc2(u1,vl,family=fam1,par=cpar1[1], par2=cpar1[2])
  a2 = VineCopula::BiCopHfunc2(u2,vl,family=fam2,par=cpar2[1], par2=cpar2[2])
  sum(wl*a1*a2)
}
#
# Spearman rho
rhoS_1factor = function(cpar1,cpar2,fam1,fam2,nq)
{ gl = gaussLegendre(nq)
  wl = gl$weights; xl = gl$nodes
  pcint1 = rep(0,nq); pcint2 = rep(0,nq)
  for(iq in 1:nq)
  { a1 = VineCopula::BiCopHfunc2(xl,rep(xl[iq],nq),family=fam1,par=cpar1[1],par2=cpar1[2])
    a2 = VineCopula::BiCopHfunc2(xl,rep(xl[iq],nq),family=fam2,par=cpar2[1],par2=cpar2[2])
    pcint1[iq] = sum(wl*a1)
    pcint2[iq] = sum(wl*a2)
  }
  tem = sum(wl*pcint1*pcint2)
  12*tem-3
}
#
# Tests for Spearman rho with BB1 linking copulas to latent variable
param = matrix(c(0.5,1.5,0.6,1.2),2,2,byrow=TRUE)
# Gauss-Legendre quadrature
rho_1factbb1_gl = rhoS_1factor(param[1,],param[2,],fam1=7,fam2=7,nq=21)
# reflected/survival BB1
rho_1factbb1r_gl = rhoS_1factor(param[1,],param[2,],fam1=17,fam2=17,nq=21)
cat(rho_1factbb1_gl, rho_1factbb1r_gl, "\n")
# 0.3401764 0.339885 
#
pcop1fact_bb1 = function(u1,u2,param)
{ p1factbiv(u1,u2,param[c(1,3)],param[c(2,4)],fam1=7,fam2=7,nq=21) }
#
pcop1fact_bb1r = function(u1,u2,param)
{ p1factbiv(u1,u2,param[c(1,3)],param[c(2,4)],fam1=17,fam2=17,nq=21) }
#
# Using function rhoS() based on adaptive integration
library(cubature)
rho_1factbb1_ai = rhoS(c(param),pcop1fact_bb1,zero=0.00001,tol=0.00001)
rho_1factbb1r_ai = rhoS(c(param),pcop1fact_bb1r,zero=0.00001,tol=0.00001)
cat(rho_1factbb1_ai, rho_1factbb1r_ai, "\n")
# 0.3400871 0.3397855
# same to 3 decimal places
Random multivariate normal (standard N(0,1) margins)
Description
Random multivariate normal (standard N(0,1) margins)
Usage
rmvn(n,rmat)
Arguments
| n | simulation sample size | 
| rmat | correlation matrix | 
Value
nxd matrix, where d=nrow(rmat)
Random multivariate t (standard t(nu) margins)
Description
Random multivariate t (standard t(nu) margins)
Usage
rmvt(n,rmat,nu)
Arguments
| n | simulation sample size | 
| rmat | correlation matrix | 
| nu | degree of freedom parameter | 
Value
nxd matrix, where d=nrow(rmat)
Simulate data from nested copula or Gaussian model
Description
Simulate data from nested copula or Gaussian model
Usage
rnestfactor(n,grsize,cop,param)
Arguments
| n | sample size | 
| grsize | G-vector of group sizes for G groups | 
| cop | number code: 1: Gaussian; 2: t; 4: Gumbel; 14: survival Gumbel; 5: Frank; 7: Gumbel+BB1 | 
| param | vector of parameters, length is d+mgrp(+1 for cop==2): | 
Details
The user can modify this code to get other linking copulas.
Value
d-dimensional random sample with U(0,1) margins or N(0,1) or t(df) margin; v0: n-vector of corresponding global latent variables; and vg: nxG matrix of corresponding local (group) latent variables
Examples
grsize = c(3,3,3)
cop = 4; param4 = c(1.1,1.1,1.1,  seq(1.5,2.3,0.1))
cop = 14; param14 = c(1.1,1.1,1.1,  seq(1.5,2.3,0.1))
cop = 5; param5 = c(1.1,1.1,1.1,  seq(1.5,2.3,0.1))
cop = 1; param1 = c(0.4,0.4,0.4, 0.5,0.6,0.7,0.8,0.9,0.4,0.5,0.6,0.7 ) 
cop = 2; param2 = c(0.4,0.4,0.4, 0.5,0.6,0.7,0.8,0.9,0.4,0.5,0.6,0.7, 7 ) 
cop = 7; param7 = c(1.5,1.5,1.5, seq(0.5,1.3,0.1), 1.5,1.6,1.7,1.8,1.9,1.4,1.5,1.6,1.7) 
set.seed(123)
gumdat = rnestfactor(n=10, grsize=grsize, cop=4, param=param4)
gumrdat = rnestfactor(n=10, grsize=grsize, cop=14, param=param14)
frkdat = rnestfactor(n=10, grsize=grsize, cop=5, param=param5)
gaudat = rnestfactor(n=10, grsize=grsize, cop=1, param=param1)
bvtdat = rnestfactor(n=10, grsize=grsize, cop=2, param=param2)
gumbb1dat = rnestfactor(n=10, grsize=grsize, cop=7, param=param7)
summary(gumbb1dat$data)
round(cor(gumbb1dat$data),2)
summary(gumbb1dat$v0)
summary(gumbb1dat$vg)
Semi-correlations for two variables
Description
semi-correlations (lower and upper) applied to data after normal scores transform
Usage
semiCor(bivdat,inscore=FALSE)
Arguments
| bivdat | nx2 data set | 
| inscore | TRUE if bivdat has already been converted to normal scores, default FALSE | 
Value
3-vector with rhoN = correlation of normal scores (vander Waerden correlation) and lower/ upper semi-correlations
Examples
# See example in semiCorTable()
Semi-correlation table for a multivariate data set
Description
Semi-correlation table for several variables
Usage
semiCorTable(mdat, varnames, inscore=FALSE)
Arguments
| mdat | nxd multivariate data set with d>=2 columns | 
| varnames | d-vector of (abbreviated) variable names | 
| inscore | TRUE if mdat has already been converted to normal scores, default FALSE | 
Value
d*(d-1)/2 by 8-column dataframe with columns j1,j2,ncor,lcor,ucor,bvnsemic, varnames[j1] varnames[j2]for 2 variable indices, correlation of normal scores, lower semi-correlation, upper semi-correlation and BVN semi-correlation assuming Gaussian copula Stronger than Gaussian dependence in upper tail if ucor is larger than bvn semicor
Examples
rmat = toeplitz(c(1,.7,.4))
print(rmat)
set.seed(1234)
zdat = rmvn(n=500,rmat)
set.seed(12345)
tdat = rmvt(n=500,rmat,nu=5)
vnames=c("V1","V2","V3")
zsemi = semiCorTable(zdat,vnames)
tsemi = semiCorTable(tdat,vnames)
cat("trivariate normal\n")
print(zsemi)
cat("trivariate t(5)\n")
print(tsemi)
Tail dependence parameter estimation
Description
Tail dependence parameter estimate based on extrapolating zeta(alpha)
Usage
tailDep(u1,u2, lowertail=FALSE, eps=0.1, semictol=0.1, rank=TRUE,
  iprint=FALSE)
Arguments
| u1 | nx1 vector with values (in (0,1) if rank=FALSE) | 
| u2 | nx1 vector with values (in (0,1) if rank=FALSE) | 
| lowertail | TRUE if lower tail-weighted dependence measure, default is FALSE | 
| eps | tolerance (default 0.1) for rate parameter in method 2; non-linear (use method 2) if rate < 1-eps | 
| semictol | tolerance (default 0.1) for exceedance of normal semicorrelation to treat as tail dependent; use something like semicol=-0.5 if normal scores plot suggest tail dependence | 
| rank | TRUE (default) if data matrix needs to be converted to uniform scores in (0,1) | 
| iprint | TRUE for intermediate prints | 
Value
upper tail dependence parameter based on extrapolation of zeta(alpha) for large alpha
References
Lee D, Joe H, Krupskii P (2018). J Nonparametric Statistics, 30(2), 262-290
Examples
mytest = function(qcond,cpar,n=500,seed=123)
{ set.seed(seed)
  u1 = runif(n)
  u2 = qcond(runif(n),u1,cpar)
  #convert to uniform scores (marginals are usually not known)
  u1 = (rank(u1)-0.5)/n
  u2 = (rank(u2)-0.5)/n
  alp = c(1,5,10:20)
  zetaL = zetaDep(cbind(u1,u2),alp,rank=FALSE,lowertail=FALSE)
  zetaU = zetaDep(cbind(u1,u2),alp,rank=FALSE,lowertail=TRUE)
  print(cbind(alp,zetaL,zetaU))
  utd = tailDep(u1,u2, lowertail=FALSE, eps=0.1, semictol=0.1, rank=FALSE, iprint=TRUE)
  ltd = tailDep(u1,u2, lowertail=TRUE, eps=0.1, semictol=0.1, rank=FALSE, iprint=TRUE)
  cat(ltd,utd,"\n")
  utd = tailDep(u1,u2, lowertail=FALSE, eps=0.1, semictol=0.1, rank=FALSE, iprint=FALSE)
  ltd = tailDep(u1,u2, lowertail=TRUE, eps=0.1, semictol=0.1, rank=FALSE, iprint=FALSE)
  cat(ltd,utd,"\n")
  #par(mfrow=c(2,1))
  #zetaPlot(cbind(u1,u2),alp,ylim=c(0,1),inverse=FALSE)
  #zetaPlot(cbind(u1,u2),alp,ylim=c(0,1),inverse=TRUE)
  0
}
mytest(qcondFrank,3)
mytest(qcondbvtcop,c(0.6,5))
Rank-based uniform scores transform
Description
Rank-based uniform scores transform
Usage
uscore(data,aunif=-0.5)
Arguments
| data | dataframe or matrix, or vector, of reals | 
| aunif | adjustment 'a' for (rank+a)/(n+1+2*a) as scores. n=sample size , default is -0,5 | 
Value
matrix or vector of uniform scores
Empirical version of zeta(alpha) tail-weighted dependence measure
Description
Empirical version of zeta(alpha) tail-weighted dependence measure
Usage
zetaDep(dat,alpha,rank=TRUE,lowertail=FALSE)
Arguments
| dat | nx2 data matrix with values (in (0,1) if rank=FALSE) | 
| alpha | vector of alpha>0 for zeta measure | 
| rank | TRUE (default) if to convert data matrix to uniform scores in (0,1) | 
| lowertail | TRUE if lower tail-weighted dependence measure, default is FALSE | 
Details
This is a central dependence measure if alpha =1 and upper tail-weighted is alpha>>1
Value
Dependence measure zeta(alpha)
References
Lee D, Joe H, Krupskii P (2018). J Nonparametric Statistics, 30(2), 262-290
Examples
data(euro07gf)
udat = euro07gf$uscore
euro07names = colnames(udat)
d = ncol(udat)
for(j2 in 2:d)
{ for(j1 in 1:(j2-1))
  { zetaU = zetaDep(udat[,c(j1,j2)],alpha=15,rank=FALSE,lowertail=FALSE)
    zetaL = zetaDep(udat[,c(j1,j2)],alpha=15,rank=FALSE,lowertail=TRUE)
    zeta1 = zetaDep(udat[,c(j1,j2)],alpha=1,rank=FALSE,lowertail=FALSE)
    cat(j1,j2,round(zeta1,3),round(zetaL,3),round(zetaU,3),euro07names[j1],euro07names[j2],"\n")
  }
}
Upper Tail-weighted dependence measure zeta(C,alpha)
Description
Upper Tail-weighted dependence measure zeta(C,alpha)
Usage
zetaDepC(cpar,pcop,alpha,zero=0,iGL=FALSE,gl=0)
Arguments
| cpar | copula parameter (vector) of pcop | 
| pcop | copula cdf C, assume this takes vectorized form for u,v | 
| alpha | scalar alpha>0 for zeta measure | 
| zero | tolerance to use for zero if integrate is used, e.g., 0.0001 | 
| iGL | TRUE to use Gauss-Legendre quadrature | 
| gl | Gauss-Legendre quadratureobject with nodes/weights if iGL=TRUE | 
Details
zeta(alpha)=2+alpha-alpha/integral integral int_0^1 C( x^(1/alpha), x^(1/alpha) ) dx. This is a central dependence of measure if alpha =1 and upper tail-weighted is alpha>>1.
Value
zeta(C,alpha) ; this is upper tail-weighted is alpha>>1
References
Lee D, Joe H, Krupskii P (2018). J Nonparametric Statistics, 30(2), 262-290
Examples
# Bivariate margin of 1-factor copula
# using conditional cdf via VineCopula::BiCopHfunc2
# cpar1 = par,par2 for fam1 for first variable
# cpar2 = par,par2 for fam2 for second variable
# family codes 1:Gaussian, 2:t, 4:Gumbel, 5:Frank, 7:BB1, 14:survGumbel 17:survBB1
p1factbiv = function(u1,u2,cpar1,cpar2,fam1,fam2,nq)
{ if(length(u1)==1) u1 = rep(u1,nq)
  if(length(u2)==1) u2 = rep(u2,nq)
  gl = gaussLegendre(nq)
  wl = gl$weights
  vl = gl$nodes
  a1 = VineCopula::BiCopHfunc2(u1,vl,family=fam1,par=cpar1[1], par2=cpar1[2])
  a2 = VineCopula::BiCopHfunc2(u2,vl,family=fam2,par=cpar2[1], par2=cpar2[2])
  sum(wl*a1*a2)
}
#
# Version of zeta(C) for bivariate margin of 1-factor copula
zetaDepC_1factor = function(cpar1,cpar2,fam1,fam2,nq,alpha,zero=0,iGL=FALSE,gl=0)
{ a1 = 1/alpha
  gfn = function(x) 
  { nn = length(x)
    gval = rep(0,nn)
    # need this form because of nesting in p1factbiv()
    for(ii in 1:nn) 
    { xx = x[ii]^a1
      gval[ii] = p1factbiv(xx,xx,cpar1,cpar2,fam1,fam2,nq) 
    }
    gval
  }
  if(iGL)
  { xq = gl$nodes
    wq = gl$weight
    tem = sum(wq*gfn(xq))
  }
  else
  { tem = integrate(gfn,zero,1-zero)
  tem = tem$value
  }
  zeta = 2+alpha-alpha/tem
  zeta
}
# Tests for zeta
param = matrix(c(0.5,1.5,0.6,1.2),2,2,byrow=TRUE)
# Create BB1 copula cdf pbb1 and  BB1 surival copula cdf pbb1r using BiCopCDF
pbb1_VC = function(u,v,cpar) { VineCopula::BiCopCDF(u,v,family=7,par=cpar[1],par2=cpar[2]) }
pbb1r_VC = function(u,v,cpar) { VineCopula::BiCopCDF(u,v,family=17,par=cpar[1],par2=cpar[2]) }
gl21 = gaussLegendre(21)
zeta1u_bb1 = zetaDepC(param[1,],pbb1_VC,alpha=10,zero=0.00001,iGL=TRUE,gl=gl21)
zeta1l_bb1 = zetaDepC(param[1,],pbb1r_VC,alpha=10,zero=0.00001,iGL=TRUE,gl=gl21)
cat(zeta1u_bb1,zeta1l_bb1,"\n")
# 0.4504351 0.4776329 
zeta2u_bb1 = zetaDepC(param[2,],pbb1_VC,alpha=10,zero=0.00001,iGL=TRUE,gl=gl21)
zeta2l_bb1 = zetaDepC(param[2,],pbb1r_VC,alpha=10,zero=0.00001,iGL=TRUE,gl=gl21)
cat(zeta2u_bb1,zeta2l_bb1,"\n")
# 0.2825654 0.419787 
# Bivariate margin of 1-factor copula: linking BB1(param1) and BB1(param2) 
# Upper tail
zetau_ai = zetaDepC_1factor(param[1,],param[2,],fam1=7,fam2=7,nq=21,alpha=10,
zero=0.00001,iGL=FALSE,gl=0)
zetau_gl = zetaDepC_1factor(param[1,],param[2,],fam1=7,fam2=7,nq=21,alpha=10,
zero=0.00001,iGL=TRUE,gl=gl21)
cat(zetau_ai,zetau_gl,"\n")
# 0.1766584 0.1775621
# Lower tail
zetal_ai = zetaDepC_1factor(param[1,],param[2,],fam1=17,fam2=17,nq=21,alpha=10,
zero=0.00001,iGL=FALSE,gl=0)
zetal_gl = zetaDepC_1factor(param[1,],param[2,],fam1=17,fam2=17,nq=21,alpha=10,
zero=0.00001,iGL=TRUE,gl=gl21)
cat(zetal_ai,zetal_gl,"\n")
# 0.2664287 0.26737
# Ordering is expected based on the individual BB1(param1) and BB1(param2)
Plot zeta(alpha) against alpha
Description
Plot zeta(alpha) against alpha
Usage
zetaPlot(dat,alpha,ylim=c(0,1),inverse=FALSE)
Arguments
| dat | nx2 data matrix with values (u-data in (0,1)) | 
| alpha | vector of alpha>0 for zeta measure | 
| ylim | limits for yaxis to pass to plot | 
| inverse | if TRUE, plot zeta against 1/alpha | 
Value
nothing is returned, but a plot is produced