Sumário


1 Objetivo

Explicar a premissa básica da função tabfreq do pacote leem e mostrar:

2 Apresentação do relatório

Diante do objetivo do relatório, ele será dissertado e explanado nas próximas seções:

2.1 tabfreq: uso básico

O pacote leem está sendo desenvolvido com o objetivo de prover uma melhor visualização de conceitos da estatística a estudantes deste curso. Dentro da disciplina, uma das áreas abordadas é a estatística descritiva: um campo que foca na descrição de população e amostras por meio de coeficientes breves1. Por isso, seu conhecimento básico pode ser de ampla ajuda a estudantes de qualquer curso, especialmente para áreas que se contém com grandes estudos de população como medicina ou psicologia.

O leem carrega consigo funções desenhadas para obter dados descritivos de amostra (com novas funções desta área possivelmente sendo implementadas no futuro) e, entre elas, destaca-se a tabfreq, cujo objetivo é montar uma tabela de frequências dos dados apresentados.

A tabela de frequêcia é um arranjo de dados que resume as informações apresentadas do conjunto2, tornando o processo de análise deles mais rápida e simples.

Como exemplo, observe a tabela de frequência gerada para o seguinte conjunto de dados:

library(leem)

# Criando um conjunto de caracteres aleatorios

x <- sample(letters[1:10], 50, replace = TRUE)

# ATENCAO: para uso do tabfreq, a classe do objeto DEVE SER LEEM. Use o comando new_leem antes (mais sobre isso depois)
# Como se trata de caracteres, devemos colocar o objeto como discreto no new_leem 

x <- new_leem(x, variable = "discrete")

tabfreq(x)
##    Groups Fi   Fr Fac1 Fac2 Fp Fac1p Fac2p
## 1       a  9 0.18    9   50 18    18   100
## 2       b  4 0.08   13   41  8    26    82
## 3       c  4 0.08   17   37  8    34    74
## 4       d  5 0.10   22   33 10    44    66
## 5       e  5 0.10   27   28 10    54    56
## 6       f  2 0.04   29   23  4    58    46
## 7       g  5 0.10   34   21 10    68    42
## 8       h  3 0.06   37   16  6    74    32
## 9       i  8 0.16   45   13 16    90    26
## 10      j  5 0.10   50    5 10   100    10

Nesta lista disposta pela função, temos as seguintes informações:

  • groups representa os nomes das variáveis qualitativas e valores das variáveis discretas quantitativas;
  • Fi é a frequência dos dados em número absolutos (para variáveis contínuas, representa o número de elementos contidos na faixa determina pelos intervalos);
  • Fré a frequência relativa daquele grupo (frequência/número de elementos da amostra). Semelhantemente, Fp é a frequência relativa já em percentual;
  • Fac1 e Fac2 são os valores das frequências acumuladas, organizadas de maneira crescente e decrescente, respectivamente, formando assim as ogivas crescentes e descrescentes. Novamente, Fac1pe Fac2p são as ogivas relativas crescente e decrescente.

O mesmo princípio se aplica a dados contínuos, com a observação de que os grupos serão dados como intervalos de classes. A quantidade padrão para os intervalos de classe é \(\sqrt{n}\) para até 100 elementos e \(5*log_{10}{n}\) para mais de 100.

# Criando um conjunto de valores a partir da distribuição normal

y <- rnorm(100, 100, 20)

# Colocando a variável como "continuous"  
  
y <- new_leem(y, variable = "continuous")

# Observe que a tabela gerada terá 10 intervalos de classe, como discutido anteriormente

