9 Análise descritiva

9.1 Descrição univariada

Nesta sessão vamos ver alguns (mas não todos!) comandos do R para fazer uma análise descritiva de um conjunto de dados.

Uma boa forma de iniciar uma análise descritiva adequada é verificar os tipode de variáveis disponíveis. Variáveis podem ser classificadas da seguinte forma:

e podem ser resumidas por tabelas, gráficos e/ou medidas.

9.2 Descrevendo o conjunto de dados “milsa” de Bussab & Morettin

O livro Estatística Básica de W. Bussab e P. Morettin traz no primeiro capítulo um conjunto de dados hipotético de atributos de 36 funcionários da companhia “Milsa”. Os dados estão reproduzidos na tabela 9.2. Veja o livro para mais detalhes sobre este dados.



Tabela 3: Dados de Bussab & Morettin
















Funcionário
Est. Civil
Instrução
No Filhos
Salário
Ano
Mês
Região








1 solteiro 1o Grau - 4.00 26 3interior
2 casado 1o Grau 1 4.56 32 10capital
3 casado 1o Grau 2 5.25 36 5capital
4 solteiro 2o Grau - 5.73 20 10outro
5 solteiro 1o Grau - 6.26 40 7outro
6 casado 1o Grau 0 6.66 28 0interior
7 solteiro 1o Grau - 6.86 41 0interior
8 solteiro 1o Grau - 7.39 43 4capital
9 casado 2o Grau 1 7.59 34 10capital
10 solteiro 2o Grau - 7.44 23 6outro
11 casado 2o Grau 2 8.12 33 6interior
12 solteiro 1o Grau - 8.46 27 11capital
13 solteiro 2o Grau - 8.74 37 5outro
14 casado 1o Grau 3 8.95 44 2outro
15 casado 2o Grau 0 9.13 30 5interior
16 solteiro 2o Grau - 9.35 38 8outro
17 casado 2o Grau 1 9.77 31 7capital
18 casado 1o Grau 2 9.80 39 7outro
19 solteiro Superior - 10.53 25 8interior
20 solteiro 2o Grau - 10.76 37 4interior
21 casado 2o Grau 1 11.06 30 9outro
22 solteiro 2o Grau - 11.59 34 2capital
23 solteiro 1o Grau - 12.00 41 0outro
24 casado Superior 0 12.79 26 1outro
25 casado 2o Grau 2 13.23 32 5interior
26 casado 2o Grau 2 13.60 35 0outro
27 solteiro 1o Grau - 13.85 46 7outro
28 casado 2o Grau 0 14.69 29 8interior
29 casado 2o Grau 5 14.71 40 6interior
30 casado 2o Grau 2 15.99 35 10capital
31 solteiro Superior - 16.22 31 5outro
32 casado 2o Grau 1 16.61 36 4interior
33 casado Superior 3 17.26 43 7capital
34 solteiro Superior - 18.75 33 7capital
35 casado 2o Grau 2 19.40 48 11capital
36 casado Superior 3 23.30 42 2interior









O que queremos aqui é ver como, no programa R:

Estes são dados no "estilo planilha", com variáveis de diferentes tipos: categóricas e numéricas (qualitativas e quantitativas). Portanto o formato ideal de armazenamento destes dados no R é o data.frame. Para entrar com estes dados no diretamente no R podemos usar o editor que vem com o programa. Para digitar rapidamente estes dados é mais fácil usar códigos para as variáveis categóricas. Desta forma, na coluna de estado civil vamos digitar o código 1 para solteiro e 2 para casado. Fazemos de maneira similar com as colunas Grau de Instrução e Região de Procedência. No comando a seguir invocamos o editor, entramos com os dados na janela que vai aparecer na sua tela e quanto saímos do editor (pressionando o botão QUIT) os dados ficam armazenados no objeto milsa. Após isto digitamos o nome do objeto (milsa) e podemos ver o conteúdo digitado, como mostra a tabela 9.2. Lembre-se que se voce precisar corrigir algo na digitação voce pode fazê-lo abrindo a planilha novamente com o comando fix(milsa).

  > milsa <- edit(data.frame())
  > milsa
  > fix(milsa)


Tabela 4: Dados digitados usando códigos para variáveis

















civil
instrucao
filhos
salario
ano
mes
regiao








