R中的copula包
关于copula函数包的介绍:copula包提供了(S4)类常用的椭圆、(嵌套)阿基米德、极值和其他copula族;密度、分布、随机数生成和绘图方法。拟合联结模型和拟合优度检验。独立性和序列(单变量和多变量)独立性检验,以及其他相关检验。
生成copula随机数
生成copula随机数,需要两个步骤,分别是第一步,设定copula的类型;第二步,生成随机数。
设定常用copula
copula函数包内主要包含:
椭圆copula(ellipCopula)
阿基米德copula(archmCopula and acopula)
极值copula(evCopula)
其他的copula,比如Plackett和Farlie-Gumbel-Morgenster
1. 椭圆类copula
椭圆类copula中主要包含了normal copula以及t-copula
ellipCopula # 构造椭圆类copula类对象的构造
创建椭圆类copula的方法
ellipCopula (family, param, dim = 2, dispstr = "ex", df = 4, ...)
normalCopula(param, dim = 2, dispstr = "ex") #构造正态copula
tCopula(param, dim = 2, dispstr = "ex", df = 4,df.fixed = FALSE, df.min = 0.01) #构造t-copula
family:指定椭圆联结函数族的字符串。必须是normal(默认)或者t
param:指定参数值的数字向量;即指相关系数矩阵里面的待估参数
dim:变量的个数
dispstr: 表示椭圆copula的对称正定矩阵类型的字符串,即所有变量中相关系数矩阵之间的关系。目前可用的结构有“ex”for exchangeable、“ar1”for AR(1)、“toep”for Toeplitz(toeplitz)和“un”for unstructured。
df:指定用于构造t序列的多元t分布的自由度数的整数值
df.fited:指定自由度df是否将被视为参数(待估计)。默认值FALSE表示如果将对象作为参数传递给fitCopula,则要估计df。
df.min:df的严格下界,主要是在df拟合时。fixed=FALSE,使用fitCopula。df.min是非负的。
例子:
生成copula
data1 = ellipCopula("normal",param = c(0.5, 0.6, 0.7),3,dispstr ="un")
data2 = normalCopula(param=c(0.5, 0.6, 0.7), dim = 3, dispstr = "un")
2. 阿基米德copula
阿基米德copula主要包含了claytonCopula、frankCopula以及gumbelCopula等
archmCopula # 构造阿基米德类copula类对象的构造
创建阿基米德copula的方法
1
archmCopula(family, param = NA_real_, dim = 2, ...)
claytonCopula(param = NA_real_, dim = 2,use.indepC = c("message", "TRUE", "FALSE"))
frankCopula(param = NA_real_, dim = 2,use.indepC = c("message", "TRUE", "FALSE"))
gumbelCopula(param = NA_real_, dim = 2,use.indepC = c("message", "TRUE", "FALSE"))
amhCopula(param = NA_real_, dim = 2,use.indepC = c("message", "TRUE", "FALSE"))
joeCopula(param = NA_real_, dim = 2,use.indepC = c("message", "TRUE", "FALSE"))
family:指定阿基米德copula属的字符串。目前支持的是"clayton", “frank”, “amh”, “gumbel”, and “joe”
param:copula中的待估参数
dim:变量的个数
use.indepC:一个字符串,指定在参数θ param处于相应阿基米德copula为独立copula的边界或极限情况下,是否应返回独立copula。默认情况下会返回带有消息的indepCopula(),而使用"TRUE"则不会返回消息。这使得结果对象通常更有用,但不会返回所需阿基米德copula族
例子:
## claycopula
data1 = archmCopula("clayton", param = 2, dim = 3)
data2 = claytonCopula(param = 2, dim = 3)
生成copula的随机数
rCopula(n,copula)
n:表示生成随机数的个数
copula:我们设定的copula的类型
例子
data = ellipCopula("normal", param = c(0.5, 0.6,0.7),dim = 3, dispstr = "un")
set.seed(12)
rCopula(100, data)
由 Copulas 构造的多元分布
通过 copula 和参数边距进行密度、分布函数和随机生成数多元分布。
主要涉及的函数为mvdc,dmvdc,pmvdc,rmvdc
mvdc(copula, margins, paramMargins, marginsIdentical = FALSE,check = TRUE, fixupNames = TRUE)
dMvdc(x, mvdc, log=FALSE)
pMvdc(x, mvdc)
rMvdc(n, mvdc)
mvdc函数:产生基于copula,且其边际分布分别服从某些分布的随机数
copula:copula函数的种类
margins:设定边际分布的种类
paramMargins:边际分布中的分布参数值。对于正态分布,里面的分布参数是mean和sd,对于学生t分布,里面的分布参数是df,对于指数分布,里面的分布参数是rate,对于gamma分布里面的分布参数是shape和scale(或者rate)
marginsIdentical:限制边际分布是否相同
check:逻辑指示应用快速检查是否存在边距“p*”和“d*”函数
fixupNames:逻辑指示页边距的参数是否应该获得自动名称
例:
data = mvdc(normalCopula(0.75), c("norm", "exp"),list(list(mean = 0, sd =2), list(rate = 2)))
#生成基于正态copula且边际分布分别服从指数分布和gamma分布的多元分布
dmvdc函数:产生基于copula的密度函数
pmvdc函数:产生基于copula的分布函数
rmvdc函数:产生基于copula的随机生成数
x:一个长度为联维d的数值向量,或者一个列数为d的矩阵,给出需要计算密度或分布函数的点的坐标。
mvdc:“mvdc”对象
log:逻辑指示是否应该返回密度
例:
mv.NE <- mvdc(normalCopula(0.75), c("norm", "exp"),list(list(mean = 0, sd =2), list(rate = 2)))
dim(mv.NE)
mv.NE # using its print() / show() method
persp (mv.NE, dMvdc, xlim = c(-4, 4), ylim=c(0, 2), main = "dMvdc(mv.NE)") # 三维视图
contour(mv.NE, dMvdc, xlim = c(-4, 4), ylim=c(0, 2)) # 等高线图