tabfreq(y)
##                 Classe Fi     PM   Fr Fac1 Fac2 Fp Fac1p Fac2p
## 1    53.27 |---  62.79  3  58.03 0.03    3  100  3     3   100
## 2    62.79 |---  72.31  6  67.55 0.06    9   97  6     9    97
## 3    72.31 |---  81.83  9  77.07 0.09   18   91  9    18    91
## 4    81.83 |---  91.35 10  86.59 0.10   28   82 10    28    82
## 5   91.35 |---  100.87 21  96.11 0.21   49   72 21    49    72
## 6  100.87 |---  110.39 23 105.63 0.23   72   51 23    72    51
## 7  110.39 |---  119.91 13 115.15 0.13   85   28 13    85    28
## 8  119.91 |---  129.43  7 124.67 0.07   92   15  7    92    15
## 9  129.43 |---  138.95  5 134.19 0.05   97    8  5    97     8
## 10 138.95 |---  148.47  3 143.71 0.03  100    3  3   100     3

Além das demais colunas para amostras discretas, a tabela de amostras contínuas carrega a coluna PM, representando o valor médio entre o limite inferior e superior do intervalo.

Após usar o tabfreq e o atribuir a variável, é possível chamar a tabela de frequência por meio de objeto$tabela:

x <- tabfreq(x)

x$tabela
##    Groups Fi   Fr Fac1 Fac2 Fp Fac1p Fac2p
## 1       a  9 0.18    9   50 18    18   100
## 2       b  4 0.08   13   41  8    26    82
## 3       c  4 0.08   17   37  8    34    74
## 4       d  5 0.10   22   33 10    44    66
## 5       e  5 0.10   27   28 10    54    56
## 6       f  2 0.04   29   23  4    58    46
## 7       g  5 0.10   34   21 10    68    42
## 8       h  3 0.06   37   16  6    74    32
## 9       i  8 0.16   45   13 16    90    26
## 10      j  5 0.10   50    5 10   100    10

3 Argumento k

Como dito anteriormente, o número de classes padrão é dado por uma relação matemática já embutida na função. Contudo, é possível forçar um determinado número de grupos na função tabfreq.

Para isso, deve-se inserir o argumento k ao chamar a função e declarar quantos classes desejam ser criadas

# Fazendo com apenas dois intervalos de classes

tabfreq(y, k = 2)
##                Classe Fi     PM   Fr Fac1 Fac2 Fp Fac1p Fac2p
## 1  15.17 |---  100.89 49  58.03 0.49   49  100 49    49   100
## 2 100.89 |---  186.61 51 143.75 0.51  100   51 51   100    51
# Fazendo com 20 intervalos de classe

tabfreq(y, k = 20)
##                 Classe Fi      PM   Fr Fac1 Fac2 Fp Fac1p Fac2p
## 1    55.77 |---  60.28  2  58.025 0.02    2  100  2     2   100
## 2    60.28 |---  64.79  2  62.535 0.02    4   98  2     4    98
## 3     64.79 |---  69.3  3  67.045 0.03    7   96  3     7    96
## 4     69.3 |---  73.81  4  71.555 0.04   11   93  4    11    93
## 5    73.81 |---  78.32  4  76.065 0.04   15   89  4    15    89
## 6    78.32 |---  82.83  4  80.575 0.04   19   85  4    19    85
## 7    82.83 |---  87.34  6  85.085 0.06   25   81  6    25    81
## 8    87.34 |---  91.85  6  89.595 0.06   31   75  6    31    75
## 9    91.85 |---  96.36 11  94.105 0.11   42   69 11    42    69
## 10  96.36 |---  100.87  7  98.615 0.07   49   58  7    49    58
## 11 100.87 |---  105.38 13 103.125 0.13   62   51 13    62    51
## 12 105.38 |---  109.89  8 107.635 0.08   70   38  8    70    38
## 13  109.89 |---  114.4  9 112.145 0.09   79   30  9    79    30
## 14  114.4 |---  118.91  5 116.655 0.05   84   21  5    84    21
## 15 118.91 |---  123.42  3 121.165 0.03   87   16  3    87    16
## 16 123.42 |---  127.93  4 125.675 0.04   91   13  4    91    13
## 17 127.93 |---  132.44  3 130.185 0.03   94    9  3    94     9
## 18 132.44 |---  136.95  2 134.695 0.02   96    6  2    96     6
## 19 136.95 |---  141.46  3 139.205 0.03   99    4  3    99     4
## 20 141.46 |---  145.97  1 143.715 0.01  100    1  1   100     1