1 1 1 NA 4.00 26 3 1
2 2 1 1 4.56 32 10 2
3 2 1 2 5.25 36 5 2
4 1 2 NA 5.73 20 10 3
5 1 1 NA 6.26 40 7 3
6 2 1 0 6.66 28 0 1
7 1 1 NA 6.86 41 0 1
8 1 1 NA 7.39 43 4 2
9 2 2 1 7.59 34 10 2
10 1 2 NA 7.44 23 6 3
11 2 2 2 8.12 33 6 1
12 1 1 NA 8.46 27 11 2
13 1 2 NA 8.74 37 5 3
14 2 1 3 8.95 44 2 3
15 2 2 0 9.13 30 5 1
16 1 2 NA 9.35 38 8 3
17 2 2 1 9.77 31 7 2
18 2 1 2 9.80 39 7 3
19 1 3 NA 10.53 25 8 1
20 1 2 NA 10.76 37 4 1
21 2 2 1 11.06 30 9 3
22 1 2 NA 11.59 34 2 2
23 1 1 NA 12.00 41 0 3
24 2 3 0 12.79 26 1 3
25 2 2 2 13.23 32 5 1
26 2 2 2 13.60 35 0 3
27 1 1 NA 13.85 46 7 3
28 2 2 0 14.69 29 8 1
29 2 2 5 14.71 40 6 1
30 2 2 2 15.99 35 10 2
31 1 3 NA 16.22 31 5 3
32 2 2 1 16.61 36 4 1
33 2 3 3 17.26 43 7 2
34 1 3 NA 18.75 33 7 2
35 2 2 2 19.40 48 11 2
36 2 3 3 23.30 42 2 1









Atenção: Note que além de digitar os dados na planilha digitamos também o nome que escolhemos para cada variável. Para isto basta, na planilha, clicar no nome da variável e escolher a opção CHANGE NAME e informar o novo nome da variável.

A planilha digitada como está ainda não está pronta. Precisamos informar para o programa que as variáveis civil, instrucao e regiao, NÃO são numéricas e sim categóricas. No R variáveis categóricas são definidas usando o comando factor(), que vamos usar para redefinir nossas variáveis conforme os comandos a seguir. Inicialmente inspecionamos as primeiras linhas do conjunto de dados. A seguir redefinimos a variável civil com os rótulos (labels) solteiro e casado associados aos níveis (levels) 1 e 2. Para variável instruçao usamos o argumento adicional ordered = TRUE para indicar que é uma variável ordinal. Na variável regiao codificamos assim: 2=capital, 1=interior, 3=outro. Ao final inspecionamos as primeiras linhas do conjunto de dados digitando usando head().

  > head(milsa)
    funcionario civil instrucao filhos salario ano mes regiao
  1           1     1         1     NA    4.00  26   3      1
  2           2     2         1      1    4.56  32  10      2
  3           3     2         1      2    5.25  36   5      2
  4           4     1         2     NA    5.73  20  10      3
  5           5     1         1     NA    6.26  40   7      3
  6           6     2         1      0    6.66  28   0      1
  > milsa$civil <- factor(milsa$civil, label = c("solteiro", "casado"),
  +     levels = 1:2)
  > milsa$instrucao <- factor(milsa$instrucao, label = c("1oGrau",
  +     "2oGrau", "Superior"), lev = 1:3, ord = T)
  > milsa$regiao <- factor(milsa$regiao, label = c("capital", "interior",
  +     "outro"), lev = c(2, 1, 3))
  > head(milsa)
    funcionario    civil instrucao filhos salario ano mes   regiao
  1           1 solteiro    1oGrau     NA    4.00  26   3 interior
  2           2   casado    1oGrau      1    4.56  32  10  capital
  3           3   casado    1oGrau      2    5.25  36   5  capital
  4           4 solteiro    2oGrau     NA    5.73  20  10    outro
  5           5 solteiro    1oGrau     NA    6.26  40   7    outro
  6           6   casado    1oGrau      0    6.66  28   0 interior

Em versões mais recentes do R foi introduzida a função transform() que pode ser usada alternativamente aos comandos mostrados acima para modificar ou gerar novas variáveis. Por exemplo, os comandos acima poderiam ser substituídos por:

  > milsa <- transform(milsa, civil = factor(civil, label = c("solteiro",
  +     "casado"), levels = 1:2), instrucao = factor(instrucao, label = c("1oGrau",
  +     "2oGrau", "Superior"), lev = 1:3, ord = T), regiao = factor(regiao,
  +     label = c("capital", "interior", "outro"), lev = c(2, 1,
  +         3)))

