Neste trabalho, implementamos os resultados, obtidos na dissertação de mestrado, para o Custo Mínimo Esperado (Teórico) entre eventos de dois processos de Poisson independentes e simulamos, a partir de amostras aleatórias de tempos de chegada, obtendo o Custo Mínimo Estimado.
A programação foi realizada na linguagem R (https://www.r-project.org/), utilizando o IDE RStudio (link).
IDE é o ambiente de desenvolvimento integrado (Em inglês, Integrated Development Environment).
Considere dois processos de Poisson independentes com taxas de chegada \(\lambda_1\) e \(\lambda_2\), cujos tempos de chegadas são, respectivamente, \(X_1,X_2,\cdots\) e \(Y_1,Y_2,\cdots\). Então, a fórmula
\[E[|X_k-Y_k|]=k\bigg(\frac{1}{\lambda_1}-\frac{1}{\lambda_2}\bigg)+2k\bigg(\frac{I_x(k,k+1)}{\lambda_2}-\frac{I_x(k+1,k)}{\lambda_1}\bigg),\] é válida para \(r\geq0\), \(k\geq1\) inteiros e \(\lambda_1,\lambda_2>0\).
\(I_x(a,b)\) é a função beta incompleta regularizada e \(x=\lambda_1/(\lambda_1+\lambda_2)\).
(Demonstração: Ver a dissertação de Mestrado.)
E<-function(k,l1,l2){
x<-l1/(l1+l2)
res<-k*(1/l1-1/l2)+2*k*((1/l2)*pbeta(x,k,k+1)-(1/l1)*pbeta(x,k+1,k))
return(res)
}
O Custo é dado pelo soma da Distância Esperada:
\[ C_{opt}(n,\lambda_1,\lambda_2)=\sum\limits_{k=1}^{n}E[|X_k-Y_k|]\]
Custo_teorico<-function(n,l1,l2){
custo<-numeric(length(n))
for (j in 1:length(n)){
custo[j]<-sum(E(1:n[j],l1,l2))
}
return(custo)
}
Sejam as amostras aleatórias de tempos de chegada \(X_i=(X_{i1},X_{i2},\cdots, X_{im})\) e \(Y_i=(Y_{i1},Y_{i2},\cdots, Y_{im})\); \(i\in \{1,2,\ldots,n\}\) de dois processos de Poisson independentes com taxas \(\lambda_1\) e \(\lambda_2\), respectivamente. Temos que
\[X_{ij}\sim Gama(i,\lambda_1) \quad \mbox{e} \quad Y_{ij}\sim Gama(i,\lambda_2),\quad \forall\; (i,j)\in\{1,\ldots,n\}\times \{1,\ldots,m\}.\]
Nas matrizes abaixo, encontram-se as amostras de tamanho \(m\) dos \(n\) primeiros tempos de chegada. \[ \begin{bmatrix} X_{11} & X_{12} & \cdots & X_{1m}\\ X_{21} & X_{22} & \cdots & X_{2m}\\ \vdots & \vdots & \ddots & \vdots\\ X_{n1} & X_{n2} & \cdots & X_{nm} \end{bmatrix} \qquad \mbox{e}\qquad \begin{bmatrix} Y_{11} & Y_{12} & \cdots & Y_{1m}\\ Y_{21} & Y_{22} & \cdots & Y_{2m}\\ \vdots & \vdots & \ddots & \vdots\\ Y_{n1} & Y_{n2} & \cdots & Y_{nm} \end{bmatrix} \]
O Custo Mínimo Estimado é dado por
\[\hat{C}_{opt}(n,m,\lambda_1,\lambda_2)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\frac{1}{m}\big|X_{ij}-Y_{ij}\big|,\] em que \(m\) é o tamanho das amostras e \(n\) é a quantidade de amostras.
Custo.est<-function(n,m,l1,l2) {
# l1: taxa do processo 1
# l2: taxa do processo 2
# n: quantidade de amostras de tempo; (n primeiras chegadas)
# m: tamanho de cada amostra do tempo X_i
Custo<-numeric(length(n))
for (j in 1:length(n)){
mat.X<-matrix(0,nrow=n[j],ncol=m)
mat.Y<-matrix(0,nrow=n[j],ncol=m)
for (i in 1:n[j]){
mat.X[i,]<-rgamma(m,i,l1) # m tempos X_i do 1o processo
mat.Y[i,]<-rgamma(m,i,l2) # m tempos Y_i do 2o processo
}
Custo[j]<-sum(rowMeans(abs(mat.X-mat.Y)))
}
return(Custo)
}
Seja \(X_1,X_2,\ldots,X_n\) uma amostra aleatória de uma distribuição Gama(\(\alpha,\beta\)) com parâmetros de forma e de escala desconhecidos. Nesse caso, podemos usar o método de estimação por Máximo-Verossimilhança. Através desse método, mostra-se que
\[ \hat{\alpha}\approx\frac{0.5}{log(\bar{x})-\overline{log(x)}} \quad \mbox{e} \quad \hat{\beta}\approx\frac{\hat{\alpha}}{\bar{x}}. \]
\[ \begin{aligned} E(\hat{C}_{opt})&=E\bigg[\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\frac{1}{m}\big|X_{ij}-Y_{ij}\big|\bigg]\\ &\overset{(linear)}{=}\frac{1}{m}\sum\limits_{j=1}^{m}\sum\limits_{i=1}^{n}E\big[|X_{ij}-Y_{ij}|\big]\\ &\overset{(id)}{=}\frac{1}{m}\sum\limits_{j=1}^{m}\underbrace{\sum\limits_{i=1}^{n}E\big[|X_i-Y_i|\big]}_{C_{opt}\;\; \text{(independe de $j$)}}\\ &=\frac{1}{m}\sum\limits_{j=1}^{m}C_{opt}= C_{opt}. \end{aligned} \]
\[ \begin{aligned} Var(\hat{C}_{opt})&=Var\bigg(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\frac{1}{m}\big|X_{ij}-Y_{ij}\big|\bigg)\\ &=\frac{1}{m^2}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}Var(X_{ij}-Y_{ij})\\ &=\frac{1}{m^2}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\bigg(Var(X_{ij})+Var(Y_{ij})\bigg)\\ &= \frac{1}{m}\sum\limits_{i=1}^{n}\bigg(\frac{i}{\lambda_{1}^2}+\frac{i}{\lambda_{2}^2}\bigg)=\frac{n(n+1)}{2m}\bigg(\frac{1}{\lambda_1^2}+\frac{1}{\lambda_2^2}\bigg). \end{aligned} \]
A Lei dos Grandes Números garante a seguinte convergência em probabilidade
\[\hat{C}_{opt} \to C_{opt}, \quad m\to \infty \]
Defina-se a variável aleatória \(Z\) como segue
\[ Z:=\frac{\hat{C}_{opt}-E\big[\hat{C}_{opt}\big]}{\sqrt{Var(\hat{C}_{opt})}}, \]
em que \(E\big[\hat{C}_{opt}\big]=C_{opt}\), conforme mostrado em 3.1.2 .
Assintoticamente, \(Z\sim N(0,1)\). Logo, \(Z\) é uma quantidade pivotal (ver Casella and Berger (2002)).
Utilizaremos esta quantidade na construção de um Intervalo de Confiança para \(C_{opt}\).
A partir da Quantidade Pivotal, pode-se mostrar que o seguinte Intervalo de Confiança (IC) para \(C_{opt}\). \[IC_{100(1-\alpha)\%}(C_{opt})=\bigg[\;\hat{C}_{opt}-z_{(\alpha/2)}\sqrt{Var(\hat{C}_{opt})}\;,\;\hat{C}_{opt}+z_{(1-\alpha/2)}\sqrt{Var(\hat{C}_{opt})}\;\bigg]\] é válido.
## Variancia do Custo Estimado
Var_Custo.est<-function(n,m,l1,l2){(n*(n+1)/(2*m))*(1/l1^2+1/l2^2)}
## Intervalo de Confiança ao nível de 95%
Intervalo<-function(n,m,l1,l2){
int<-Custo.est(n,m,l1,l2)+c(-1,1)*qnorm(0.975)*sqrt(Var_Custo.est(n,m,l1,l2))
return( int )
}
set.seed(23/12/20)
n<-1200:1250
Int<-sapply(n,Intervalo,m=100,l1=0.95,l2=0.9)
LI<-Int[1,]
LS<-Int[2,]
CUSTO<-sapply(n,Custo_teorico,l1=0.95,l2=0.90)
plot(n,CUSTO,type="l")
lines(n,LI,col="red" )
lines(n,LS,col="blue" )
title(main="Custo Mínimo Esperado e Intervalo de Confiança a 95%")
legend("topleft", inset=.02, legend=c("Limite Superior", "Custo Esperado","Limite Inferior"),
col=c("blue", "black","red"), lty=c(1,1,1), cex=0.8)
data <- data.frame(n = n,
custo = CUSTO,
li = LI,
ls = LS)
#install.packages("ggplot2")
library(ggplot2)
ggplot(data, aes(n, custo)) +
geom_point() +
geom_line() +
geom_errorbar(aes(ymin = li, ymax = ls)) +
labs(x = "n",
y = "Custo",
title = "Custo Mínimo Esperado de Transporte e Intervalo de Confianca ao nível 95%")
#ggsave(p, filename = "C:/Users/adolfoamds/Documents/test2.pdf",height = 10, width = 5)
par(mfrow=c(1,2))
l1<-0.95 ; l2<-0.90
n<-100:130
CUSTO<-sapply(n,Custo_teorico,l1=l1,l2=l2)
CUSTO.est<-sapply(n,Custo.est,m=100,l1=l1,l2=l2)
## Grafico do Custo
plot(n,CUSTO.est,type="l",ylab="Custo")
lines(n,CUSTO,col="red")
title(main="Custo Esperado X Custo Estimado")
legend("topleft", inset=.02, expression(lambda[1]~"= 0.95, "~lambda[2]~" = 0.90"))
legend("bottomright",inset=.02,legend=c("Custo Esperado","Custo Estimado"),
col=c("red", "black"), lty=c(1,1), cex=0.8)
plot(n,CUSTO.est,pch=1,ylab="Custo",main = "Custo Esperado X Custo Estimado")
lines(n,CUSTO, col="red")
legend("topleft", inset=.02, expression(lambda[1]~"= 0.95, "~lambda[2]~" = 0.90"))
legend("bottomright",inset=.02,legend=c("Custo Esperado","Custo Estimado"),
col=c("red", "black"), lty=c(1,1), cex=0.8)
n0<-10:100
m0<-10:100
CUSTO<-sapply(n0,Custo_teorico,l1=l1,l2=l2)
CUSTO.est<-mapply(Custo.est,n0,m0,MoreArgs = list(l1=l1,l2=l2))
#x11()
#plot(m0,CUSTO.est,pch=1,ylab="Custo",main = "Custo Esperado X Custo Estimado")
#lines(n0,CUSTO, col="red")
#legend("topleft", inset=.02, expression(lambda[1]~"= 0.95, "~lambda[2]~" = 0.90"))
#legend("bottomright",inset=.02,legend=c("Custo Esperado","Custo Estimado"),
#col=c("red", "black"), lty=c(1,1), cex=0.8)
\[ F_n(x)=\begin{cases} 0, & \text{se}\;\; x<x_{(1)},\\ \frac{i}{n}, & \text{se}\;\; x_{(i)}\leq x < x_{(i+1)}, \;\;\forall\;i: 1 \leq i<n,\\ 1, & \text{se}\;\; x\geq x_{(n)}, \end{cases}, \]
em que \(x_{(1)}, x_{(2)},\cdots, x_{(n)}\) são realizações ordenadas das variáveis aleatórias \(X_1,X_2,\cdots,X_n\).
Alternativamente, temos
\[ F_n(x)=\sum\limits_{i=1}^{n}\frac{I_{\{x_i\leq x\}}(x_i)}{n}. \]
## Grafico da Funcao de Distribuicao Empirica
n<-100:130
l1<-rep(0.95,4)
l2<-c(0.90,0.92,0.94,0.95)
par(mfrow=c(2,2))
for (i in 1:4) {
plot.ecdf(Custo.est(n,m=100,l1[i],l2[i]),main="Distribuição Empírica do Custo Estimado")
legend("topleft", legend=bquote(lambda[1]==.(l1[[i]]) ~ "," ~lambda[2]==.(l2[[i]])) )
}
#install.packages("knitr")
library(knitr)
n<-100:110
C_est<-Custo.est(n,m=100,0.95,0.90)
C_Teo<-Custo_teorico(n,0.95,0.90)
Int<-sapply(n,Intervalo,m=100,l1=0.95,l2=0.90)
LI<-Int[1,]
LS<-Int[2,]
dados1<-data.frame(n=n,
Custo_Estimado=C_est,
Custo_Esperado=C_Teo,
Limite_Inferior=LI,
Limite_Superior=LS
)
kable(dados1,digits = 2,caption=" Tabela para o Custo de Transporte (Taxa 1=0.95 e Taxa 2=0.90)")
| n | Custo_Estimado | Custo_Esperado | Limite_Inferior | Limite_Superior |
|---|---|---|---|---|
| 100 | 852.28 | 852.62 | 822.85 | 865.48 |
| 101 | 866.01 | 865.77 | 848.85 | 891.91 |
| 102 | 882.71 | 878.99 | 855.86 | 899.34 |
| 103 | 880.78 | 892.28 | 862.17 | 906.08 |
| 104 | 903.10 | 905.65 | 880.03 | 924.36 |
| 105 | 919.14 | 919.09 | 902.49 | 947.25 |
| 106 | 930.17 | 932.60 | 901.15 | 946.33 |
| 107 | 942.68 | 946.19 | 922.50 | 968.11 |
| 108 | 956.82 | 959.85 | 935.24 | 981.27 |
| 109 | 972.87 | 973.58 | 949.36 | 995.82 |
| 110 | 976.36 | 987.38 | 962.81 | 1009.69 |
l2<-c(0.90,0.92,0.94,0.95)
C_teo<-sapply(l2,Custo_teorico,n=100,l1=0.95)
C_est<-sapply(l2,Custo.est,m=100,n=100,l1=0.95)
Int<-sapply(l2,Intervalo,n=100,m=100,l1=0.95)
LI<-Int[1,]
LS<-Int[2,]
tx1<-rep(0.95,4) ; tx2<-c(0.90,0.92,0.94,0.95)
dados2<-data.frame(Taxa_1=tx1,
Taxa_2=tx2,
Custo_Estimado=C_est,
Custo_Esperado=C_teo,
Limite_Inferior=LI,
Limite_Superior=LS
)
kable(dados2,digits = 2,caption=" Tabela para o Custo de Transporte (n=100 e m=100)")
| Taxa_1 | Taxa_2 | Custo_Estimado | Custo_Esperado | Limite_Inferior | Limite_Superior |
|---|---|---|---|---|---|
| 0.95 | 0.90 | 847.34 | 852.62 | 835.68 | 878.32 |
| 0.95 | 0.92 | 813.82 | 820.29 | 804.52 | 846.67 |
| 0.95 | 0.94 | 807.84 | 800.39 | 774.90 | 816.59 |
| 0.95 | 0.95 | 791.20 | 794.81 | 772.42 | 813.89 |
set.seed(23/12/20)
l1<-seq(0.90,2,length.out = 70)
l2<-seq(0.80,1.5,length.out = 70)
Int<-mapply(Intervalo,l1,l2,MoreArgs = list(n=100,m=100))
CUSTO.est<-mapply(Custo.est,m=100,l1,l2,MoreArgs = list(n=100))
CUSTO<-mapply(Custo_teorico,l1,l2,MoreArgs = list(n=100))
dados3<-matrix(c(l1,l2,CUSTO.est,CUSTO,Int[1,],Int[2,]), ncol=6)
colnames(dados3)<-c("Taxa 1", "Taxa 2", "Custo Estimado", "Custo Esperado", "Limite Inferior", "Limite Superior")
library(DT) ; library(dplyr)
dados3 %>%
datatable(extensions = 'Buttons',
options = list(dom = 'Blfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
lengthMenu = list(c(10,25,50,-1),
c(10,25,50,"All"))),
caption = "Tabela para o Custo de Transporte (n=100 e m=100)")%>%
formatRound(columns=all(),digits=3)
Casella, George, and Roger L Berger. 2002. Statistical Inference. Vol. 2. Duxbury Pacific Grove, CA.
Kranakis, Evangelos. 2014. “On the Event Distance of Poisson Processes with Applications to Sensors.” Discrete Applied Mathematics 179: 152–62.
R Core Team. 2020. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Ross, Sheldon M. 1996. Stochastic Processes. Vol. 2.
Universidade de Brasília, xxxxx@yyyy.com↩︎
Universidade de Brasília, adolfomanoel@hotmail.com↩︎