Programação em R - Parte 4 (Fatores)


Programação em R - Aprenda Analtics, Big Data & Ciência de Dados


Confira todos os textos da série Programação em R:

Fatores ordenados e não ordenados


Um fator é um objeto vetorial usado para especificar uma classificação discreta (agrupamento) dos componentes de outros vetores do mesmo comprimento. R fornece fatores ordenados e não ordenados.

Fatores podem ser identificados automaticamente através da linguagem R, e servem para “categorizar” os valores de alguma variável ou objeto.

Suponhamos, por exemplo, que tenhamos uma amostra de informações de escolas espalhadas pelo Brasil, com a indicação do estado em que cada escola se localiza sendo especificado por um vetor de siglas estaduais como abaixo

> escolas <- c="" p="">
"GO", "MA", "MT", "MS", "MG", "PA", "PB", "PE",
"PI”, "PR", "RJ", "RN", "RO", "RR", "RS", "SC"
"SE", "SP", "TO", "BA", "SP", "RJ")

Observe que, no caso de um vetor de caracteres, "ordenado" significa ordenados em ordem alfabética.

Um fator pode ser criado de forma semelhante usando a função factor ():

> estados <- escolas="" factor="" p="">

A função print () lida com fatores ligeiramente diferentes de outros objetos:

> estados

[1] "AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES",
[9] "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PE",
[17] "PI”, "PR", "RJ", "RN", "RO", "RR", "RS", "SC"
[26] "SE", "SP", "TO"
Levels: "AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES",
"GO", "MA", "MT", "MS", "MG", "PA", "PB", "PE",
"PI”, "PR", "RJ", "RN", "RO", "RR", "RS", "SC"
"SE", "SP", "TO"

Para descobrir os níveis de um fator, a função levels() pode ser usada.

> levels (escolas)
[1] "AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES",
[9] "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PE",
[17] "PI”, "PR", "RJ", "RN", "RO", "RR", "RS", "SC"
[25] "SE", "SP", "TO"

A função tapply ()


Suponhamos que tenhamos a quantidade de alunos das mesmas escolas em outro vetor (valores apenas para efeito didático).

> alunos <- 3000="" 420="" 540="" 560="" 590="" 600="" 620="" 640="" 690="" 700="" 800="" c="" p="">
610, 610, 610, 580, 510, 480, 650, 490, 490, 410, 480, 520, 460,
590, 460, 580, 430)

Para calcular a média de alunos por escola para cada estado, agora podemos usar a função especial tapply().

Primeiro vamos criar um dataframe com todos os dados, para organizar melhor as informações.

df <- data.frame="" p="">
df$escolas <- escolas="" p="">
df$alunos <- alunos="" p="">

Agora, podemos simplesmente usar a função tapply() da seguinte forma:

> mediaalunos <- alunos="" df="" escolas="" mean="" p="" tapply="">

resultando no vetor de médias rotuladas pelos níveis (estados)

[1] "AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES",
[9] "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PE",
[17] "PI”, "PR", "RJ", "RN", "RO", "RR", "RS", "SC"
[25] "SE", "SP", "TO"

[1] 800, 3000, 700, 800, 550 ((640+460)/2), 600, 590, 540
[9] 620, 690, 700, 420, 560, 610, 610, 610,
[17] 580, 510, 455 ((480+430)/2), 650, 490, 490, 410, 480
[25] 520, 520 ((460+580)/2), 590

Note que apenas as escolas cujos estados se repetem sofreram alteração no valor do resultado, pois foi calculada a média de alunos para o mesmo estado. Nos casos em que a a sigla estado tinha apenas uma ocorrência, o valor resultante foi igual ao do vetor original.

A função tapply () é usada para aplicar uma função, neste caso a média - mean(), para cada grupo de componentes do primeiro argumento (quantidade de alunos), definidos pelos níveis do segundo componente (estados das escolas), como se fossem estruturas vetoriais separadas. O resultado é uma estrutura do mesmo comprimento que o atributo de níveis do fator que contém os resultados.

Como exercício, você pode imaginar outros usos da função tapply() para analisar dados dos alunos de escolas. Experimente acrescentar novas colunas ao data frame com informações como a região de cada estado, e obtenha um resumo consolidado da quantidade de alunos por região do país.

A função tapply () também pode ser usada para lidar com indexação mais complicada de um vetor por várias categorias. Por exemplo, talvez desejemos dividir os alunos tanto pelo estado como pelo sexo. No entanto, neste exemplo simples (apenas um fator), o que acontece pode ser pensado da seguinte maneira. Os valores no vetor são coletados em grupos de acordo com cada fator, ou seja, grupos de alunos por estado e por sexo são considerados para os cálculos. A função é então aplicada a cada um desses grupos individualmente. O valor é um vetor de resultados de função, rotulado pelos níveis de cada fator.

A combinação de um vetor e um fator de rotulagem é um exemplo do que às vezes é chamado de uma matriz irregular, uma vez que os tamanhos da subclasse são possivelmente irregulares. Quando os tamanhos da subclasse são todos iguais, a indexação pode ser feita de forma implícita e muito mais eficiente.

Fatores ordenados


Os níveis de fatores são armazenados em ordem alfabética, ou na ordem em que foram especificados como fatores se fossem especificados explicitamente.

Às vezes, os níveis terão uma ordem natural que queremos gravar e queremos que nossa análise estatística faça uso. A função ord() cria esses fatores ordenados, mas é idêntica ao fator. Para a maioria dos propósitos, a única diferença entre os fatores ordenados e não ordenados é que os primeiros são impressos mostrando a ordenação dos níveis, mas os contrastes gerados para eles na montagem de modelos lineares são diferentes.


Conclusão

E então, interessante mais esse recurso da linguagem R, não é mesmo?

São tantos facilitadores que a cada dia nos surpreendemos com maneiras mais simples de realizar operações que a princípio envolveriam uma certa compexidade.

Que tal mostrar que você entendeu o conceito de fatores e colocar nos comentários o código que faz a análise dos alunos por região do país? Você consegue!

Christian Guerreiro

Professor por vocação, blogueiro e servidor público por opção, amante da tecnologia e viciado em informação.


Ensino a distância em Bitcoin & Criptomoedas, além de Tecnologia da Informação: Virtualização com VMware, Big Data com Hadoop, Certificação ITIL 2011 Foundations e muito mais.


Suporte o Tecnologia que Interessa!

Você acha que as informações compartilhadas aqui são úteis?
Então me ajude a produzir ainda mais e melhores conteúdos!


É muito fácil. Basta divulgar nossos treinamentos pra alguém que conheça!


E se for de Salvador, podemos estruturar um curso presencial para sua empresa!

Eu vou ficar muito grato (e quem fizer os curso também :)!