Vamos ainda definir uma nova variável única idade a partir das variáveis ano e mes que foram digitadas. Para gerar a variável idade em anos fazemos:

  > milsa <- transform(milsa, idade = ano + mes/12)
  > milsa$idade
   [1] 26.25000 32.83333 36.41667 20.83333 40.58333 28.00000 41.00000 43.33333
   [9] 34.83333 23.50000 33.50000 27.91667 37.41667 44.16667 30.41667 38.66667
  [17] 31.58333 39.58333 25.66667 37.33333 30.75000 34.16667 41.00000 26.08333
  [25] 32.41667 35.00000 46.58333 29.66667 40.50000 35.83333 31.41667 36.33333
  [33] 43.58333 33.58333 48.91667 42.16667

Uma outra forma de se obter o mesmo resultado seria:

  > milsa$idade <- milsa$ano + milsa$mes/12

Agora que os dados estão prontos podemos começar a análise descritiva. A seguir mostramos como fazer análises descritivas uni e bi-variadas. Inspecione os comandos mostrados a seguir e os resultados por eleas produzidos. Sugerimos ainda que o leitor use o R para reproduzir os resultados mostrados no texto dos capítulos 1 a 3 do livro de Bussab & Morettin relacionados com este exemplo.

Inicialmente verificamos que o objeto milsa é um data-frame, usamos names() para ver os nomes das variáveis, e dim() para ver o número de linhas (36 indivíduos) e colunas (9 variáveis).

  > is.data.frame(milsa)
  [1] TRUE
  > names(milsa)
  [1] "funcionario" "civil"       "instrucao"   "filhos"      "salario"
  [6] "ano"         "mes"         "regiao"      "idade"
  > dim(milsa)
  [1] 36  9

Como na sequência vamos fazer diversas análises com estes dados usaremos o command attach() para anexar o objeto ao caminho de procura para simplificar a digitação.

  > attach(milsa)

NOTA: este comando deve ser digitado para que os comandos mostrados a seguir tenham efeito.

9.2.1 Análise Univariada

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.

A seguir vamos mostrar como obter tabelas, gráficos e medidas com o R. Para isto vamos selecionar uma variável de cada tipo para que o leitor possa, por analogia, obter resultados para as demais.

Variável Qualitativa Nominal A variável civil é uma qualitativa nominal. Desta forma podemos obter: (i) uma tabela de frequências (absolutas e/ou relativas), (ii) um gráfico de setores, (iii) a "moda", i.e. o valor que ocorre com maior frequência.

Vamos primeiro listar os dados e checar se estao na forma de um fator, que é adequada para variáveis deste tipo.

  > civil

   [1] solteiro casado   casado   solteiro solteiro casado   solteiro solteiro
   [9] casado   solteiro casado   solteiro solteiro casado   casado   solteiro
  [17] casado   casado   solteiro solteiro casado   solteiro solteiro casado
  [25] casado   casado   solteiro casado   casado   casado   solteiro casado
  [33] casado   solteiro casado   casado
  Levels: solteiro casado

  > is.factor(civil)

  [1] TRUE

