Showing posts with label Inferência Estatística. Show all posts
Showing posts with label Inferência Estatística. Show all posts

Inferência Estatística - Distribuição F (Snedecor) - decisão

## Objetivos específicos
# a) Gerar uma população normal;
## b) Amostrar repetidamente pares de amostras de tamanhos informados 
##  da  população
## c) Estimar a variância a partir de cada amostra e calcular a razão 
##  entre as  duas de cada par armazenando estes valores em um vetor.
## d) Usar este vetor para decidir, sob a distribuição F, se as 
## razões anteriormente obtidas podem ser consideradas, ou não, como 
## provenientes de uma mesma população, adotando um erro tipo I 
## máximo para a inferência.
##    Em outras palavras, o objetivo maior é ilustrar a flutuação 
## normal do processo de amostragem e os possíveis erros de decisão 
## na inferência influenciados por esta flutuação.
##===============================================================================

##-- Ini opções -----------------------------------------------------------------
## Tamanho das amostras
n1 <-  5   # Tamanho da amostra (n1)
n2 <- 50   # Tamanho da amostra (n2)

## Características da população
Mu    <- 10
Sigma <-  2

## Número de pares de amostras
n <- 1e4   # Usar 1e2, 1e3, ..., 1e5

erro <- 5  # Define erro tipo I máximo a ser usado na inferência
           # (informado em %)
##-- Fim opções -----------------------------------------------------------------

## Simulação
## Estimativas da variância a partir do tamanho n1
s2.n1 <- apply(matrix(rnorm(n * n1,
                            Mu,
                            Sigma),
                      ncol=n1),
               1,
               var)

## Estimativas da variância a partir do tamanho n2
s2.n2 <- apply(matrix(rnorm(n * n2,
                            Mu,
                            Sigma),
                      ncol=n2),
               1,
               var)

Fcal <- s2.n1 / s2.n2  # Valores da razão entre duas estimativas da variância
                       # de uma população normal observados

## Valor Ftab recebe valor limite da calda superior da distribuição Fi
## adotando erro tipo I máximo especificado = erro
Ftab <- qf(erro / 100,
           n1-1,
           n2-1,
           lower.tail=FALSE)


## Inferência
dec <- Fcal < Ftab  # Decisão: As amostras podem ser consideradas como
                    # provenientes de uma mesma população?

dec.cer <- length(dec[dec == TRUE])
dec.err <- n - dec.cer

# Plotar gráfico dos resultados observados
plot(Fcal, 
     ylab='Valores  F calculados',
     xlab='Número de pares de amostras',
     font=2, 
     font.lab=2,
     cex=0.5,
     col='dark orange',
     ylim=c(0, 10))

tab.inf <- parse(text=paste(paste('F[',
                                  erro,
                                  '~"%"]',sep=''), 
                            '(',
                            n1 - 1,
                            ', ',
                            n2 - 1,
                            ')==',
                            round(Ftab,
                                  2),
                            sep=''))  

abline(h=Ftab)

text(n/2,
     Ftab,
     tab.inf,
     font=4,
     col='dark blue')

text(n/2,
     Ftab/2,
     paste('RAHo -> Decisões Corretas (%)',
           100 * (dec.cer/n),
           sep=' = '),
     font=4,
     col='dark green')

text(n/2,
     Ftab + (max(Fcal) - Ftab)/2,
     paste('RRHo -> Decisões Equivocadas (%)',
           100 * (dec.err/n),
           sep=' = '),
     font=4,
     col='red')

Inferência Estatística - Origem distribuição F (Snedecor)

## Objetivos específicos
## a) Amostrar repetidamente pares de amostras (tamanhos definidos pelo usuário)
##    de uma população normal qualquer: Y ~ N(Mu, Sigma);
## b) Estimar a variância a partir de cada amostra e calcular a razão entre as
##    duas estimativas;
## c) Plotar o histograma dos valores, que deve ser semelhante a função F
##    (para os tamanhos de amostras defindos pelo usuário) se o número de
##    repetições do processo for suficiente para se aproximar do limite;
## d) Sobrepor ao histograma a função densidade de probabilidade específica.
##===============================================================================

##-- Ini opções -----------------------------------------------------------------
## Tamanho das amostras
nN <-  4  # Tamanho da amostra (n) do Numerador (N)
nD <- 21  # Tamanho da amostra (n) do Denominador (D)

## Características da população
Mu    <- 10
Sigma <-  2

## Normal padrão
# Mu    <- 0
# Sigma <- 1

## Número de pares de amostras
n <- 1e4  # Usar 1e3, 1e4, 1e5

## Erro adotado na inferência
erro <- .05
#-- Fim opções ------------------------------------------------------------------

## Simulação
## Estimativas da variância do numerador
s2N <- apply(matrix(rnorm(n*nN,
                          Mu,
                          Sigma),
                    ncol=nN),
             1,
             var)

## Estimativas da variância do denominador
s2D <- apply(matrix(rnorm(n*nD,
                          Mu,
                          Sigma),
                    ncol=nD),
             1,
             var)

## Observando a distribuição da razão das estimativas da variância: observacional
require(fdth)

plot(fdt(s2N/s2D,
         start=0,
         end=10,
         h=.05),
     ty='d',
     xlim=c(0, 10),
     ylim=c(0, 1.2))

## Sobrepondo a curva de densidade de probabilidades: teórica
curve(df(x,
         nN-1,
         nD-1),
      col='darkblue',
      add=TRUE,
      lwd=3)

# Em poucas palavras:
# A distribuição F (Snedecor) descreve como se distribui a razão
# entre duas estimativas da variâcia 
# de uma distribuição normal ~N(mu, sigma) qualquer.

quantil <- qf(erro,
              nN -1,
              nD -1,
              lower=FALSE)

# Linha decisão
segments(x0=quantil,
         y0=0,
         x1=quantil,
         y1=1,
         col='red',
         lty=3)

# Texto das hipóteses
text(x=c(quantil - 1,
         quantil + 1),
     y=.8,
     labels=c('RAH0',
              'RRH0'),
     col=c('darkgreen',
           'red'))

# Texto do erro
text(x=quantil + 1,
     y=.3,
     labels=paste('Erro = ',
                  100*erro,
                  '%',
                  sep=''),
     col='red')

# Valor do erro
text(x=quantil,
     y=1.05,
     label=round(quantil,
                 2))              

Inferência Estatística - Origem distribuição F (Snedecor)

## Objetivos específicos
##===============================================================================
## a) Plotar várias funções de densidade de probabilidade da distribuição F.
##    Sugere-se alterar a posição (numerador e denominador) da variável 'i'
##    na função df(x,
##                 i,
##                 20)
##===============================================================================

plot(NA,
     xlab='F',
     ylab='f(F)',
     xlim=c(0, 5),
     ylim=c(0, 1.2),
     type='n')


# Número de curvas
nc <- seq(1,
          5e1,
          by=1)

# Define as cores
cores <- rainbow(length(nc))              

for (i in nc)
{
  curve(df(x,
           i,
           20),
        col=cores[i], # Uma cor para cada curva
        add=TRUE,
        lwd=1)
}