Os modelos copula são cada vez mais utilizadas para modelar distribuições multivariadas com marginais contínuas em domínios como a hidrologia (ver Salvadori et al. 2007), as ciências actuariais (ver Frees and Valdez 1998) ou as finanças (ver Cherubini, Vecchiato, and Luciano 2004; McNeil, Frey, and Embrechts 2005). O recente entusiasmo pela utilização desta abordagem de modelização (ver, por exemplo, Genest, Gendron, and Bourdeau-Brien 2009, para uma análise deste fenómeno em finanças) tem a sua origem num elegante teorema de representação de Sklar (1959).
Seja \(\pmb{X}=(X_1,\cdots,X_d)\) seja um vetor aleatório com funções de distribuição acumuladas marginais contínuas \(F_1,\cdots,F_d\). Sklar (1959) mostrou que a função de distribuição acumulada \(H\) de \(X\) pode ser representada como \[ \tag{6.1} H(\pmb{x})=C\big(F_1(x_1),\cdots,F_d(x_d)\big), \qquad \pmb{x}\in\mathbb{R}^d, \] em termos da função única \(C \, : \, [0,1]^d \to [0,1]\) chamada de copula, que é meramente uma função de distribuição acumulada \(d\)-dimensional, com marginais uniformes padrão.
O objetivo em muitas aplicações é estimar a função de distribuição desconhecida \(H\) a partir dos vetores de dados disponíveis \(\pmb{X}_1,\cdots,\pmb{X}_n\). A representação de Sklar sugere então que se divida a construção de um modelo para \(H\) em duas partes:
a estimativa das funções de distribuição marginais \(F_1,\cdots,F_d\) e
a estimativa da copula \(C\).
Como modelo para \(C\), poder-se-ia, por exemplo, considerar a família Gumbel-Hougaard de copulas parametrizada por um valor real \(\theta\geq 1\) e definida por \[ C_\theta^\mbox{Gu}(\pmb{u})=\exp \left( -\Big(\sum_{i=1}^d \big(-\log(u_i)\big)^\theta\Big)^{1/\theta}\right), \qquad \pmb{u}\in[0,1]^d, \] ou a família de copulas gaussiana, parametrizada pela matriz de correlação \(\Sigma\) e definida por \[ C_\Sigma^\mbox{N}(\pmb{u}=\Phi_\Sigma\big(\Phi^{-1}(u_1),\cdots,\Phi^{-1}(u_d)\big), \qquad \pmb{u}\in[0,1]^d, \] na qual \(\Phi_\Sigma\) e \(\Phi\) são as funções de distribuição acumulada da normal padrão multivariada com correlação \(\Sigma\) e da normal padrão univariada, respetivamente. Uma lista abrangente de famílias de copulas pode ser encontrada em Joe (1997) e Nelsen (2006).
Genest and Favre (2007) fazem uma excelente revisão dos conceitos e das questões estatísticas envolvidas na construção dos modelos anteriormente referidos. Em particular, neste último trabalho, tal como numa parte crescente da literatura, defende-se que a estimativa de \(C\) deve basear-se unicamente nos vectores de postos \(\pmb{R}_1,\cdots,\pmb{R}_n\), no qual \(\pmb{R}_i = (R_{i1},\cdots,R_{id})\) e cada \(R_{ij}\) é a posição ou posto de \(X_{ij}\) entre \(X_{1j},\cdots,X_{nj}\).
A utilização de postos torna a estimativa de \(C\) livre das funções marginais, o que implica que uma especificação incorrecta de uma das marginais \(F_1,\cdots,F_d\) não terá consequências na estimação da copula, ver, por exemplo, Fermanian and Scaillet (2005) e Kim, Silvapulle, and Silvapulle (2007), para argumentos empíricos a favor da utilização de postos. Neste artigo utilizamos o pacote R de funções copula de Yan and Kojadinovic (2010).
Vamos assumir que os dados em causa consistem em \(n\) cópias \(\pmb{X}_1,\cdots,\pmb{X}_n\) do vetor aleatório \(\pmb{X}\) cuja função de distribuição \(H\) admite a representação (6.1). O primeiro passo prático na construção de um modelo para \(C\) é testar se \(\pmb{X}_1,\cdots,\pmb{X}_n\) são mutuamente independentes, ou seja, se se podem ser considerados como uma amostra aleatória de \(H\).
Isto é particularmente importante em domínios como as finanças, em que os dados são tipicamente séries temporais. Se a hipótese de independência for rejeitada, pode tentar-se ajustar um modelo de série temporal a cada margem e trabalhar com os resíduos. Quando se lida com log-retornos financeiros, os modelos GARCH são uma escolha frequente para tentar remover a dependência serial nas séries temporais componentes, como discutido em Grégoire, Genest, and Gendron (2008) e Giacomini, Härdle, and Spokoiny (2009). Se a hipótese de independência não for rejeitada, um segundo passo sensato é testar a presença de dependência entre os componentes de \(X\).
No contexto em consideração, isto equivale a testar \[ H_0 \, : \, C=\Pi \qquad \mbox{contra} \qquad H_1 \, : \, C\neq \Pi, \] onde \(\Pi(\pmb{u})=\prod_{i=1}^d u_i\), \(\pmb{u}\in[0,1]^d\) é a copula de independência.
Se a independência for rejeitada, um passo típico a seguir é ajustar uma família de copulas paramétricas apropriada aos dados disponíveis. Na prática, isto equivale a efetuar testes de adequação da forma \[ H_0 \, : \, C=\mathcal{C} \qquad \mbox{contra} \qquad H_1 \, : \, C\neq \mathcal{C}, \] para várias famílias paramétricas \(\mathcal{C} = \{\mathcal{C}_\theta\}\). O passo final consiste em escolher uma das famílias que não foram rejeitadas, se for o caso, e possivelmente fornecer erros padrão para as estimativas dos parâmetros.
Todos os passos acima mencionados podem ser efectuados através do pacote R copula.
As funcionalidades básicas do pacote foram descritas em Yan (2007). Desde então, o pacote foi significativamente desenvolvido, permitindo ao utilizador, entre outros efetuar testes de independência, de independência serial e de adequação.
Um elemento importante dos testes em análise é que a copula empírica dos dados (ver Deheuvels 1979, 1981b) é um estimador consistente da copula desconhecida \(C\). Sejam \(\widehat{\pmb{U}}_1,\cdots,\widehat{\pmb{U}}_n\) sejam pseudo-observações de \(C\) definidas por \[ \widehat{\pmb{U}}_i = R_i/(n + 1), \qquad i\in \{1,\cdots,n\}\cdot \]
As componentes das pseudo-observações podem ser equivalentemente reescritas como \[ \widehat{\pmb{U}}_{ij} = \dfrac{n}{n+1}\widehat{F}_j(X_{ij}), \] em que \(\widehat{F}_j\) é a função de distribuição acumulada empírica calculada a partir de \(X_{1j},\cdots,X_{nj}\) e em que o fator de escala \(n/(n + 1)\) é introduzido para evitar problemas no limite de \([0,1]^d\).
A função copula empírica é então classicamente definida como a função de distribuição acumulada empírica calculada a partir das pseudo-observações, i.e, \[ \tag{6.2} C_n(\pmb{u})=\dfrac{1}{n}\sum_{i=1}^n \pmb{1}\big( \widehat{\pmb{U}}_i\leq \pmb{u}\big), \qquad \pmb{u}\in [0,1]^d\cdot \]
Inspirados pelo trabalho de Blum, Kiefer, and Rosenblatt (1961), Dugué (1975), Deheuvels (1981a) e, mais recentemente, Ghoudi, Kulperger, and Rémillard (2001) e Genest and Rémillard (2004) sugeriram basear um teste da independência mútua dos componentes de \(\boldsymbol{X}\) na estatística \[ I_n = \int_{[0,1]^d} n\left(C_n(\pmb{u})-\prod_{i=1}^d u_i \right)^2 \mbox{d}\pmb{u}\cdot \]
Um aspeto interessante do teste em análise advém do facto de, sob a independência mútua das componentes \(X_1,\cdots,X_d\) de \(\pmb{X}\), o processo empírico \(\sqrt{n}\{C_n-\Pi\}\) pode ser decomposto, usando a transformada de Möbius (Rota 1964), em \(2^d-d-1\) sub-processos \(\sqrt{n}\mathcal{M}_A(C_n)\), \(A\subset \{1,\cdots,d\}\), \(|A| > 1\), que convergem conjuntamente para processos Gaussianos centrados e fechados, mutuamente independentes.
Uma propriedade fundamental desta decomposição, cuja forma é dada com precisão, por exemplo, em Genest and Rémillard (2004), é que a independência mútua entre \(X_1,\cdots,X_d\) é equivalente a ter \(\mathcal{M}_A(C)(\pmb{u}) = 0\), para todo \(\pmb{u}\in [0,1]^d\) e todo \(A\subset \{1,\cdots,d\}\) tais que \(|A| > 1\).
Em vez da estatística de teste única \(I_n\), isto sugere considerar \(2^d-d-1\) estatísticas de teste da forma \[ M_{A,n}=\int_{[0,1]^d} n\big( \mathcal{M}_A(C_n)(\pmb{u})\big)^2 \mbox{d}\pmb{u}, \] onde \(A\subset \{1,\cdots,d\}\) e \(|A| > 1\), que são assintoticamente independentes entre si sob a hipótese nula de independência.
Cada estatística \(M_{A,n}\) pode ser vista como centrada na dependência entre os componentes de \(\pmb{X}\) cujos índices estão em \(A\). A decomposição acima foi recentemente alargada por Kojadinovic and Holmes (2009) à situação em que se pretende testar a independência mútua de vários vectores aleatórios contínuos.
Como alternativa à estatística \(I_n\), Genest and Rémillard (2004; ver também Genest and Favre 2007) estudaram várias formas de combinar as \(2^d-d-1\) estatísticas \(M_{A,n}\) numa única estatística global para testar a independência. Duas regras de combinação implementadas no pacote copula são as de Fisher (1932) e Tippett (1931). O teste baseado na primeira tende a fornecer os melhores resultados e verificou-se que supera frequentemente o teste baseado em \(I_n\) nas experiências de Monte Carlo efectuadas por Genest and Rémillard (2004) e Kojadinovic and Holmes (2009).
Para visualizar os resultados do teste de independência quando baseado em todas as \(2^d-d-1\) estatísticas \(M_{A,n}\), uma representação gráfica, chamada de dependograma, pode ser usada. Para cada subconjunto \(A\subset \{1,\cdots,d\}\), \(|A|>1\), uma barra vertical é desenhada cuja altura é proporcional ao valor de \(M_{A,n}\). Os valores críticos aproximados de \(M_{A,n}\) são representados nas barras por marcadores pretos. Subconjuntos para os quais a barra excede o valor crítico podem ser considerados como sendo compostos de variáveis dependentes. Exemplos de tal representação são dados nas Figuras 6.2 e 6.3.
Os testes descritos acima são implementados nas funções indepTestSim e indepTest do pacote da copula. A função indepTestSim não recebe dados como entrada. Devolve um objeto da classe indepTestDist que contém um grande número de realizações independentes aproximadas das estatísticas do teste sob independência mútua.
A função indepTest recebe os dados e o objeto da classe indepTestDist devolvido anteriormente e devolve as estatísticas e os seus \(p\)-valores aproximados. O dependograma pode ser representado através da função dependogram. A função que implementa a extensão de Kojadinovic and Holmes (2009) que permite testar a independência entre vectores aleatórios contínuos chama-se multIndepTest e a sua utilização é semelhante à da função indepTest.
library(copula)
LossALAE = read.csv2(file = "http://leg.ufpr.br/~lucambio/Nonparam/LossALAE.csv")
Loss = log(LossALAE$Loss)
ALAE = log(LossALAE$ALAE)
n = length(LossALAE)
system.time(d <- indepTestSim(length(ALAE), p = 2, N = 10, verbose = interactive()))
## usuário sistema decorrido
## 0.677 0.008 0.685
teste = indepTest(cbind(ALAE,Loss), d)
dependogram(teste)
grid()
box()
Teste de independência multivariada baseado no processo de cópula empírica proposto por Christian Genest e Bruno Rémillard. O teste pode ser visto como composto de três etapas: (i) uma etapa de simulação, que consiste em simular a distribuição das estatísticas do teste sob independência para o tamanho da amostra em consideração; (ii) o teste em si, que consiste em calcular os valores-p aproximados das estatísticas do teste em relação às distribuições empíricas obtidas na etapa (i); e (iii) a exibição de um gráfico, chamado de dependograma, permitindo entender o tipo de desvio da independência, se houver. Mais detalhes podem ser encontrados nos artigos citados na seção de referências.
Aqui utilizaremos como exemplo o Bitcoin (BTC-USD), Ethereum (ETH-USD) e Dogecoin (DOGE-USD).
library(quantmod)
library(tidyverse)
tickers <- c("BTC-USD", "ETH-USD", "DOGE-USD")
getSymbols(Symbols = tickers, # Os tickers dos ativos a serem coletados
src = "yahoo", # A fonte da coleta dos dados
auto.assign = TRUE, # Permitir que faça a auto atribuição
warnings = FALSE,
)
## [1] "BTC-USD" "ETH-USD" "DOGE-USD"
A função getSymbols() permite que realizemos a coleta de dados direto do Yahoo Finance. É feito também uma auto atribuição dos dados coletados a objetos com o nomes dos tickers na forma OHLCVA (Open, High, Low, Close, Volume e Adjusted). Podemos por fim realizar a visualização dos dados coletados. O próprio pacote fornece meios simplificados para gerar os gráficos.
BTC.USD = log(`BTC-USD`)
head(BTC.USD)
## BTC-USD.Open BTC-USD.High BTC-USD.Low BTC-USD.Close BTC-USD.Volume
## 2014-09-17 6.143894 6.148840 6.114615 6.125414 16.86273
## 2014-09-18 6.124377 6.124377 6.023699 6.050771 17.35598
## 2014-09-19 6.049976 6.058738 5.952027 5.978369 17.45098
## 2014-09-20 5.978058 6.048072 5.965847 6.013480 17.42274
## 2014-09-21 6.011475 6.022057 5.974270 5.988513 17.09567
## 2014-09-22 5.989212 6.008607 5.984264 5.996830 16.99887
## BTC-USD.Adjusted
## 2014-09-17 6.125414
## 2014-09-18 6.050771
## 2014-09-19 5.978369
## 2014-09-20 6.013480
## 2014-09-21 5.988513
## 2014-09-22 5.996830
chartSeries(BTC.USD,theme = chartTheme('white', up.col='blue', dn.col='red'))
BTC.USD.Open = (diff(BTC.USD[,1])[-1]) * 100 # log-returnos (em percentagem)
BTC.USD.High = (diff(BTC.USD[,2])[-1]) * 100 # log-returnos (em percentagem)
BTC.USD.Low = (diff(BTC.USD[,3])[-1]) * 100 # log-returnos (em percentagem)
BTC.USD.Close = (diff(BTC.USD[,4])[-1]) * 100 # log-returnos (em percentagem)
BTC.USD.Volume = (diff(BTC.USD[,5])[-1]) * 100 # log-returnos (em percentagem)
BTC.USD.Adjusted = (diff(BTC.USD[,6])[-1]) * 100 # log-returnos (em percentagem)
plot(BTC.USD.Close, type = "h")
Começamos com o gráfico de probabilidade do perfil do fulcro que indica que um valor δ=0,45 é aproximadamente correto.
retornos = data_frame(BTC.USD.Open,BTC.USD.High,BTC.USD.Low,BTC.USD.Close,BTC.USD.Volume,BTC.USD.Adjusted)
nrow(retornos)
## [1] 3886
apply(retornos, 2, function(x) length(unique(x)))
## BTC.USD.Open BTC.USD.High BTC.USD.Low BTC.USD.Close
## 3886 3886 3886 3886
## BTC.USD.Volume BTC.USD.Adjusted
## 3886 3886
Também se pode verificar que as todas as variáveis 3739 valores únicos, respetivamente, o que significa que não existem empates nos dados. A presença de empates pode ser atribuída a questões de arredondamento e precisão. Pode-se verificar que ignorar os empates, por exemplo, utilizando pontos médios para calcular pseudo-observações, pode afetar qualitativamente as conclusões da análise.
De fato, todos os testes descritos nas seções anteriores foram derivados sob o pressuposto de margens contínuas, o que implica que os empates ocorrem com probabilidade zero. Para lidar com os empates de uma forma ligeiramente mais satisfatória, propoe-se a construção de pseudo-observações quebrando aleatoriamente os empates. Este trabalho, nesta situação, não foi necessário.
library(copula)
#myAnalysis = function(dados){
# pseudo.dados = sapply(dados, rank, ties.method = "random")/(nrow(dados)+1)
# indTest = gofCopula(pseudo.dados)
# gof.g = gofCopula(gumbelCopula(1), pseudo.dados, method="itau",simulation="mult")$pvalue
#
#}
#myReps = t(replicate(100, myAnalysis(retornos)))
#round(apply(myReps, 2, summary), 3)
O nosso modelo de base é um modelo com ARMA(1,1) copula e a transformação v com fulcro em δ=0,45.
#mod_Gauss = vtscopula(copmod_Gauss, Vlinear(as.numeric(profile.U[maximo,1])))
#fit_Gauss = fit(mod_Gauss, U)
#fit_Gauss
#copmod_Frank = dvinecopula2(family = "frank",
# pars = list(ar = 0.95, ma = -0.85),
# maxlag = 30)
#mod_Frank = vtscopula(copmod_Frank, Vlinear(as.numeric(profile.U[maximo,1])))
#fit_Frank = fit(mod_Frank, U)
#AIC(fit_Gauss, fit_Frank)
#par(mfrow=c(1,2), pch=19, cex=0.8)
#plot(fit_Gauss, plottype = "residual");grid()
#plot(fit_Gauss, plottype = "kendall");grid()
#library(astsa)
#residuos = resid(fit_Gauss)
#sarima(residuos,0,0,0,no.constant = TRUE)
#predict(fit_Gauss)
O teste de independência multivariada proposto por Deheuvels (1981a) pode ser estendido para testar a aleatoriedade, conforme sugerido por Genest and Rémillard (2004), ver também Ghoudi, Kulperger, and Rémillard (2001). Dada uma sequência univariada estacionária e ergódica de variáveis aleatórias contínuas \(X_1,X_2,\cdots\) e um inteiro \(p > 1\), primeiro forme vetores de observações \(p\)-dimensionais \(\pmb{Y}_i = (X_i,\cdots,X_{i+p-1})\), \(i\in\{1,\cdots,n\}\), onde \(p\) é a dimensão de incorporação.
O valor de \(p\), que determina o atraso máximo, deve ser escolhido pelo usuário. O desvio da independência serial pode então ser medido usando a estatística \[ I_n^*=\int_{[0,1]^p} n\Big(C_n^s(\pmb{u})-\displaystyle \prod_{k=1}^p u_k \Big)^2 \mbox{d}u, \] onde \(C_n^s\) é o análogo serial da copula empírica e é calculado a partir de \(\pmb{Y}_1,\cdots,\pmb{Y}_n\).
Quanto ao teste de independência multivariada descrito na seção anterior, a transformada de Möbius pode ser usada para derivar um conjunto de estatísticas \(M_{A,n}^s\), \(A\subset\{1,\cdots,p\}\), \(1\in A\), \(|A|>1\), que convergem conjuntamente para variáveis aleatórias mutuamente independentes sob independência serial.
Cada uma das estatísticas \(M_{A,n}^s\) pode ser vista como focada no afastamento da independência serial decorrente dos atrasos \(\{i+1\, : \, i\in A\}\). Como na seção anterior, essas estatísticas podem ser combinadas em uma estatística global usando as regras de combinação de Fisher (1932) ou Tippett (1931) para fornecer um teste potencialmente mais poderoso do que aquele baseado em \(I_n^s\).
As funções que implementam esses testes são serialIndepTestSim e serialIndepTest. Seu uso é semelhante ao de suas contrapartes não seriais. A abordagem anterior foi estendida por Kojadinovic and Yan (2011b) para a situação em que se deseja testar a dependência serial em séries temporais multivariadas contínuas. A função correspondente é chamada multSerialIndepTest.
Os testes de qualidade de ajuste implementados no pacote copula são todos baseados no processo empírico \[ \tag{6.3} \mathbb{C}_n(\pmb{u})=\sqrt{n}\big(C_n(\pmb{u})-C_{\theta_n}(\pmb{u}) \big), \quad \pmb{u}\in [0,1]^d, \] onde \(C_n\) é a copula empírica definida em (6.2) e \(C_{\theta_n}\) é um estimador de \(C\) sob a hipótese de que \[ H_0 \, : \, C\in \{C_\theta\} \] seja válida.
O estimador \(\theta_n\) de \(\theta\) que aparece em (6.3) é novamente baseado exclusivamente em classificações. É um dos dois estimadores do método do momento baseados respectivamente na inversão do \(\tau\) de Kendall e do \(\rho\) de Spearman, ou o estimador de máxima pseudo-verossimilhança Genest, Quesada Molina, and Rodríguez Lallena (1995).
Nos experimentos de Monte Carlo em larga escala realizados por Berg (2009) e Genest, Rémillard, and Beaudoin (2009), a estatística \[ \tag{6.4} S_n=\int_{[0,1]^d} \mathbb{C}_n(\pmb{u})^2 \mbox{d}C_n(\pmb{u})=\sum_{i=1}^n \Big(C(\widehat{\pmb{U}}_i)-C_{\theta_n}(\widehat{\pmb{U}}_i) \Big)^2 \] apresentou os melhores resultados gerais.
Um \(p\)-valor aproximado para \(S_n\) pode ser obtido por meio de um procedimento paramétrico baseado em bootstrap, que é relembrado na próxima subseção e cuja validade foi recentemente demonstrada por Genest and Rémillard (2008). A principal inconveniência dessa abordagem é seu custo computacional muito alto, pois cada iteração requer tanto a geração de números aleatórios a partir da copula ajustada quanto a estimativa dos parâmetros da copula.
À medida que o tamanho da amostra aumenta, a aplicação do teste de qualidade de ajuste baseado em bootstrap paramétrico torna-se proibitiva. Para contornar esse custo computacional muito alto, um procedimento rápido de teste para grandes amostras baseado em teoremas do limite central foi proposto em Kojadinovic, Yan, and Holmes (2010); ver também Kojadinovic and Yan (2011a).
Um \(p\)-valor aproximado para o teste com base na estatística definida em (6.4) pode ser obtido por meio do seguinte procedimento; ver Genest and Rémillard (2008) para mais detalhes:
Calcular \(C_n\) a partir das pseudo-observações \(\widehat{U}_1,\cdots,\widehat{U}_n\) e estimar \(\theta\) a partir de \(\widehat{U}_1,\cdots,\widehat{U}_n\) por meio de um estimador baseado nos postos \(\theta_n\).
Calcular a estatística de teste \(S_n\) definida em (6.4).
Para algum inteiro grande \(N\), repita os seguintes passos para cada \(k\in\{1,\cdots,N\}\):
Gere uma amostra aleatória \(\pmb{X}_1^{(k)},\cdots,\pmb{X}_n^{(k)}\) a partir da copula \(C_{\theta_n}\) e calcule as pseudo-observações associadas \(\widehat{U}_1^{(k)},\cdots,\widehat{U}_n^{(k)}\).
Seja \[ C_n^{(k)}=\dfrac{1}{n}\sum_{i=1}^n \pmb{1}\big(\widehat{U}_i^{(k)}\leq \pmb{u}\big), \quad \pmb{u}\in [0,1]^d, \] e calcular o estimador \(\theta_n^{(k)}\) de \(\theta\) a partir de \(\widehat{U}_1^{(k)},\cdots,\widehat{U}_n^{(k)}\) usando o mesmo estimador baseado em classificação da Etapa 1.
Calcular uma realização independente aproximada de \(S_n\) sob \(H_0\) por \[ S_n^{(k)}=\sum_{i=1}^n \Big(C_n^{(k)}\big(\widehat{U}_i^{(k)}\big)-C_{\theta_n^{(k)}} \big(\widehat{U}_i^{(k)}\big) \Big)^2\cdot \]
Como se pode observar, este procedimento é muito intensivo em termos computacionais, pois cada iteração na Etapa 3 envolve a geração de números aleatórios a partir da copula hipotética e a estimativa dos parâmetros da copula.
Isso é particularmente verdadeiro se \(\theta_n\) for o estimador de máxima pseudo-verossimilhança. Quando \(n\) atinge 300, os extensos experimentos de Monte Carlo realizados para \(d\) = 2, 3 e 4 em Kojadinovic and Yan (2011a) indicam que se pode, alternativamente, usar com segurança a abordagem do multiplicador rápido descrita na próxima subseção.
Observe que, no pacote copula, os \(p\)-valores aproximados são calculados usando a expressão ligeiramente modificada \[ \dfrac{1}{N+1}\Big(\sum_{k=1}^N \pmb{1}\big(S_n^{(k)}\geq S_n \big)+\dfrac{1}{2} \Big) \] para garantir que estejam no intervalo aberto (0,1), de modo que as transformações por inversas de funções de distribuição de distribuições contínuas sejam sempre bem definidas.
Esta convenção é adotada para todos os testes para os quais \(p\)-valores aproximados são calculados usando a função de distribuição empírica. Consequentemente, \(p\)-valores aproximados são números no conjunto \[ \left\{\dfrac{1}{N+1}\Big(0+\dfrac{1}{2}\Big),\dfrac{1}{N+1}\Big(1+\dfrac{1}{2}\Big),\cdots,\dfrac{1}{N+1}\Big(N+\dfrac{1}{2}\Big) \right\}\cdot \]
Inspirado no trabalho seminal de Scaillet (2005) e Rémillard e Scaillet (2009), uma alternativa válida e muito mais rápida ao procedimento paramétrico baseado em bootstrap apresentado anteriormente foi recentemente proposta por Kojadinovic et al. (2010).
A eficiência computacional do procedimento decorre do fato de que, sob condições de regularidade adequadas, o processo de qualidade de ajuste Cn pode ser escrito como