Organização de dados

  1. Introdução:

Pode-se dizer que Estatística é uma série de técnicas desenvolvidas com o objetivo de auxiliar a responder questões sobre situações que envolvem grandes quantidades de informações. Ela faz parte do cotidiano de todos na atualidade. Em um jogo de futebol, por exemplo, são informados o número de escanteios, o tempo de posse de bola de cada time, o número de faltas cometidas, etc. O avanço da informática permitiu a construção de computadores cada vez menores (em tamanho), mas com maior capacidade de memória, o que contribuiu para sua utilização no tratamento de grandes massas de dados. No passado, essa tarefa era de alto custo e cansativa, pois exigia muitas horas de árduo trabalho. Associado a isso, o desenvolvimento de softwares específicos para o tratamento estatístico de informações, tais como, SPlus, Minitab e SPSS, facilitou em muito o trabalho de pesquisadores e usuários.

De um modo genérico, pode-se dizer que a Estatística compõe-se de três grandes áreas:

Estatística Descritiva é a etapa inicial de tratamento de dados. Ela é responsável pela análise dos dados, a partir de sua tabulação, através da construção de tabelas e gráficos, bem como pelo cálculo de medidas resumo.

Probabilidade é a teoria matemática que serve de embasamento para as técnicas estatísticas utilizadas na modelagem estatística. Nesta etapa, são estudados os fenômenos aleatórios, ou seja, aqueles que estão sujeitos a variabilidade, cujo resultado não pode ser previsto antes do fenômeno ocorrer. Por exemplo, no lançamento de uma moeda honesta três vezes consecutivas, qual a probabilidade de saírem duas caras?

Inferência Estatística é o estudo de técnicas que possibilitam a extrapolação para a população de resultados obtidos de amostras. Por razões econômicas, trabalha-se com amostras extraídas da população de interesse. Analisa-se a amostra e, a partir de seus resultados, fazem-se afirmações sobre a população, com certo nível de confiança, visto que, diante de fenômenos aleatórios, não existe certeza.

  1. Tabela de dados brutos:

É o conjunto de informações tabuladas contendo os dados da maneira como foram coletados, ou seja, sem qualquer tipo de tratamento. Como exemplo, são mostradas as 6 primeiras linhas do arquivo “mtcars” disponível no pacote básico do R.

head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

No caso de um banco de dados próprio, deve-se criá-lo como script do R. Veja o exemplo de uma pesquisa realizada com uma amostra de tamanho \(n=50\) alunos de uma faculdade, em que as variáveis de interesse do pesquisador foram: turma a que o aluno foi alocado (A ou B), sexo (F, se feminino e M, se masculino), idade (em anos completos), altura (em cm), peso (em quilogramas), número de filhos na família, fumante (hábito de fumar: sim ou não), tolerância ao cigarro (I=indiferente, P=incomoda pouco e M=incomoda muito) e número de horas que pratica atividade física por semana.

Cada uma das características perguntadas aos alunos é denominada variável. Assim, a variável turma assume os valores A ou B, enquanto que a variável idade assume os valores \(23,27,25,24,\dots\). Os possíveis valores que as variáveis assumem caracterizam sua natureza. Dois grandes tipos de variáveis podem ser considerados: numéricas e não numéricas. As variáveis numéricas são denominadas quantitativas, enquanto que as variáveis não numéricas são denominadas qualitativas.

Uma variável é qualitativa quando os valores que assume são atributos e/ou qualidades. Se existe uma ordenação natural entre os atributos, indicando intensidades crescentes de realização, então a variável é classificada como qualitativa ordinal. É o caso, por exemplo, de tamanho (pequeno, médio ou grande). Caso a variável não possua uma odenação nos seus atributos, ela é classificada como qualitativa nominal. É o caso de classificar uma peça produzida por uma máquina como defeituosa ou não defeituosa.

Uma variável é quantitativa quando os valores que assume são de natureza numérica, podendo ser discreta ou contínua. A variável quantitativa discreta pode ser vista como o resultado de contagens, como é o caso do número de peças produzidas por uma máquina durante um turno de trabalho. Ela assume valores no conjunto dos inteiros não negativos. Mais formalmente, o conjunto dos valores é finito ou enumerável. A variável quantitativa contínua assume valores no conjunto dos reais e seus resultados sao provenientes de mensuração. É o caso da pressão sanguínea de pessoas sadias.

