TP3-Estatística Computacional
simulacoes_sistema<-function(m,prob_equal,tipo_estimacao){
#browser()
# tipo_estimacao: padrao(TRUE) ou alternativa(FALSE)
x<-numeric(m)
y<-numeric(m)
if (prob_equal==TRUE){
for(i in 1:m){
resul<-gera_dados(50,50,TRUE)
#resul<-sim_funcionamento(10,10,TRUE)
x[i]<-resul[1]
y[i]<-resul[2]
}
}
else {
for(i in 1:m){
resul<-gera_dados(50,50,FALSE)
#resul<-sim_funcionamento(10,10,FALSE)
x[i]<-resul[1]
y[i]<-resul[2]
}
}
#browser()
if(tipo_estimacao){
x<-unlist(x)
y<-unlist(y)
hist(x)
plot(y,x)
theta=sum(x)/m
var=var(x)/m
}
else{
x<-unlist(x)
y<-unlist(y)
r<-lm(x~y)
plot(y,x)
a<-r$coefficients[[1]]
a<-
b<-r$coefficients[[2]]
theta <- a + b*25
var=var(r$residuals)/m
}
# Retorna estimativas
return (list(theta,var))
}
gera_dados<-function(num,N,P){
#browser()
# num indica o n?mero de elementos no vetor
# P indica se os elementos do vetor de probabiliades ser?o iguais ou diferentes.
# N indica o n?mero de elementos que ser?o sorteados
# Gerando vetor com disposi??o dos elementos aleat?ria.
n<-sample(seq(num))
# Calculando vetor de probabilidades. Se P=TRUE, o vetor de probabilida
# des será igual, cc será diferente.
p<-numeric(num)
if(P){
p<-rep(1/num,num)
}
else{
denominador<-sum(seq(1,num))
# for(i in 1:num){
# p[i]<-i/denominador
# }
#
p<-seq(1:num)/denominador
}
# Sorteando elemento e reordenando.
#u<-gera_uniformes(1)
somaX<-0
somaY<-0
for(i in 1:N){
acum <-cumsum(p)
u<-runif(1)
# Identifica a posicao do menor elemento no vetor de acumulação.
# cujo valor é imediatamente maior que u. Seleciona o elemento
# imediatamente seguinte
pos <-sum(acum < u) +1
# elem_selec<-1
# for(i in 1:num){
# # calcula o vetor de probabilidades acumulada
# acum<-sum(p[1:i])
# if((u > acum)){
# # Seleciona o elemento
# elem_selec<-i+1
# }
# else {
# break
# }
# }
# reordena vetor
# Elementos anteriores ao elemento selecionado(elem_selec)
#num<-10
#p<-(seq(10))
#elem_selec<-8
# if(elem_selec==2 || elem_selec==1){
# browser()
# }
#
# Só tem sentido reordenar o vetor de probabilidades p se os valores
# forem diferentes!
if (pos >1 & !P) {
temp<-pos-1
elem_ante<-p[c(1:temp)]
# Elementos posteriores ao elemento selecionado(elem_selec)
temp<-pos+1
elem_post<-p[c(pos:num)]
p[1]<-p[pos]
p[2:pos]<-elem_ante
}
somaX<-somaX+pos
somaY<-somaY+u
}
return(list(somaX,somaY))
}
# Executanto sistema 10.000 vezes, com probabilidades iguais e estimação padrao
simulacoes_sistema(10000, TRUE, TRUE)


## [[1]]
## [1] 1275.536
##
## [[2]]
## [1] 1.04775
# Executanto sistema 10.000 vezes, com probabilidades diferentes e estimação #padrao
simulacoes_sistema(10000, FALSE, TRUE)


## [[1]]
## [1] 1343.912
##
## [[2]]
## [1] 0.8483715
# Executanto sistema 10.000 vezes, com probabilidades iguais e estimação #alternativa
simulacoes_sistema(10000, TRUE, FALSE)

## [[1]]
## [1] 1299.427
##
## [[2]]
## [1] 0.0004229573
# Executanto sistema 10.000 vezes, com probabilidades diferentes e estimação
# alternativa
simulacoes_sistema(10000, FALSE, FALSE)

## [[1]]
## [1] 1109.016
##
## [[2]]
## [1] 0.1119325