A análise univariada consiste basicamente em, para cada uma das variáveis individualmente: A partir destes resultados pode-se montar um resumo geral dos dados. Quando se estuda uma variável, o maior intersse do pesquisador é conhecer o comportamento dessa variável, analisando a ocorrência de suas possíveis realizações. Nesse sentido, as distribuições de frequência serão o principal recurso que utilizaremos para resumir uma única variável. A seguir vamos mostrar como obter tabelas e gráficos simples. Para isto vamos selecionar uma variável de cada tipo para que o leitor possa, por analogia, obter resultados para as demais.
A variável Est.civil é uma qualitativa nominal. Desta forma podemos obter:
Por ser uma variável qualitativa, para obter a distribuição de frequência desta variável, basta contarmos quantas vezes ocorre cada categoria (ou nível), e organizar em uma tabela. civil.tb <- table(milsa$Est.civil) cbind("f" = civil.tb) f casado 20 solteiro 16Esta simples contagem é chamada de frequência absoluta. Podemos também incluir nessa tabela a soma total de observações de todas as categorias. cbind("f" = addmargins(civil.tb)) f casado 20 solteiro 16 Sum 36Com essa informação adicional, podemos agora calcular a frequência relativa, ou seja, a frequência absoluta de cada categoria, dividida pelo total. cbind("fr" = prop.table(civil.tb)) fr casado 0.5555556 solteiro 0.4444444Note que, nesse caso, a soma das categorias deve somar 1 (ou 100%) cbind("fr" = addmargins(prop.table(civil.tb))) fr casado 0.5555556 solteiro 0.4444444 Sum 1.0000000Com isso, podemos definir alguns tipos de frequência.
Tipos de frequência
Os gráficos de barras e de setores são adequados para representar esta variável. O gráfico de barras é formado pelas categorias no eixo X, e pela frequência no eixo Y. A frequência utilizada pode ser tanto a absoluta quanto a relativa, conforme for o caso. par(mfrow = c(1, 2)) barplot(civil.tb, ylab = "Frequência absoluta") barplot(prop.table(civil.tb), ylab = "Frequência relativa", ylim = c(0, .6)) par(mfrow = c(1,1))O gráfico de setores (ou de pizza, ou torta, ou diagrama circular) também pode ser utilizado, mas apresenta uma maior limitação. Independente da frequência utilizada, cada setor terá a mesma área. Além disso, quando existem muitas categorias, e/ou as categorias possuem frequências semelhantes, a diferenciação dos setores é dificultada. pie(civil.tb)A moda de qualquer variável é definida como o valor mais frequente encontrado na amostra. No caso de variáveis qualitativas, a moda é a categoria que apresenta maior frequência. Nesse exemplo, a moda seria então names(civil.tb)[which.max(civil.tb)] [1] "casado"
Para exemplificar como obter análises para uma variável qualitativa ordinal vamos selecionar a variável Inst, que verificou o grau de instrução dos funcionários. As tabelas de frequências são obtidas de forma semelhante à mostrada anteriormente. A frequência absoluta é a contagem do número de vezes que cada categoria foi observada. Note que aqui, a ordem tem importância, portanto, a tabela também deve seguir a ordem natural das categorias. Abaixo, mostramos a tabela de frequência absoluta já com o somatório de todas as classes. inst.tb <- table(milsa$Inst) cbind("f" = addmargins(inst.tb)) f 1o Grau 12 2o Grau 18 Superior 6 Sum 36As frequências relativas também são obtidas através da divisão da frequência absoluta de cada classe pelo total, ou seja, cbind("f" = addmargins(inst.tb), "fr" = addmargins(prop.table(inst.tb))) f fr 1o Grau 12 0.3333333 2o Grau 18 0.5000000 Superior 6 0.1666667 Sum 36 1.0000000O gráfico de setores não é adequado para este tipo de variável por não expressar a ordem dos possíveis valores. Usamos então apenas um gráfico de barras conforme mostrado abaixo barplot(inst.tb)Em alguns casos podemos querer mostrar o gráfico de barras com as barras classificadas da menor para a maior, ou vice-versa, independente da ordem dos níveis. O importante é sempre deixar claro as categorias de cada barra. par(mfrow = c(1,2)) ## Menor para maior barplot(sort(inst.tb)) ## Maior para menor barplot(sort(inst.tb, decreasing = TRUE)) par(mfrow = c(1,1))Para uma variável ordinal, a moda também é especificada como a categoria de maior frequência, ou seja, names(inst.tb)[which.max(inst.tb)] [1] "2o Grau"
Vamos agora usar a variável Filhos (número de filhos) para ilustrar algumas análises que podem ser feitas com uma quantitativa discreta. Frequências absolutas e relativas são obtidas como anteriormente. Nesse caso, assumimos que cada valor numérico é uma categoria, e construímos as tabelas de frequência como se a variável fosse qualitativa ordinal. Note, no entanto, que quando existem poucos valores numéricos, essa abordagem é viável. Mas contagens podem assumir muitos valores diferentes, e nesses casos, fazer uma tabela de frequência pode não ajudar a resumir aquela variável. Quando esse for o caso, adotaremos a mesma técnica que usamos para resumir variáveis quantitativas contínuas, como veremos na próxima sessão. Abaixo, temos a frequência absoluta, com o total de observações filhos.tb <- table(milsa$Filhos) cbind("f" = addmargins(filhos.tb)) f 0 4 1 5 2 7 3 3 5 1 Sum 20Note que a soma foi 20, ao invés das 36 observações totais da planilha original. Como você deve imaginar ao ter inspecionado a tabela, isso ocorre pelo fato de que existem algumas observações perdidas para essa variável. Mais especificamente, existem 16 observações faltantes, aquelas marcadas com NA. Se for desejável, pode-se incluir a contagem de observações faltantes na tabela de frequência. cbind("f" = addmargins(table(milsa$Filhos, useNA = "always"))) f 0 4 1 5 2 7 3 3 5 1 <NA> 16 Sum 36Por ora, vamos usar a tabela de frequência sem a contagem destes valores perdidos. Nestes casos, é importante ter cuidado com as frequências relativas, que devem ser calculadas com o total da tabela, e não com o total de observações. Portanto, para esse exemplo, as frequências relativas seriam cbind("f" = addmargins(filhos.tb), "fr" = addmargins(prop.table(filhos.tb))) f fr 0 4 0.20 1 5 0.25 2 7 0.35 3 3 0.15 5 1 0.05 Sum 20 1.00Para variáveis cujos valores possuem ordenação natural (qualitativas ordinais e quantitativas em geral), faz sentido calcularmos também as frequências acumuladas. A frequência acumulada até um certo valor é obtida pela soma das frequências de todos os valores da variável, menores ou iguais ao valor considerado. filhos.tba <- as.table(cumsum(filhos.tb)) cbind("f" = addmargins(filhos.tb), "fr" = addmargins(prop.table(filhos.tb)), "F" = c(filhos.tba, NA)) f fr F 0 4 0.20 4 1 5 0.25 9 2 7 0.35 16 3 3 0.15 19 5 1 0.05 20 Sum 20 1.00 NATambém podemos definir a frequência acumulada relativa, que é o resultado da divisão das frequências acumuladas pelo total de observações, ou seja filhos.tba <- as.table(cumsum(filhos.tb)) cbind("f" = addmargins(filhos.tb), "fr" = addmargins(prop.table(filhos.tb)), "F" = c(filhos.tba, NA), "Fr" = c(filhos.tba/20, NA)) f fr F Fr 0 4 0.20 4 0.20 1 5 0.25 9 0.45 2 7 0.35 16 0.80 3 3 0.15 19 0.95 5 1 0.05 20 1.00 Sum 20 1.00 NA NACom isso, definimos também as frequências acumuladas.
Tipos de frequência acumulada
O gráfico adequado para frequências absolutas, relativas, ou acumuladas de uma variável discreta é parecido com um gráfico de barras, mas nesse caso, as frequências são indicadas por linhas. plot(filhos.tb, xlab = "Número de filhos", ylab = "Frequência absoluta")Outra possibilidade seria fazer gráficos de frequências relativa e de frequências relativas acumuladas conforme mostrado nas figuras abaixo. par(mfrow = c(1,2)) ## Frequência relativa plot(prop.table(filhos.tb), xlab = "Número de filhos", ylab = "Frequência relativa") ## Frequência relativa acumulada plot(filhos.tba/20, type = "S", # tipo step (escada) xlab = "Número de filhos", ylab = "Frequência acumulada relativa") par(mfrow = c(1,1))
Para concluir os exemplos para análise univariada vamos considerar a variável quantitativa contínua Salario. Para se fazer uma tabela de frequências de uma variável contínua, é preciso primeiro agrupar os dados em classes pré-estabelecidas. A escolha dos intervalos de classe geralmente é arbitrária, e a familiaridade do pesquisador com os dados é que lhe indicará quantas e quais classes devem ser utilizadas. No entanto, algumas regras simples podem ser úteis para auxiliar na construção das classes. Uma forma seria calcular a amplitude de classe (\(h\)) através da relação \[ h = \frac{AT}{k} \] onde \(AT = \max{\mathbf{x}} - \min{\mathbf{x}}\) é a amplitude total dos dados, e \(k = \sqrt{n}\) é um número estimado de intervalos de classes para um conjunto de dados com \(n\) observações (\(k\) pode ser calculado por outras definições, como a regra de Sturges, por exemplo). Note que, para facilitar o cálculo da amplitude de classe e posteriormente para montar a tabela de distribuição de frequência, podemos ordenar o vetor de dados brutos. Por exemplo, os valores ordenados (em ordem crescente) de Salario são sort(milsa$Salario) [1] 4.00 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.44 7.59 8.12 8.46 [13] 8.74 8.95 9.13 9.35 9.77 9.80 10.53 10.76 11.06 11.59 12.00 12.79 [25] 13.23 13.60 13.85 14.69 14.71 15.99 16.22 16.61 17.26 18.75 19.40 23.30Com isso, naturalmente já visualizamos os valores máximo e mínimo, e sabemos que a amplitude total é \[ AT = 23.3 - 4 = 19.3 \] Como temos 36 observações, o número estimado de classes é \(k = \sqrt{n} = \sqrt{36} = 6\). Portanto, a amplitude de classe é \[ h = \frac{AT}{k} = \frac{19.3} {6} = 3.2166667 \] O valor de amplitude de classe pode ser arredondado para um número inteiro, geralmente para facilitar a interpretação da tabela. Nesse caso, poderíamos arredondar a amplitude para 3 ou para 4 (inteiros mais próximos). Como o valor mínimo é 4 e o máximo está próximo de 24, é natural arredondarmos a amplitude para 4. Após esse arredondamento, vamos denominar a amplitude de classe definitiva por \(\Delta\), apenas para diferenciar do valor calculado em \(h\). Dessa forma, as classes seriam formadas pela sequência, ou “quebra de classes” definida por (quebra <- seq(4, 24, 4)) [1] 4 8 12 16 20 24Portanto, ficamos com um total de 5 classes. A última etapa é definir os extremos de classe que serão abertos (permitem incluir aquele valor exato) ou fechados (não incluem aquele valor). Para isso, usaremos a notação a seguir
Nesse exemplo, vamos usar intervalos do tipo fechados à esquerda (abertos à direita), pois o primeiro valor de quebra de classe é o igual ao valor mínimo do conjunto de dados, e dessa forma garantimos que todos os valores pertençam a alguma das classes. Portanto, as classes completas com suas respectivas frequências absolutas estão na tabela abaixo. classes <- cut(milsa$Salario, breaks = quebra, right = FALSE) classes.tab <- table(classes) cbind("f" = addmargins(classes.tab)) f [4,8) 10 [8,12) 12 [12,16) 8 [16,20) 5 [20,24) 1 Sum 36Para completar esta tabela, podemos obter os demais tipos de frequência, conforme visto anteriormente: \(f_r\) (frequência relativa), \(F\) (frequência acumulada), e \(F_r\) (frequência acumulada relativa). cbind("f" = addmargins(classes.tab), "fr" = addmargins(prop.table(classes.tab)), "F" = c(cumsum(classes.tab), NA), "Fr" = c(cumsum(classes.tab), NA)/36) f fr F Fr [4,8) 10 0.27777778 10 0.2777778 [8,12) 12 0.33333333 22 0.6111111 [12,16) 8 0.22222222 30 0.8333333 [16,20) 5 0.13888889 35 0.9722222 [20,24) 1 0.02777778 36 1.0000000 Sum 36 1.00000000 NA NANa sequência vamos mostrar três possíveis gráficos para variáveis contínuas: o de dispersão, o histograma, e o de ramo-e-folhas. O gráfico de dispersão unidimensional consiste da variável de interesse no eixo Y, plotada com seus respectivos índices (entrada) da tabela de dados. Nesse exemplo, o gráfico seria plot(milsa$Salario, xlab = "Índice", ylab = "Salário")Note que, como os dados nesta tabela estão ordenados (em ordem crescente) pelos salários, então vemos esse padrão de cresimento. Mas a ordenação não é um pré-requisito para fazer esse gráfico. A interpretação desse gráfico é limitada pelo fato de que só faz sentido dizer alguma coisa sobre os salários se os índices (nesse caso, os funcionários) tivessem algum tipo de identificação. Por esse motivo, o histograma é uma forma mais eficiente de resumir variáveis contínuas. O histograma é um gráfico de barras contíguas, com as bases proporcionais aos intervalos de classe, e a área de cada retângulo proporcional à respectiva frequência. Pode-se usar tanto a frequêcia absoluta (\(f_i\)) quanto a relativa (\(fr_i\)). Indicamos a amplitude do \(i\)-ésimo intervalo por \(\Delta_i\). Para que a área do retângulo respectivo seja proporcional a \(fr_i\), a sua altura deve ser proporcional a \(fr_i/\Delta_i\), que é chamada densidade de frequência, ou simplesmente densidade da \(i\)-ésima classe. Quando todos os intervalos de classe forem iguais a \(\Delta\) (como é o caso nesse exemplo), então a densidade de frequência simplifica para \(fr_i/\Delta\). Com essa convenção, garantimos que a área total do histograma será igual a um, uma propriedade que será importante quando estudarmos probabilidade. Abaixo, vemos os histogramas com as frequências absolutas, e com a densidade de frequência. par(mfrow = c(1,2)) hist(milsa$Salario, breaks = quebra, right = FALSE, main = "", xlab = "Classes", ylab = "Frequência absoluta", xlim = c(4, 24), labels = TRUE, axes = FALSE) axis(1, at = quebra, labels = quebra); axis(2) h <- hist(milsa$Salario, breaks = quebra, right = FALSE, main = "", xlab = "Classes", ylab = "Densidade", xlim = c(4, 24), ylim = c(0, .09), freq = FALSE, axes = FALSE) axis(1, at = quebra, labels = quebra); axis(2) text(h$mids, h$density, labels = round(h$density * 4, 2), pos = 3) par(mfrow = c(1,1))Note que, para construir o gráfico com as densidades, precisamos então de mais uma coluna na tabela, que seria a densidade \(fr_i/\Delta = fr_i/4\). cbind("f" = addmargins(classes.tab), "fr" = addmargins(prop.table(classes.tab)), "F" = c(cumsum(classes.tab), NA), "Fr" = c(cumsum(classes.tab), NA)/36, "Dens" = c(prop.table(classes.tab)/4, NA)) f fr F Fr Dens [4,8) 10 0.27777778 10 0.2777778 0.069444444 [8,12) 12 0.33333333 22 0.6111111 0.083333333 [12,16) 8 0.22222222 30 0.8333333 0.055555556 [16,20) 5 0.13888889 35 0.9722222 0.034722222 [20,24) 1 0.02777778 36 1.0000000 0.006944444 Sum 36 1.00000000 NA NA NAO que devemos observar em um histograma:
Tanto o histograma quanto os gráficos de barra, dão uma ideia da forma da distribuição de uma variável. Existem várias medidas para resumir uma variável, como veremos mais adiante, mas a forma da distribuição é tão importante quanto estas medidas. Por exemplo, saber que a média de salários da empresa “Milsa” é 11.12 é importante, mas saber como os salários se distribuem entre os funcionários da empresa (como vimos pelo histograma) pode ser mais importante. Outro método para se resumir uma variável com o objetivo de obter uma ideia da forma de sua distribuição, é através do “gráfico” de ramo-e-folhas. Este é um método bem simples, e foi criado na época em que fazer gráficos no computador era uma tarefa difícil. Mas ainda hoje é uma forma de visualização muito efetiva. Uma vantagem sobre o histograma é que não perdemos (ou perdemos muito pouca) informação sobre os dados em si. Não existe uma regra fixa para construir o ramo-e-folhas, mas a ideia básica é dividir cada observação em duas partes: a primeira (o ramo) é colocada no lado esquerdo de uma linha vertical, e a segunda (a folha) é colocada à direita. Geralmente, a divisão natural é separar um número contínuo em sua parte inteira à esquerda, e a parte decimal à direita. Dessa forma o ramo-e-folha para a variável Salario está abaixo. stem(milsa$Salario, scale = 2) The decimal point is at the | 4 | 06 5 | 37 6 | 379 7 | 446 8 | 157 9 | 01488 10 | 58 11 | 16 12 | 08 13 | 269 14 | 77 15 | 16 | 026 17 | 3 18 | 8 19 | 4 20 | 21 | 22 | 23 | 3Note que, por simplificação, os valores foram arredondados para uma casa decimal, assim, por exemplo, o segundo valor de 4,56 foi arredondado para 4,6, e representado na primeira linha do gráfico, junto com o primeiro valor que é 4,0. Algumas informações que podemos obter a partir do ramo-e-folhas:
Existem diversas variações do gráfico de ramo-e-folhas, mas não entraremos em detalhes.
|