dados <- data.frame(turma=c('A','A','B','B','B','A','A','A','A','B','B','A','B','A','B',
                            'A','B','B','A','A','A','B','B','B','A','A','A','A','B','B',
                            'B','B','B','A','B','A','B','A','B','B','A','A','B','A','A',
                            'A','B','B','A','A'),
                    sexo=c('F','M','F','F','F','M','F','F','M','M','M','M','F','M','F',
                            'M','M','M','M','F','F','M','M','M','F','F','F','F','F','F',
                            'F','F','F','F','F','M','F','F','F','M','M','M','M','F','F',
                            'M','M','M','F','F'),
                    idade=c(23,27,25,24,26,20,18,27,17,27,18,24,27,20,21,24,21,23,17,28,28,
                            25,18,25,25,22,24,17,19,25,27,24,17,21,26,28,23,19,17,28,24,24,
                            20,24,21,20,22,19,20,24),
                    altura=c(161,167,160,172,163,179,173,185,169,172,166,173,164,160,175,
                             160,182,176,160,179,166,183,165,177,165,176,167,176,171,163,
                             182,165,168,177,166,166,174,171,179,169,174,165,181,177,170,
                             164,160,185,171,183),
                    peso=c(68.3,71.6,65.8,88.9,81.2,55.3,60.0,67.9,71.0,50.0,65.6,58.3,77.8,
                           76.6,61.0,93.1,77.5,75.8,65.9,48.0,84.2,78.0,75.7,71.7,77.9,76.5,
                           75.8,67.9,50.9,73.7,82.6,64.7,80.3,74.9,72.2,71.1,72.4,56.4,64.7,
                           65.9,76.3,66.4,60.9,69.2,72.2,82.9,82.1,73.4,84.6,73.7),
                    filhos=c(1,1,4,2,2,1,1,3,2,2,2,1,4,4,1,1,3,3,4,1,2,4,3,1,3,3,4,1,5,5,4,4,
                             1,2,3,1,5,5,5,4,5,4,3,3,4,1,5,7,2,1),
                    fumante=c('N','N','N','N','S','S','S','S','N','N','N','N','N','N','N','N',
                              'S','N','N','N','S','S','S','S','S','S','S','N','N','N','N','N',
                              'N','N','S','N','N','N','N','S','N','N','S','S','N','N','N','S',
                              'N','N'),
                    toler=c('M','M','M','M','M','P','P','M','P','M','I','P','I','I','P','P',
                            'M','I','M','P','P','P','I','M','P','P','M','M','I','I','I','P',
                            'M','M','I','M','I','M','M','I','M','M','I','M','I','I','M','I',
                            'M','I'),
                    exerc=c(1,2,9,2,1,1,4,4,2,6,8,5,1,2,1,3,2,3,1,1,3,2,2,3,6,10,2,4,5,4,4,3,
                            3,5,3,2,2,6,4,4,4,4,0,5,5,1,1,2,2,3)
)
head(dados)
##   turma sexo idade altura peso filhos fumante toler exerc
## 1     A    F    23    161 68.3      1       N     M     1
## 2     A    M    27    167 71.6      1       N     M     2
## 3     B    F    25    160 65.8      4       N     M     9
## 4     B    F    24    172 88.9      2       N     M     2
## 5     B    F    26    163 81.2      2       S     M     1
## 6     A    M    20    179 55.3      1       S     P     1

3.Tabela de frequências:

Quando é preciso extrair informações sobre alguma(s) variável(is) de interesse da tabela de dados brutos recorre-se às tabelas de frequências.

Frequência \((n_{i})\) é o número de ocorrências do valor \(i\) de uma variável discreta ou categórica. Por exemplo, no conjunto 5,6,5,4,5,6,6,5 a frequência do valor 4 é 1, a do valor 5 é 4 e a do valor 6 é 3. Isto pode ser representado em uma tabela de frequências.

Valor Frequência
4 1
5 4
6 3
Total(n) 8

A frequência relativa \((f_{i})\) do \(i\)-ésimo valor é o resultado da divisão da frequência pelo número total de dados. Matematicamente, temos: \(f_{i}=\dfrac{n_{i}}{n}\)

No exemplo anterior, temos:

Valor \(n_{i}\) \(f_{i}\)
4 1 0,125
5 4 0,5
6 3 0,375
Total 8 1

É possível trabalhar com os valores das frequências relativas em porcentagens. Para isso, basta multiplicar a frequência relativa por 100.

Valor \(n_{i}\) \(f_{i}\) \(f_{i}(\%)\)
4 1 0,125 12,5
5 4 0,5 50,0
6 3 0,375 37,5
Total 8 1 100,0

