Como fazer comparação entre graficos com variaveis quantitativas

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:

  1. Uma tabela de frequências (absolutas e/ou relativas)
  2. Um gráfico de barras ou de setores
  3. A “moda”, i.e. o valor que ocorre com maior frequência

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 16

Esta 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 36

Com 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.4444444

Note 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.0000000

Com isso, podemos definir alguns tipos de frequência.

Tipos de frequência

  • Frequência absoluta (\(f_i\)): número total de elementos em cada classe

  • Frequência relativa (\(fr_i\)): razão entre cada valor da frequência absoluta e o total de observações \[ fr_i = \frac{f_i}{\sum f_i} \]

  • Frequência percentual (\(fp_i\)): frequência relativa em porcentagem \[ fp_i = fr_i \times 100 \]

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))

Como fazer comparação entre graficos com variaveis quantitativas

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)

Como fazer comparação entre graficos com variaveis quantitativas

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 36

As 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.0000000

O 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)

Como fazer comparação entre graficos com variaveis quantitativas

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))

Como fazer comparação entre graficos com variaveis quantitativas

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 20

Note 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 36

Por 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.00

Para 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 NA

També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 NA

Com isso, definimos também as frequências acumuladas.

Tipos de frequência acumulada

  • Frequência acumulada (\(F_i\)): soma das frequências simples de uma classe com a frequência simples da classe anterior

  • Frequência acumulada relativa (\(Fr_i\)): frequência acumulada da classe dividida pelo total de observações \[ Fr_i = \frac{F_i}{\sum f_i} \]

  • Frequência acumulada percentual (\(Fp_i\)): frequência acumulada relativa em porcentagem \[ Fp_i = Fr_i \times 100 \]

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")

Como fazer comparação entre graficos com variaveis quantitativas

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))

Como fazer comparação entre graficos com variaveis quantitativas

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.30

Com 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 24

Portanto, 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

[a,b) \(a \vdash b\) Fechado em a, aberto em b Inclui a, não inclui b
(a,b] \(a \dashv b\) Aberto em a, fechado em b Não inclui a, inclui b

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 36

Para 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 NA

Na 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")

Como fazer comparação entre graficos com variaveis quantitativas

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))

Como fazer comparação entre graficos com variaveis quantitativas

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 NA

O que devemos observar em um histograma:

  • Amplitude de valores
  • Forma da distribuição (assimetria):
    • Positiva
    • Negativa
    • Simétrica
  • Tendência central
  • Valores extremos

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 | 3

Note 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:

  • Há um destaque para o valor 23,3.
  • Os demais valores se concentram mais fortemente entre 4,0 e 14,7.
  • Um valor mais ou menos típico para essa variável seria em torno de 9.
  • Há uma leve assimetria em direção aos valores grandes.

Existem diversas variações do gráfico de ramo-e-folhas, mas não entraremos em detalhes.

  1. Em um questionário aplicado aos estudantes que frequentavam a livraria do campus, foi perguntado como classificariam o serviço prestado. As respostas foram:
ex <- c("ótimo", "bom", "bom", "péssimo", "bom", "bom", "ótimo", "ótimo", "bom", "ótimo", "bom", "ótimo", "bom", "bom", "ótimo", "bom", "péssimo", "bom", "péssimo", "bom", "péssimo", "bom", "bom", "bom", "bom", "ótimo", "bom", "péssimo", "ótimo", "ótimo", "bom", "péssimo") ex [1] "ótimo" "bom" "bom" "péssimo" "bom" "bom" "ótimo" [8] "ótimo" "bom" "ótimo" "bom" "ótimo" "bom" "bom" [15] "ótimo" "bom" "péssimo" "bom" "péssimo" "bom" "péssimo" [22] "bom" "bom" "bom" "bom" "ótimo" "bom" "péssimo" [29] "ótimo" "ótimo" "bom" "péssimo"
  1. Como você classificaria estas respostas?
  2. Crie uma tabela e um gráfico para representar e resumir esta informação.
  1. Considere os dados abaixo
ex1 <- c(11,13,10,9,0,16,28,15,14,1,2,17, 18,12,18,8,9,22,16,20,34,15,21,13, 12,14,13,19,0,2,17,11,18,16,13,6, 19,8,8,12,13,21,11,19,1,14,4,16) sort(ex1) [1] 0 0 1 1 2 2 4 6 8 8 8 9 9 10 11 11 11 12 12 12 13 13 13 13 13 [26] 14 14 14 15 15 16 16 16 16 17 17 18 18 18 19 19 19 20 21 21 22 28 34
  1. Monte uma tabela construindo as classes conforme os critérios apresentados.
  2. Calcule as frequências: absoluta, relativa, percentual, acumulada, acumulada relativa, acumulada percentual.
  3. Faça um histograma com a densidade das classes.
  4. Faça um diagrama de ramo-e-folhas.