A seguir obtemos frequências absolutas e relativas (note duas formas fiferentes de obter as frequências relativas. Note ainda que optamos por armazenar as frequências absolutas em um objeto que chamamos de civil.tb.

  > civil.tb <- table(civil)
  > civil.tb

  civil
  solteiro   casado
        16       20

  > 100 * table(civil)/length(civil)

  civil
  solteiro   casado
  44.44444 55.55556

  > prop.table(civil.tb)

  civil
   solteiro    casado
  0.4444444 0.5555556

O gráfico de setores é adequado para representar esta variável conforme mostrado na Figura 9.2.1.

  > pie(table(civil))


PIC

Figura 7: Gráfico de setores para variável civil.


NOTA: Em computadores antigos e de baixa resolução gráfica (como por exemplo em alguns computadores da Sala A do LABEST/UFPR) o gráfico pode não aparecer de forma adequada devido limitação de memória da placa de vídeo. Se este for o caso use o comando mostrado a seguir ANTES de fazer o gráfico.

  > X11(colortype = "pseudo.cube")

Finalmente encontramos a moda para esta variável cujo valor optamos por armazenar no objeto civil.mo.

  > civil.mo <- names(civil.tb)[which.max(civil.tb)]
  > civil.mo
  [1] "casado"

Variável Qualitativa Ordinal Para exemplificar como obter análises para uma variável qualitativa ordinal vamos selecionar a variável instrucao.

  > instrucao

   [1] 1oGrau   1oGrau   1oGrau   2oGrau   1oGrau   1oGrau   1oGrau   1oGrau
   [9] 2oGrau   2oGrau   2oGrau   1oGrau   2oGrau   1oGrau   2oGrau   2oGrau
  [17] 2oGrau   1oGrau   Superior 2oGrau   2oGrau   2oGrau   1oGrau   Superior
  [25] 2oGrau   2oGrau   1oGrau   2oGrau   2oGrau   2oGrau   Superior 2oGrau
  [33] Superior Superior 2oGrau   Superior
  Levels: 1oGrau < 2oGrau < Superior

  > is.factor(instrucao)

  [1] TRUE

As tabelas de frequências são obtidas de forma semelhante à mostrada anteriormente.

  > instrucao.tb <- table(instrucao)
  > instrucao.tb

  instrucao
    1oGrau   2oGrau Superior
        12       18        6

  > prop.table(instrucao.tb)

  instrucao
     1oGrau    2oGrau  Superior
  0.3333333 0.5000000 0.1666667

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 um gráfico de barras conforma mostrado na Figura 9.2.1.

  > barplot(instrucao.tb)


PIC

Figura 8: Gráfico de barras para variável instrucao.


Para uma variável ordinal, além da moda podemos também calcular outras medidas, tais como a mediana conforme exemplificado a seguir. Note que o comando median() não funciona com variáveis não numéricas e por isto usamos o comando seguinte.

  > instrucao.mo <- names(instrucao.tb)[which.max(instrucao.tb)]
  > instrucao.mo

  [1] "2oGrau"

  > median(as.numeric(instrucao))

  [1] 2

  > levels(milsa$instrucao)[median(as.numeric(milsa$instrucao))]

  [1] "2oGrau"

Variável quantitativa discreta Vamos agora usar a variável filhos (número de filhos) para ilustrar algumas análises que podem ser feitas com uma quantitativa discreta. Note que esta deve ser uma variável numérica, e não um fator.

  > filhos

   [1] NA  1  2 NA NA  0 NA NA  1 NA  2 NA NA  3  0 NA  1  2 NA NA  1 NA NA  0  2
  [26]  2 NA  0  5  2 NA  1  3 NA  2  3

  > is.factor(filhos)

  [1] FALSE

  > is.numeric(filhos)

  [1] TRUE

Frequências absolutas e relativas são obtidas como anteriormente.

  > filhos.tb <- table(filhos)
  > filhos.tb

  filhos
  0 1 2 3 5
  4 5 7 3 1

  > filhos.tbr <- prop.table(filhos.tb)
  > filhos.tbr

  filhos
     0    1    2    3    5
  0.20 0.25 0.35 0.15 0.05

O gráfico adequado para frequências absolutas de uma variável discreta é mostrado na Figura 9.2.1 o obtido com os comandos a seguir.

  > plot(filhos.tb)


PIC

Figura 9: Gráfico de frequências absolutas para variável filhos.


Outra possibilidade seria fazer gráficos de frequências relativas e de prequências acumuladas conforme mostrado na Figura 9.2.1.

  > plot(filhos.tbr)
  > filhos.fac <- cumsum(filhos.tbr)
  > filhos.fac
  > plot(filhos.fac, type = "S")


PIC

Figura 10: Gráfico de frequências relativas (esquerda) e frequências acumuladas para variável filhos.


Sendo a variável numérica há uma maior diversidade de medidas estatísticas que podem ser calculadas.

A seguir mostramos como obter algumas medidas de posição: moda, mediana, média e média aparada. Note que o argumento na.rm=T é necessário porque não há informação sobre número de filhos para alguns indivíduos. O argumento trim=0.1 indica uma média aparada onde foram retirados 10% dos menores e 10% dos maiores dados. Ao final mostramos como obter os quartis, mínimo e máximo.

  > filhos.mo <- names(filhos.tb)[which.max(filhos.tb)]
  > filhos.mo
  [1] "2"
  > filhos.md <- median(filhos, na.rm = T)
  > filhos.md
  [1] 2
  > filhos.me <- mean(filhos, na.rm = T)
  > filhos.me
  [1] 1.65
  > filhos.me <- mean(filhos, trim = 0.1, na.rm = T)
  > filhos.me
  [1] 1.5625
  > filhos.qt <- quantile(filhos, na.rm = T)

Passando agora para medidas de dispersão vejamos como obter máximo e mínimo daí a amplitude, variância e desvio padrão, coeficiente de variação. Depois obtemos os quartis e daí a amplitude interquartílica.

  > range(filhos, na.rm = T)
  [1] 0 5
  > filhos.A <- diff(range(filhos, na.rm = T))
  > filhos.A
  [1] 5
  > var(filhos, na.rm = T)
  [1] 1.607895
  > filhos.dp <- sd(filhos, na.rm = T)
  > filhos.dp
  [1] 1.268028
  > filhos.cv <- 100 * filhos.dp/filhos.me
  > filhos.cv
  [1] 81.15379
  > filhos.qt <- quantile(filhos, na.rm = T)
  > filhos.ai <- filhos.qt[4] - filhos.qt[2]
  > filhos.ai
  75%
    1

Finalmente, notamos que há comandos para se obter várias medidas de uma sá vez. Inspecione os resultados dos comandos abaixo.

  > summary(filhos)
     Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's
     0.00    1.00    2.00    1.65    2.00    5.00   16.00
  > fivenum(filhos)
  [1] 0 1 2 2 5

Variável quantitativa Contínua Para concluir os exemplos para análise univariada vamos considerar a variável quantitativa contínua salario. Começamos mostrando os valores da variável e verificando o seu tipo no R.

  > salario

   [1]  4.00  4.56  5.25  5.73  6.26  6.66  6.86  7.39  7.59  7.44  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

  > is.factor(salario)

  [1] FALSE

  > is.numeric(salario)

  [1] TRUE

Para se fazer uma tabela de frequências de uma contínua é preciso primeiro agrupar os dados em classes. Nos comandos mostrados a seguir verificamos inicialmente os valores máximo e mínimo dos dados, depois usamos o critério de Sturges para definir o número de classes, usamos cut() para agrupar os dados em classes e finalmente obtemos as frequências absolotas e relativas.

  > range(salario)

  [1]  4.0 23.3

  > nclass.Sturges(salario)

  [1] 7

  > args(cut)

  function (x, ...)
  NULL

  > args(cut.default)

  function (x, breaks, labels = NULL, include.lowest = FALSE, right = TRUE,
      dig.lab = 3, ...)
  NULL

  > salario.tb <- table(cut(salario, seq(3.5, 23.5, l = 8)))
  > prop.table(salario.tb)

   (3.5,6.36] (6.36,9.21] (9.21,12.1] (12.1,14.9] (14.9,17.8] (17.8,20.6]
   0.13888889  0.27777778  0.22222222  0.16666667  0.11111111  0.05555556
  (20.6,23.5]
   0.02777778

Na sequência vamos mostrar dois possíveis gráficos para variáveis contínuas: histograma e box-plot conforme Figura 9.2.1.

  > hist(salario)
  > boxplot(salario)


PIC

Figura 11: Histograma (esquerda) e boxplot (direita) para a variável salario.


Uma outra representação gráfica para variáveis numéricas é o diagrama ramo-e-folhas que pode ser obtido conforme mostrado a seguir.

  > stem(salario)

    The decimal point is at the |
  
     4 | 0637
     6 | 379446
     8 | 15791388
    10 | 5816
    12 | 08268
    14 | 77
    16 | 0263
    18 | 84
    20 |
    22 | 3

Finalmente medidas s obtidas da mesma forma que para variáveis discretas. Veja alguns exemplos a seguir.

  > salario.md <- median(salario, na.rm = T)
  > salario.md

  [1] 10.165

  > salario.me <- mean(salario, na.rm = T)
  > salario.me

  [1] 11.12222

  > range(salario, na.rm = T)

  [1]  4.0 23.3

  > salario.A <- diff(range(salario, na.rm = T))
  > salario.A

  [1] 19.3

  > var(salario, na.rm = T)

  [1] 21.04477

  > salario.dp <- sd(salario, na.rm = T)
  > salario.dp

  [1] 4.587458

  > salario.cv <- 100 * salario.dp/salario.me
  > salario.cv

  [1] 41.24587

  > salario.qt <- quantile(salario, na.rm = T)
  > salario.ai <- salario.qt[4] - salario.qt[2]
  > salario.ai

     75%
  6.5075

  > summary(salario)

     Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
    4.000   7.552  10.160  11.120  14.060  23.300

  > fivenum(salario)

  [1]  4.000  7.515 10.165 14.270 23.300

9.2.2 Análise Bivariada

Na análise bivariada procuramos identificar relaccões entre duas variáveis. Assim como na univariada estas relações podem ser resumidas por gráficos, tabelas e/ou medidas estatística. O tipo de resumo vai depender dos tipos das variáveis envolvidas. Vamos considerar três possibilidades:

Salienta-se ainda que:

Qualitativa vs Qualitativa Vamos considerar as variáveis civil (estado civil) e instrucao (grau de instrução). A tabela envolvendo duas variáveis é chamada tabela de cruzamento e pode ser apresentada de várias formas, conforme ilustrado abaixo. A forma mais adequada vai depender dos objetivos da análise e da interpretação desejada para os dados. Iniciamente obtemos a tabela de frequências absolutas. Depois usamos prop.table() para obter frequência ralativas globais, por linha e por coluna.

  > civ.gi.tb <- table(civil, instrucao)
  > civ.gi.tb

            instrucao
  civil      1oGrau 2oGrau Superior
    solteiro      7      6        3
    casado        5     12        3

  > prop.table(civ.gi.tb)

            instrucao
  civil          1oGrau     2oGrau   Superior
    solteiro 0.19444444 0.16666667 0.08333333
    casado   0.13888889 0.33333333 0.08333333

  > prop.table(civ.gi.tb, margin = 1)

            instrucao
  civil      1oGrau 2oGrau Superior
    solteiro 0.4375 0.3750   0.1875
    casado   0.2500 0.6000   0.1500

  > prop.table(civ.gi.tb, margin = 2)

            instrucao
  civil         1oGrau    2oGrau  Superior
    solteiro 0.5833333 0.3333333 0.5000000
    casado   0.4166667 0.6666667 0.5000000

Na Figura 9.2.2 mostramos dois gráficos de barras.

  > barplot(civ.gi.tb, legend = T)
  > barplot(civ.gi.tb, beside = T, legend = T)


PIC

Figura 12: Dois tipos de gráficos de barras ilustrando o cruzamento das variáveis civil e instrucao.


Medidas de associação entre duas variáveis qualitativas incluem o Chi-quadrado dado por:

       k
  2   ∑  (oi---ei)2
χ  =         e     ,
      i=1      i
onde oi e ei são, respectivamente, frequências observadas e esperadas nas k posições da tabela de cruzamento das variáveis. Outras medidas derivadas desta são o o coeficiente de contingência C e o coeficiente de contingência modificado C1 dados por:
     ∘ -------
       --χ2---          -----C-----
C  =   χ2 +  n  ,  C1 = [(t - 1)∕t]2,
onde n é o número de observações e t é o mínimo entre o número de linas e colunas da tabela. Os comandos a seguir mostram como obter todas estas medidas.
  > summary(civ.gi.tb)

  Number of cases in table: 36
  Number of factors: 2
  Test for independence of all factors:
   Chisq = 1.9125, df = 2, p-value = 0.3843
   Chi-squared approximation may be incorrect

  > names(summary(civ.gi.tb))

  [1] "n.vars"    "n.cases"   "statistic" "parameter" "approx.ok" "p.value"
  [7] "call"

  > chisq <- summary(civ.gi.tb)$stat
  > chisq

  [1] 1.9125

  > n <- sum(civ.gi.tb)
  > n

  [1] 36

  > C <- sqrt(chisq/(chisq + n))
  > C

  [1] 0.2245999

  > t <- min(dim(civ.gi.tb))
  > C1 <- C/((t - 1)/t)^2
  > C1

  [1] 0.8983995

Muitas vezes é necessário reagrupar categorias porque algumas frequências são muito baixas. Por exemplo vamos criar uma nova variável para agrupar 2o Grau e Superior usando ifelse() e depois podemos refazer as análises do cruzamento com esta nova variável

  > instrucao1 <- ifelse(instrucao == "1oGrau", 1, 2)
  > instrucao1 <- factor(instrucao1, label = c("1oGrau", "2o+Superior"),
  +     lev = 1:2, ord = T)
  > table(instrucao1)

  instrucao1
       1oGrau 2o+Superior
           12          24

  > table(civil, instrucao1)

            instrucao1
  civil      1oGrau 2o+Superior
    solteiro      7           9
    casado        5          15

  > summary(table(civil, instrucao1))

  Number of cases in table: 36
  Number of factors: 2
  Test for independence of all factors:
   Chisq = 1.4062, df = 1, p-value = 0.2357

Qualitativa vs Quantitativa Para exemplificar este caso vamos considerar as variáveis instrucao e salario.

Para se obter uma tabela de frequências é necessário agrupar a variável quantitativa em classes. No exemplo a seguir vamos agrupar a variável salário em 4 classes definidas pelos quartis usando cut(). Após agrupar esta variável obtemos a(s) tabela(s) de cruzamento como mostrado no caso anterior.

  > quantile(salario)

       0%     25%     50%     75%    100%
   4.0000  7.5525 10.1650 14.0600 23.3000

  > salario.cl <- cut(salario, quantile(salario))
  > ins.sal.tb <- table(instrucao, salario.cl)
  > ins.sal.tb

            salario.cl
  instrucao  (4,7.55] (7.55,10.2] (10.2,14.1] (14.1,23.3]
    1oGrau          6           3           2           0
    2oGrau          2           6           5           5
    Superior        0           0           2           4

  > prop.table(ins.sal.tb, margin = 1)

            salario.cl
  instrucao   (4,7.55] (7.55,10.2] (10.2,14.1] (14.1,23.3]
    1oGrau   0.5454545   0.2727273   0.1818182   0.0000000
    2oGrau   0.1111111   0.3333333   0.2777778   0.2777778
    Superior 0.0000000   0.0000000   0.3333333   0.6666667

No gráfico vamos considerar que neste exemplo a instrução deve ser a variável explicativa e portanto colocada no eixo-X e o salário é a variável resposta e portanto no eixo-Y. Isto é, consideramos que a instrução deve explicar, ainda que parcialmente, o salário (e não o contrário!). Vamos então obter um boxplot dos salários para cada nível de instrução. Note que o função abaixo usamos a notação de formula do R, com salario instrucao indicando que a variável salario é explicada (~) pela variável instrucao.

  > boxplot(salario ~ instrucao)


PIC

Figura 13: Boxplot da variável salario para cada nível da variável instrucao.


Poderíamos ainda fazer gráficos com a variável salario agrupada em classes, e neste caso os gráficos seriam como no caso anterior com duas variáveis qualitativas.

Para as medidas o usual é obter um resumo da quantitativa como mostrado na análise univariada, porém agora infromando este resumo para cada nível do fator qualitativo. A seguir mostramos alguns exemplos de como obter a média, desvio padrão e o resumo de cinco números do salário para cada nível de instrução.

  > tapply(salario, instrucao, mean)
     1oGrau    2oGrau  Superior
   7.836667 11.528333 16.475000
  > tapply(salario, instrucao, sd)
    1oGrau   2oGrau Superior
  2.956464 3.715144 4.502438
  > tapply(salario, instrucao, quantile)
  $1oGrau
       0%     25%     50%     75%    100%
   4.0000  6.0075  7.1250  9.1625 13.8500
  
  $2oGrau
       0%     25%     50%     75%    100%
   5.7300  8.8375 10.9100 14.4175 19.4000
  
  $Superior
       0%     25%     50%     75%    100%
  10.5300 13.6475 16.7400 18.3775 23.3000

Quantitativa vs Quantitativa Para ilustrar este caso vamos considerar as variáveis salario e idade. Para se obter uma tabela é necessário agrupar as variáveis em classes conforma fizemos no caso anterior. Nos comandos abaixo agrupamos as duas variáveis em classes definidas pelos respectivos quartis gerando portanto uma tabela de cruzamento 4  ×  4.

  > idade.cl <- cut(idade, quantile(idade))
  > table(idade.cl)

  idade.cl
  (20.8,30.7] (30.7,34.9] (34.9,40.5] (40.5,48.9]
            8           9           9           9

  > salario.cl <- cut(salario, quantile(salario))
  > table(salario.cl)

  salario.cl
     (4,7.55] (7.55,10.2] (10.2,14.1] (14.1,23.3]
            8           9           9           9

  > table(idade.cl, salario.cl)

               salario.cl
  idade.cl      (4,7.55] (7.55,10.2] (10.2,14.1] (14.1,23.3]
    (20.8,30.7]        2           2           2           1
    (30.7,34.9]        1           3           3           2
    (34.9,40.5]        1           3           2           3
    (40.5,48.9]        3           1           2           3

  > prop.table(table(idade.cl, salario.cl), mar = 1)

               salario.cl
  idade.cl       (4,7.55] (7.55,10.2] (10.2,14.1] (14.1,23.3]
    (20.8,30.7] 0.2857143   0.2857143   0.2857143   0.1428571
    (30.7,34.9] 0.1111111   0.3333333   0.3333333   0.2222222
    (34.9,40.5] 0.1111111   0.3333333   0.2222222   0.3333333
    (40.5,48.9] 0.3333333   0.1111111   0.2222222   0.3333333

Caso queiramos definir um número menos de classes podemos fazer como no exemplo a seguir onde cada variável é dividida em 3 classes e gerando um tabela de cruzamento 3  ×  3.

  > idade.cl1 <- cut(idade, quantile(idade, seq(0, 1, len = 4)))
  > salario.cl1 <- cut(salario, quantile(salario, seq(0, 1, len = 4)))
  > table(idade.cl1, salario.cl1)

               salario.cl1
  idade.cl1     (4,8.65] (8.65,12.9] (12.9,23.3]
    (20.8,32.1]        3           5           2
    (32.1,37.8]        4           3           5
    (37.8,48.9]        3           4           5

  > prop.table(table(idade.cl1, salario.cl1), mar = 1)

               salario.cl1
  idade.cl1      (4,8.65] (8.65,12.9] (12.9,23.3]
    (20.8,32.1] 0.3000000   0.5000000   0.2000000
    (32.1,37.8] 0.3333333   0.2500000   0.4166667
    (37.8,48.9] 0.2500000   0.3333333   0.4166667

O gráfico adequado para representar duas variáveis quantitativas é um diagrama de dispersão. Note que se as variáveis envolvidas puderem ser classificadas como "explicativa"e "resposta"devemos colocar a primeira no eixo-X e a segunda no eixo-Y. Neste exemplo é razoável admitir que a idade deve explicar, ao menos parcialmente, o salário e portanto fazemos o gráfico com idade n eixo-X.

  > plot(idade, salario)


PIC

Figura 14: Diagrama de dispersão para as variáveis salario e idade.


Para quantificar a associação entre variáveis deste tipo usamos um coeficiente de correlação. A função cor() do R possui opção para três coeficientes tendo como default o coeficiente de correlação linear de Pearson.

  > cor(idade, salario)

  [1] 0.3651397

  > cor(idade, salario, method = "kendall")

  [1] 0.214456

  > cor(idade, salario, method = "spearman")

  [1] 0.2895939

Lembre que ao iniciar as análises com este conjunto de dados anexamos os dados com o comando attach(milsa). Portanto ao terminar as análises com estes dados devemos desanexar este conjunto de dados com o detach()

  > detach(milsa)

9.3 Uma demonstração de recursos gráficos do R

O R vem com algumas demonstrações (demos) de seus recursos “embutidas” no programa. Para listar as demos disponíveis digite na linha de comando:

  > demo()

Para rodar uma delas basta colocar o nome da escolhida entre os parênteses. As demos são úties para termos uma idéia dos recursos disponíveis no programa e para ver os comandos que devem ser utilizados.

Por exemplo, vamos rodar a demo de recursos gráficos. Note que os comandos vão aparecer na janela de comandos e os gráficos serão automaticamente produzidos na janela gráfica. A cada passo voce vai ter que teclar ENTER para ver o próximo gráfico.

9.4 Outros dados disponíveis no R

Há vários conjuntos de dados incluídos no programa R como, por exemplo, o conjunto mtcars. Estes conjuntos são todos documentados, isto é, voce pode usar a função help para obter uma descrição dos dados. Para ver a lista de conjuntos de dados disponíveis digite data(). Por exemplo tente os seguintes comandos:

  > data()
  > data(women)
  > women
  > help(woman)