O comando para se obter uma tabela de frequências no R é

table(nome da variável)

Para a variável discreta número de filhos na família a saída é mostrada abaixo:

filhos.tb<-table(dados$filhos)
filhos.tb
## 
##  1  2  3  4  5  7 
## 14  8  9 11  7  1

Para a variável categórica tolerância ao cigarro:

toler.tb<-table(dados$toler)
toler.tb
## 
##  I  M  P 
## 16 22 12

Com o comando a seguir obtém-se a tabela de frequências relativas.

filhos.tbr <- prop.table(filhos.tb)
filhos.tbr
## 
##    1    2    3    4    5    7 
## 0.28 0.16 0.18 0.22 0.14 0.02

A frequência acumulada até o \(i\)-ésimo valor é obtida pela soma das frequências menores ou iguais à frequência do \(i\)-ésimo valor. Sua principal finalidade é estabelecer pontos de corte com uma determinada frequência nos valores da variável. Qualquer uma das frequências pode ser acumulada (absoluta, relativa ou percentual). No exemplo abaixo, foram acumuladas as frequências relativas percentuais.

Valor \(n_{i}\) \(f_{i}\) \(f_{ac}(\%)\)
4 1 0,125 12,5
5 4 0,5 62,5
6 3 0,375 100,0
Total 8 1

Comando no R para frequências acumuladas:

filhos.fac <- cumsum(filhos.tbr)
filhos.fac
##    1    2    3    4    5    7 
## 0.28 0.44 0.62 0.84 0.98 1.00

Podem ser utilizados os comandos abaixo para mostrar os valores das frequências absoluta, relativa e relativa acumulada em uma única tabela.

freq_rel<-matrix(c(100*table(dados$filhos)/sum(table(dados$filhos))))
#calcula a frequencia relativa
freq_rel
##      [,1]
## [1,]   28
## [2,]   16
## [3,]   18
## [4,]   22
## [5,]   14
## [6,]    2
freq_acum<-matrix(c(100*cumsum(table(dados$filhos))/sum(table(dados$filhos))))
#calcula a frequencia relativa acumulada
freq_acum
##      [,1]
## [1,]   28
## [2,]   44
## [3,]   62
## [4,]   84
## [5,]   98
## [6,]  100
filhos.frame<-data.frame(table(dados$filhos),freq_rel,freq_acum)
#matriz com todas as fequencias
filhos.frame
##   Var1 Freq freq_rel freq_acum
## 1    1   14       28        28
## 2    2    8       16        44
## 3    3    9       18        62
## 4    4   11       22        84
## 5    5    7       14        98
## 6    7    1        2       100
  1. Tabela de frequências para dados agrupados em classes:

Quando a variável não é discreta nem categórica não se usa tabela de frequências com as contagens dos respectivos valores. Trabalha-se com os valores organizados em classes ou intervalos. O roteiro abaixo pode ser utilizado para construir uma tabela de dados agrupados em classes:

\(k=1+3.3*\log(n)\).

Fazendo uma mudança de base no logaritmo, chega-se a uma fórmula equivalente:

\(k=1+\log_{2}n\).

O valor obtido deve ser arredondado para cima.

Por exemplo, para \(n=50\),

\(k=1+3.3*\log(50)=1+3.3*1,69897=1+5,6=6,6 \Rightarrow k=7\).

O valor obtido deve ser arredondado para cima.

Exemplo de tabela de dados agrupados para a variável peso:

amp=max(dados$peso)-min(dados$peso)
amp
## [1] 45.1
h=ceiling(amp/7)
h
## [1] 7

Assim, a tabela terá \(k=7\) intervalos com amplitude \(h=7\) cada um.

Peso(kg) \(n_{i}\)
45\(\leq\) Peso < 52 3
52\(\leq\) Peso < 59 3
59\(\leq\) Peso < 66 9
66\(\leq\) Peso < 73 12
73\(\leq\) Peso < 80 14
80\(\leq\) Peso < 87 7
87\(\leq\) Peso < 94 2
Total 50

A tabela pode ser construída no R utilizando o pacote fdth. Para instalá-lo utilize o comando

install.packages(“fdth”, dependencies = T).

