Aula15

Author

ARLAM

##TABALEAS DE CONTIGÊNCIA

#Vamos utilizar aqui os dados milsa de Bussab & Morettin discutidos na Sessão 8.2 e que podem ser obtidos conforme comando abaixo. Repetimos aqui o preparo inicial dos dados convertendo as variáveis categóricas em fatores do R e criando a variável idade.

  milsa <- read.table("http://www.leg.ufpr.br/~paulojus/dados/milsa.dat",
       head = T)
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)))
   milsa <- transform(milsa, idade = ano + mes/12)
   names(milsa)
[1] "funcionario" "civil"       "instrucao"   "filhos"      "salario"    
[6] "ano"         "mes"         "regiao"      "idade"      

#Tabelas de contingência podem ser obtidas com as frequências de ocorrência dos cruzamentos das variáveis. A seguir mostramos algumas opções da vizualização dos resultados usando a função table() e a função ftable(). As funções retornam as tabelas de contingência em um objeto que pode ser uma matrix, no caso do cruzamento de duas variáveis, ou de forma mais geral, na forma de um array, onde o número de dimensões é igual ao número de variáveis. Entretanto a classe do objeto resultante vai depender da função utilizada. Neste caso, para o cruzamento de apenas duas variáveis, os resultados são exibidos de forma semelhante. No exemplo consideram-se as variáveis civil e instrucao que situadas nas colunas 2 e 3 do data-frame.

    t1 <- table(milsa[c(2, 3)])
    
    t1
          instrucao
civil      1oGrau 2oGrau Superior
  solteiro      7      6        3
  casado        5     12        3
    t1f <- ftable(milsa[c(2, 3)])
   t1f
         instrucao 1oGrau 2oGrau Superior
civil                                    
solteiro                7      6        3
casado                  5     12        3
   sapply(list(t1, t1f), class)
[1] "table"  "ftable"
   sapply(list(t1, t1f), is.matrix)
[1] TRUE TRUE
   sapply(list(t1, t1f), is.array)
[1] TRUE TRUE

#Ambas funções possuem o argumento dnn que pode ser usado para sobrescrever os nomes das dimensões do objeto resultante.

dimnames(t1)
$civil
[1] "solteiro" "casado"  

$instrucao
[1] "1oGrau"   "2oGrau"   "Superior"
t1 <- table(milsa[c(2, 3)], dnn = c("Estado Civil", "Nível de Instrução"))
 dimnames(t1)
$`Estado Civil`
[1] "solteiro" "casado"  

$`Nível de Instrução`
[1] "1oGrau"   "2oGrau"   "Superior"
 t1f <- table(milsa[c(2, 3)], dnn = c("Estado Civil", "Nível de Instrução"))

#As diferenças na forma de exibir os resultados são mais claras considerando-se o cruzamento de três ou mais variáveis. Enquanto table() vai exibir um array da forma usual, mostrando as várias camadas separadamente, ftable() irá arranjar a tabela de forma plana, em uma visualização mais adequada para a leitura dos dados. Vamos considerar o cruzamento das variáveis civil, instrucao e regiao situadas nas colunas 2, 3 e 8 do data-frame.

t2 <- with(milsa, table(civil, instrucao, regiao))
t2
, , regiao = capital

          instrucao
civil      1oGrau 2oGrau Superior
  solteiro      2      1        1
  casado        2      4        1

, , regiao = interior

          instrucao
civil      1oGrau 2oGrau Superior
  solteiro      2      1        1
  casado        1      6        1

, , regiao = outro

          instrucao
civil      1oGrau 2oGrau Superior
  solteiro      3      4        1
  casado        2      2        1
 t2f <- with(milsa, ftable(civil, instrucao, regiao))
 t2f
                   regiao capital interior outro
civil    instrucao                              
solteiro 1oGrau                 2        2     3
         2oGrau                 1        1     4
         Superior               1        1     1
casado   1oGrau                 2        1     2
         2oGrau                 4        6     2
         Superior               1        1     1

Enquanto que o objeto retornado por table() não é uma matrix, mas sim um array de três dimensões, por serem três variáveis. A dimensão do array é de 2 × 3 × 3 por haver 2 estados civis, 3 níveis de instrução e 3 regiões. Já o objeto retornado por ftable() ainda é uma matriz, neste caso de dimensão 6 × 3 onde 6 = 2 × 3 indicando o produto do número de nívies das duas primeiras variáveis.

sapply(list(t2, t2f), is.matrix)
[1] FALSE  TRUE
sapply(list(t2, t2f), is.array)
[1] TRUE TRUE
sapply(list(t2, t2f), dim)
[[1]]
[1] 2 3 3

[[2]]
[1] 6 3