4 Argumento ordered

Para variáveis discretas, o argumento ordered possibilita a ordem a qual os dados irão aparecer. Normalmente, elas são organizadas por ordem alfabética para qualitativas e crescente para quantitativas.

Este argumento possui uma natureza mais complexa que k: ele deve ser declarado na função com todos os tipos de elementos listados na ordem desejada. Para esclarecimento, observe o exemplo abaixo:

# ordenando o objeto x. Listando todos os grupos e na ordem desejada

tabfreq(x, ordered = c('j', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a'))
## Warning in xtfrm.data.frame(x): cannot xtfrm data frames
##   Groups Fi Fr Fac1 Fac2 Fp Fac1p Fac2p
## 1   <NA> NA NA   NA   NA NA    NA    NA
## 2   <NA> NA NA   NA   NA NA    NA    NA
## 3   <NA> NA NA   NA   NA NA    NA    NA
## 4   <NA> NA NA   NA   NA NA    NA    NA
## 5   <NA> NA NA   NA   NA NA    NA    NA
## 6   <NA> NA NA   NA   NA NA    NA    NA
## 7   <NA> NA NA   NA   NA NA    NA    NA
## 8   <NA> NA NA   NA   NA NA    NA    NA

Com isso, é possível ordenar dados que requerem uma certa ordem para uma análise mais detalhada, como nomes ou dados categorizados.]

5 Erros comuns e correções

Pela natureza de manipulação de dados, a função apresenta algumas proteções para seu uso. É necessário conhecer suas limitações para seu uso apropriado.

Junto com estas proteções, há ainda alguns bugs no código fonte que podem levar a resultados errados. Os erros reportados foram encontrados com a build disponível no Github na data de 16/06/22

5.1 Geral

  • Só podem ser usados objetos com classe leem na função;
b <- c(1:10)

tabfreq(b)
## Error in UseMethod("tabfreq"): método não aplicável para 'tabfreq' aplicado a um objeto de classe "c('integer', 'numeric')"
  • Objetos com apenas um dado não passam pela função;
v <- 1
v <- new_leem(v)
v <- tabfreq(v)
## Error in vet[j] <- vet[j - 1] - x[j - 1]: substituto tem comprimento zero
  • Cuidado com declaração do tipo de objetos: se o conjunto for contínuo mas foi declarado como discreto, a tabela de frequência enunciará cada dado como classe;
w <- rnorm(20, 10, 2)
w <- new_leem(w)
tabfreq(w)
##       Groups Fi   Fr Fac1 Fac2 Fp Fac1p Fac2p
## 1   7.236393  1 0.05    1   20  5     5   100
## 2   7.754281  1 0.05    2   19  5    10    95
## 3   8.591530  1 0.05    3   18  5    15    90
## 4   8.932877  1 0.05    4   17  5    20    85
## 5   9.269697  1 0.05    5   16  5    25    80
## 6   9.367232  1 0.05    6   15  5    30    75
## 7   9.567519  1 0.05    7   14  5    35    70
## 8   9.589628  1 0.05    8   13  5    40    65
## 9   9.773539  1 0.05    9   12  5    45    60
## 10  9.777314  1 0.05   10   11  5    50    55
## 11 10.245761  1 0.05   11   10  5    55    50
## 12 10.333517  1 0.05   12    9  5    60    45
## 13 10.927725  1 0.05   13    8  5    65    40
## 14 11.069082  1 0.05   14    7  5    70    35
## 15 11.443946  1 0.05   15    6  5    75    30
## 16 11.789722  1 0.05   16    5  5    80    25
## 17 12.484370  1 0.05   17    4  5    85    20
## 18 13.370185  1 0.05   18    3  5    90    15
## 19 13.814560  1 0.05   19    2  5    95    10
## 20 14.153947  1 0.05   20    1  5   100     5

5.2 k

  • O argumento deve ser numérico;
tabfreq(y, k = 'a')
## Error: The argument should be numerical!
  • O argumento deve ser positivo e maior que 1;
tabfreq(y, k = -1)
## Error in rep(0, k - 1): argumento 'times' inválido
tabfreq(y, k = 1)
## Error in vi[i] <- vi[i - 1] + c: substituto tem comprimento zero

5.3 ordered

  • O argumento deve conter os mesmos número de elementos que a tabela original. Caso contrário, parte da tabela se apresentará como vazia NA;
x <- sample(letters[1:10], 50, replace = TRUE)

x <- new_leem(x)

tabfreq(x, ordered = c('a', 'b', 'c', 'd', 'e'))
##    Groups Fi   Fr Fac1 Fac2 Fp Fac1p Fac2p
## 1       a  4 0.08    4   NA  8     8    NA
## 2       b  3 0.06    7   NA  6    14    NA
## 3       c  6 0.12   13   NA 12    26    NA
## 4       d  3 0.06   16   NA  6    32    NA
## 5       e  6 0.12   22   NA 12    44    NA
## 6    <NA> NA   NA   NA   NA NA    NA    NA
## 7    <NA> NA   NA   NA   NA NA    NA    NA
## 8    <NA> NA   NA   NA   NA NA    NA    NA
## 9    <NA> NA   NA   NA   NA NA    NA    NA
## 10   <NA> NA   NA   NA   NA NA    NA    NA
  • O argumento deve conter os exatos grupos de classe que os dados. Também aparecerá linhas como NA;
x <- sample(letters[1:10], 50, replace = TRUE)

x <- new_leem(x)

tabfreq(x, ordered = c('k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 'a'))
##    Groups Fi   Fr Fac1 Fac2 Fp Fac1p Fac2p
## 1       j  3 0.06    3   NA  6     6    NA
## 2    <NA> NA   NA   NA   NA NA    NA    NA
## 3    <NA> NA   NA   NA   NA NA    NA    NA
## 4    <NA> NA   NA   NA   NA NA    NA    NA
## 5    <NA> NA   NA   NA   NA NA    NA    NA
## 6    <NA> NA   NA   NA   NA NA    NA    NA
## 7    <NA> NA   NA   NA   NA NA    NA    NA
## 8    <NA> NA   NA   NA   NA NA    NA    NA
## 9    <NA> NA   NA   NA   NA NA    NA    NA
## 10   <NA> NA   NA   NA   NA NA    NA    NA
  • Grupos de caracteres devem ter suas listas organizadas em caracteres. A mesma lógica é válida para argumentos numéricos (lista em números).
x <- sample(letters[1:10], 50, replace = TRUE)

x <- new_leem(x)

tabfreq(x, ordered = c(1:10))
##    Groups Fi Fr Fac1 Fac2 Fp Fac1p Fac2p
## 1    <NA> NA NA   NA   NA NA    NA    NA
## 2    <NA> NA NA   NA   NA NA    NA    NA
## 3    <NA> NA NA   NA   NA NA    NA    NA
## 4    <NA> NA NA   NA   NA NA    NA    NA
## 5    <NA> NA NA   NA   NA NA    NA    NA
## 6    <NA> NA NA   NA   NA NA    NA    NA
## 7    <NA> NA NA   NA   NA NA    NA    NA
## 8    <NA> NA NA   NA   NA NA    NA    NA
## 9    <NA> NA NA   NA   NA NA    NA    NA
## 10   <NA> NA NA   NA   NA NA    NA    NA

  1. Fonte: Investopedia↩︎

  2. Fonte: UFGRS↩︎