library(fdth)
## 
## Attaching package: 'fdth'
## The following objects are masked from 'package:stats':
## 
##     sd, var
d<-fdt(dados$peso)#utilizando o default do R
d
##   Class limits  f   rf rf(%) cf cf(%)
##  [47.52,54.16)  3 0.06     6  3     6
##  [54.16,60.81)  4 0.08     8  7    14
##  [60.81,67.45)  9 0.18    18 16    32
##   [67.45,74.1) 14 0.28    28 30    60
##   [74.1,80.74) 12 0.24    24 42    84
##  [80.74,87.39)  6 0.12    12 48    96
##  [87.39,94.03)  2 0.04     4 50   100
d<-fdt(dados$peso,start=48,end=98,h=7)
#definindo início, fim e amplitude dos intervalos
d
##  Class limits  f   rf rf(%) cf cf(%)
##       [48,55)  3 0.06     6  3     6
##       [55,62)  6 0.12    12  9    18
##       [62,69) 10 0.20    20 19    38
##       [69,76) 15 0.30    30 34    68
##       [76,83) 12 0.24    24 46    92
##       [83,90)  3 0.06     6 49    98
##       [90,97)  1 0.02     2 50   100

Experimente reproduzir a tabela obtida manualmente:

tab<-fdt(dados$peso,start=45,end=94,h=7)
print(tab)
##  Class limits  f   rf rf(%) cf cf(%)
##       [45,52)  3 0.06     6  3     6
##       [52,59)  3 0.06     6  6    12
##       [59,66)  9 0.18    18 15    30
##       [66,73) 12 0.24    24 27    54
##       [73,80) 14 0.28    28 41    82
##       [80,87)  7 0.14    14 48    96
##       [87,94)  2 0.04     4 50   100

Lista 1

  1. Gráficos

Muitas vezes a informação contida em tabelas de frequência pode ser mais facilmente visualizada através de gráficos. Os meios de comunicação apresentam frequentemente informações utilizando os gráficos. Deve-se, entretanto, tomar alguns cuidados na confecção de um gráfico como, por exemplo, manter proporções entre as medidas que ele representa para não passar falsa impressão de desempenho e conduzir a conclusões errôneas.

Há vários tipos de gráficos que podem ser utilizados de acordo com o tipo de variável de interesse. Dentre eles, destacam-se: disco ou pizzza, barras e histograma.

O gráfico de disco, pizza ou diagrama circular adapta-se muito bem às variáveis qualitativas nominais. Consiste em repartir um disco em setores circulares correspondentes às frequências relativas percentuais da variável.

O gráfico de disco para a variável tolerância ao cigarro é apresentado abaixo:

pie(table(dados$toler),col=c(10,20,30),
    main="Tolerância ao cigarro",
    labels = c("I(32%)","M(44%)","P(24%)"))

O gráfico de barras utiliza o plano cartesiano com os valores da variável no eixo das abscissas e as frequências no eixo das ordenadas. Para cada valor da variável desenha-se uma barra com altura correspondendo à sua frequência. Este tipo de gráfico é adequado para variáveis quantitativas discretas ou qualitativas ordinais.

O gráfico de barras para a variável número de filhos na família é apresentado a seguir. São mostrados dois comandos diferentes: barplot e plot.

par(mfrow=c(1,2))#divide a tela gráfica em uma matriz 1X2
barplot(table(dados$filhos),main="Número de filhos",
        xlab="Número de filhos",ylab="Frequência")

plot(prop.table(table(dados$filhos)),main="Número de filhos",
     xlab="Número de filhos",ylab="Proporção")

O histograma consiste em retângulos adjacentes com base nas faixas de valores da variável e com área igual à frequência relativas da respectiva faixa. Assim, a altura de cada retângulo é denominada densidade de frequência ou simplesmente densidade definida pelo quociente da área pela amplitude da faixa.

Para a variável peso pode-se utilizar o comando hist(dados$peso) para obter o histograma abaixo.

hist(dados$peso)

Se quiser obter o histograma conforme a tabela de frequências, é necessário acrescentar algumas infomações ao comando.

hist(dados$peso,axes=F,right=F,probability=T,labels=T,
     breaks=c(45,52,59,66,73,80,87,94))
axis(1, at = seq(45,94,by=7),pos=0)
axis(2, at = seq(0,0.10,by=0.01))

Acrescentando título

hist(dados$peso,axes=F,right=F,probability=T,labels=T,
     breaks=c(45,52,59,66,73,80,87,94),main="Histograma de peso", 
     xlab="peso",ylab="densidade")
axis(1, at = seq(45,94,by=7),pos=0)
axis(2, at = seq(0,0.10,by=0.01))

6. Outros gráficos

O polígono de frequência é um gráfico de linha que une os pontos médios dos intervalos de classe. Alinha poligonal pode criar uma espécie de ``emolduramento’’ do histograma. A variável peso apresenta o polígono de frequência abaixo.

#reproduzindo a tabela obtida anteriormente
tab<-fdt(dados$peso,start=45,end=94,h=7)
#plotando o polígono
plot(tab, type='fp',lwd=2,col='red')

É possível, como dito anteriormente, fazer com que o poligono de frequência crie uma espécie de moldura no histograma.

#desenha o histograma definido no objeto tab
plot(tab)
#retém a janela gráfica permitindo traçar outro gráfico
par(new=TRUE)
#poligono de frequencias
plot(tab, type='fp',lwd=2,col='red')

A ogiva é um gráfico de linha que representa as frequências acumuladas (absolutas ou relativas). Ela serve para estimar valores de percentis que são do interesse do pesquisador.

# Polígono da densidade acumulada
plot(tab, type='cdp',las=1, lwd=2,ylim=c(0,1))

# Polígono da frequência acumulada percentual
plot(tab,type='cfpp',las=1,lwd=2,ylim=c(0,100))
text(60,90,"Ogiva")
arrows(x0=60,y0=80,x1=70,y1=60)

Se o interesse do pesquisador for estimar o valor que deixa pelo menos 50% dos dados abaixo de si e pelo menos 50% acima de si, isto é, a mediana da amostra, basta construir a ogiva, traçar uma linha horizontal no percentil 50 e a partir da interseção com o gráfico baixar uma perpendicular ao eixo horizontal. Pronto, este é o valor estimado da mediana.

plot(tab,type='cfpp',las=1,lwd=2,ylim=c(0,100),col='blue',
     ylab='Frequencia acumulada percentual',xlab='Peso')
lines(c(0,median(tab)),c(50,50),lwd=1,col='red',lty=2)
lines(c(median(tab),median(tab)),c(0,50),lwd=1,col='red',lty=2)
text(87,  50, 'Mediana estimada', col='blue', cex=0.7)
arrows(x0=87,y0=40,x1=73,y1=5)
abline(h=0)

O gráfico em linha é uma representação da variação de uma grandeza ao longo do tempo. Consiste em colocar o tempo (conforme a unidade de medida) no eixo horizontal, os valores da variável no eixo vertical e unir os pontos por linhas retas.

Seja o caso da variação do preço de determinado produto no período de 1961 a 1972. O gráfico correspondente é mostrado abaixo.

set.seed(12)
serie <- ts(matrix(rnorm(300,20,5),50,1),start=1961,end=1968,frequency=4)
serie
##          Qtr1     Qtr2     Qtr3     Qtr4
## 1961 12.59716 27.88585 15.21628 15.39997
## 1962 10.01179 18.63852 18.42326 16.85872
## 1963 19.46768 22.14007 16.11140 13.53059
## 1964 16.10217 20.05976 19.23792 16.48268
## 1965 25.94440 21.70256 22.53484 18.53347
## 1966 21.11821 30.03601 25.05990 18.48770
## 1967 14.87378 18.66308 19.00447 20.65561
## 1968 20.72900
plot(serie)

É possível obter outro gráfico de linha utilizando o pacote lattice.

library(lattice)
xyplot(serie)

  1. Uso do histograma para estimar mediana

Inicialmente, identifica-se qual retângulo deve conter a mediana. Por uma simples soma das frequências dos retângulos conclui-se que a mediana pertence ao intervalo \([66,73)\), pois até o valor 73 estão acumuladas 54% das observações. Dentro dessa faixa, é preciso obter um retângulo com área igual a 20%, que é o que falta para atingir o valor 50%. Até a classe anterior há 30% das observações acumuladas. Então, utilizando proporções, estabelece-se a seguinte igualdade:

\(\dfrac{med-66}{0,20}=\dfrac{73-66}{0,24}\)

Daí segue que med=71,833..

A situação descrita é ilustrada na figura a seguir.

#histograma com frequencias relativas
#v=TRUE coloca os valores das frequencias relativas nos retangulos
plot(tab,type='rfh',las=1,v=TRUE)
lines(c(median(dados$peso),median(dados$peso)),c(0,50),lwd=1,col='red',lty=2)

Como informação adicional, o valor correto da mediana da variável peso é 72,2. Com isso, pode-se verificar que a ogiva fornece uma estimativa mais grosseira do que o histograma. Mas, isso era de se esperar, pois a ogiva fornece apenas uma visualização, enquanto que com o histograma foi feita uma interpolação linear.