Comandos R para análises estatísticas

Capítulo 4: Análise Bidimensional

4.2 Variáveis Qualitativas

Exemplo 4.1

A partir dos dados da Tabela 2.1, construiremos tabelas de dupla-entrada para Grau de instrução x região de procedência.

Tabela 4.2

Inicialmente mostraremos como calcular tabelas cruzadas (ou de dupla entrada) diretamente através das funções já existentes no R. Em seguida, utilizaremos a biblioteca gmodels, que contém a função CrossTable, que permite calcular tabelas de contingência de uma maneira mais direta.
Para construir tabela de contingência, utilizaremos a função table. Agora, temos duas variáveis(ao invés de apenas uma, como fizemos no capítulo 1), uma para as colunas e outra para as linhas.

attach(tab2_1)
tab4_2<-table(reg_procedencia,grau_instrucao)
tab4_2
##                grau_instrucao
## reg_procedencia ensino fundamental ensino médio superior
##        capital                   4            5        2
##        interior                  3            7        2
##        outra                     5            6        2

Para calcular as marginais, utilizaremos a função margin.table.

Total_linha<-margin.table(tab4_2,2)  # O argumento 2 define a marginal da linha
Total_coluna<-margin.table(tab4_2,1) # O argumento 1 define a marginal da coluna
tab4_2_<-rbind(cbind(tab4_2,Total_coluna),c(Total_linha, sum(Total_coluna)))
dimnames(tab4_2_)[[1]][4]<-"Total_linha" 
tab4_2_
##             ensino fundamental ensino médio superior Total_coluna
## capital                      4            5        2           11
## interior                     3            7        2           12
## outra                        5            6        2           13
## Total_linha                 12           18        6           36
Tabela 4.2: Distribuição conjunta das frequencias das variáveis grau de instrução(Y) e região de procedência(V)
ensino fundamental ensino médio superior Total_coluna
capital 4 5 2 11
interior 3 7 2 12
outra 5 6 2 13
Total_linha 12 18 6 36

Uma outra maneira é utilizar o comando apply, que aplica, repedidamente uma função FUN às colunas(quando MARGIN=1) ou linhas(MARGIN=2) de uma matriz.

Total_linha<-apply(tab4_2, MARGIN=2, FUN=sum)
Total_coluna<-apply(tab4_2, MARGIN=1, FUN=sum)

tab4_2_<-rbind(cbind(tab4_2,Total_coluna),c(Total_linha, sum(Total_coluna)))
dimnames(tab4_2_)[[1]][4]<-"Total_linha" 

Tabela 4.3

tab4_3<-prop.table(tab4_2)
tab4_3
##                grau_instrucao
## reg_procedencia ensino fundamental ensino médio superior
##        capital            0.111111     0.138889 0.055556
##        interior           0.083333     0.194444 0.055556
##        outra              0.138889     0.166667 0.055556
Total_linha<-margin.table(tab4_3,2) 
Total_coluna<-margin.table(tab4_3,1)

tab4_3_<-rbind(cbind(tab4_3,Total_coluna),c(Total_linha, sum(Total_coluna)))
dimnames(tab4_3_)[[1]][4]<-"Total_linha" 
tab4_3_
##             ensino fundamental ensino médio superior Total_coluna
## capital               0.111111      0.13889 0.055556      0.30556
## interior              0.083333      0.19444 0.055556      0.33333
## outra                 0.138889      0.16667 0.055556      0.36111
## Total_linha           0.333333      0.50000 0.166667      1.00000
Tabela 4.3: Distribuição conjunta das proporções em relação ao total geral das variáveis Y e V
ensino fundamental ensino médio superior Total_coluna
capital 11.11 13.89 5.56 30.56
interior 8.33 19.44 5.56 33.33
outra 13.89 16.67 5.56 36.11
Total_linha 33.33 50.00 16.67 100.00

Tabela 4.4

tab4_4<-prop.table(tab4_2,2)
tab4_4
##                grau_instrucao
## reg_procedencia ensino fundamental ensino médio superior
##        capital             0.33333      0.27778  0.33333
##        interior            0.25000      0.38889  0.33333
##        outra               0.41667      0.33333  0.33333
Total_linha<-margin.table(tab4_4,2)
Total_coluna<-margin.table(tab4_2,1)/sum(margin.table(tab4_2,1))

tab4_4_<-rbind(cbind(tab4_4,Total_coluna),c(Total_linha, sum(Total_coluna)))
dimnames(tab4_4_)[[1]][4]<-"Total_linha" 
tab4_4_
##             ensino fundamental ensino médio superior Total_coluna
## capital                0.33333      0.27778  0.33333      0.30556
## interior               0.25000      0.38889  0.33333      0.33333
## outra                  0.41667      0.33333  0.33333      0.36111
## Total_linha            1.00000      1.00000  1.00000      1.00000
Tabela 4.4: Distribuição conjunta das proporções em relação aos totais de cada coluna das variáveis Y e V
ensino fundamental ensino médio superior Total_coluna
capital 33.33 27.78 33.33 30.56
interior 25.00 38.89 33.33 33.33
outra 41.67 33.33 33.33 36.11
Total_linha 100.00 100.00 100.00 100.00

Estas mesmas tabelas podem ser construídas a partir da biblioteca gmodels com a função CrossTable:

library(gmodels)
#Tabela 4.2
CrossTable(reg_procedencia,grau_instrucao,
           prop.r=FALSE,    # Se TRUE, entao retorna as proporções nas linhas
           prop.c=FALSE,    # Se TRUE, entao retorna as proporções nas colunas
           prop.t=FALSE,    # Se TRUE, entao retorna as proporções em relação ao total
           prop.chisq=FALSE # Se TRUE, entao retorna a contribuição de cada casela para a estatística de Qui-quadrado
           )
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |-------------------------|
## 
##  
## Total Observations in Table:  36 
## 
##  
##                 | grau_instrucao 
## reg_procedencia | ensino fundamental |       ensino médio |           superior |          Row Total | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##         capital |                  4 |                  5 |                  2 |                 11 | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##        interior |                  3 |                  7 |                  2 |                 12 | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##           outra |                  5 |                  6 |                  2 |                 13 | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##    Column Total |                 12 |                 18 |                  6 |                 36 | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
## 
## 
#Tabela 4.3
CrossTable(reg_procedencia,grau_instrucao,prop.r=FALSE, prop.c=FALSE,
           prop.t=TRUE, prop.chisq=FALSE)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |         N / Table Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  36 
## 
##  
##                 | grau_instrucao 
## reg_procedencia | ensino fundamental |       ensino médio |           superior |          Row Total | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##         capital |                  4 |                  5 |                  2 |                 11 | 
##                 |              0.111 |              0.139 |              0.056 |                    | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##        interior |                  3 |                  7 |                  2 |                 12 | 
##                 |              0.083 |              0.194 |              0.056 |                    | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##           outra |                  5 |                  6 |                  2 |                 13 | 
##                 |              0.139 |              0.167 |              0.056 |                    | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##    Column Total |                 12 |                 18 |                  6 |                 36 | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
## 
## 
#Tabela 4.4
CrossTable(reg_procedencia,grau_instrucao,prop.r=FALSE, prop.c=TRUE,
           prop.t=FALSE, prop.chisq=FALSE)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |           N / Col Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  36 
## 
##  
##                 | grau_instrucao 
## reg_procedencia | ensino fundamental |       ensino médio |           superior |          Row Total | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##         capital |                  4 |                  5 |                  2 |                 11 | 
##                 |              0.333 |              0.278 |              0.333 |                    | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##        interior |                  3 |                  7 |                  2 |                 12 | 
##                 |              0.250 |              0.389 |              0.333 |                    | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##           outra |                  5 |                  6 |                  2 |                 13 | 
##                 |              0.417 |              0.333 |              0.333 |                    | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
##    Column Total |                 12 |                 18 |                  6 |                 36 | 
##                 |              0.333 |              0.500 |              0.167 |                    | 
## ----------------|--------------------|--------------------|--------------------|--------------------|
## 
## 

Figura 4.1

Introduziremos agora a construção de gráficos a partir do pacote ggplot2. Este pacote proporciona gráficos com maiores recursos gráficos e possui uma sintaxe diferente da usual para a construção de gráficos. As opções para a impressão dos gráficos funcionam na forma de camadas aditivas ao gráfico, que são “somadas” à figura que está sendo desenhada. Para construir o gráfico de barras empilhadas somando 100%, utilizaremos também outras duas bibliotecas auxiliares, que são a scales e reshape2.

library(ggplot2)
library(scales)
library(reshape2)

ggplot(melt(tab4_2_[1:3,],value.name = "contagem",
varnames = c("reg_procedencia","grau_instrucao") ))+      ## `melt` empilha os dados no formato necessário para o ggplot
  aes(x=grau_instrucao,y=contagem,fill=reg_procedencia) + ## Variáveis a serem plotadas. 
  geom_bar(stat="identity", position = "fill") +          ## Define o gráfico de barras percentual empilhado 
  scale_fill_brewer(name="Região de\n Procedência")+      ## Opções do preenchimento do gráfico (label e paleta de cores)
  scale_y_continuous(labels = percent_format()) +         ## Formato do eixo Y em porcentagem
  theme_bw()+                                             ## Define a cor do fundo do gráfico: neste caso, branco
  #theme(legend.position="bottom") +                      ## Define a posição da legenda abaixo do gráfico
  #ggtitle("Figura 4.1: Distribuição da região de procedência por grau de instrução")+
  xlab("Grau de Instrução") + ylab("")                    ## Define os `labels` dos eixos

Figura 4.1: Distribuição da região de procedência por grau de instrução.
## 4.3 Associação entre Variáveis Qualitativas

Exemplo 4.2

Neste exemplo queremos verificar se existe associação entre sexo e carreira escolhida por 200 alunos de Economia e Administração.

Tabela 4.5

tab4_5<-as.table(matrix(c(85,55,35,25),ncol=2))
dimnames(tab4_5)[[1]] = c("Economia", "Administração")
dimnames(tab4_5)[[2]] = c("Masculino", "Feminino")
tab4_5
##               Masculino Feminino
## Economia             85       35
## Administração        55       25
Total_linha<-margin.table(tab4_5,2)
Total_coluna<-margin.table(tab4_5,1)

tab4_5_<-rbind(cbind(tab4_5,Total_coluna),c(Total_linha, sum(Total_coluna)))
dimnames(tab4_5_)[[1]][3]<-"Total_linha" 
Tabela 4.5: Distribuição conjunta de alunos segundo o sexo(X) e curso escolhido(Y).
Masculino Feminino Total_coluna
Economia 85 35 120
Administração 55 25 80
Total_linha 140 60 200

Tabela 4.6

Contruída da mesma forma que a Tabela 4.4.

tab4_6<-prop.table(tab4_5,2)
tab4_6
##               Masculino Feminino
## Economia        0.60714  0.58333
## Administração   0.39286  0.41667
Total_linha<-margin.table(tab4_6,2)
Total_coluna<-margin.table(tab4_6,1)/sum(margin.table(tab4_6,1))

tab4_6_<-rbind(cbind(tab4_6,Total_coluna),c(Total_linha, sum(Total_coluna)))
dimnames(tab4_6_)[[1]][3]<-"Total_linha" 
Tabela 4.6: Distribuição conjunta das proporções segundo o sexo(X) e curso escolhido(Y).
Masculino Feminino Total_coluna
Economia 60.71 58.33 59.52
Administração 39.29 41.67 40.48
Total_linha 100.00 100.00 100.00

Tabela 4.7

Inicialmente, utilizaremos o comando rep, que gera réplicas do objeto inserido, para recriar o banco de dados original:

# Construindo os dados do exemplo:
dados.tab4_7<-data.frame(rbind(
              matrix(rep(c("1.Masculino","1.Física"),times=100),ncol=2,byrow=T),
              matrix(rep(c("2.Feminino","1.Física"),times=20),ncol=2,byrow=T),
              matrix(rep(c("1.Masculino","2.Ciências Sociais"),times=40),ncol=2,byrow=T),
              matrix(rep(c("2.Feminino","2.Ciências Sociais"),times=40),ncol=2,byrow=T)))
colnames(dados.tab4_7)<-c("sexo","curso")

Para calcular a Tabela 4.7, utilizaremos novamente a função CrossTable:

CrossTable(dados.tab4_7$curso,dados.tab4_7$sexo,prop.r=FALSE, prop.c=TRUE,
           prop.t=FALSE, prop.chisq=FALSE)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |           N / Col Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  200 
## 
##  
##                    | dados.tab4_7$sexo 
## dados.tab4_7$curso | 1.Masculino |  2.Feminino |   Row Total | 
## -------------------|-------------|-------------|-------------|
##           1.Física |         100 |          20 |         120 | 
##                    |       0.714 |       0.333 |             | 
## -------------------|-------------|-------------|-------------|
## 2.Ciências Sociais |          40 |          40 |          80 | 
##                    |       0.286 |       0.667 |             | 
## -------------------|-------------|-------------|-------------|
##       Column Total |         140 |          60 |         200 | 
##                    |       0.700 |       0.300 |             | 
## -------------------|-------------|-------------|-------------|
## 
## 

4.4 Medidas de Associação entre Variáveis Qualitativas

Exemplo 4.3

# Construindo os dados do exemplo:
dados.tab4_8<-data.frame(rbind(
              matrix(rep(c("1.Consumidor","1.São Paulo"),times=214),ncol=2,byrow=T),
              matrix(rep(c("1.Consumidor","2.Paraná"),times=51),ncol=2,byrow=T),
              matrix(rep(c("1.Consumidor","3.Rio G. do Sul"),times=111),ncol=2,byrow=T),
              matrix(rep(c("2.Produtor","1.São Paulo"),times=237),ncol=2,byrow=T),
              matrix(rep(c("2.Produtor","2.Paraná"),times=102),ncol=2,byrow=T),
              matrix(rep(c("2.Produtor","3.Rio G. do Sul"),times=304),ncol=2,byrow=T),
              matrix(rep(c("3.Escola","1.São Paulo"),times=78),ncol=2,byrow=T),
              matrix(rep(c("3.Escola","2.Paraná"),times=126),ncol=2,byrow=T),
              matrix(rep(c("3.Escola","3.Rio G. do Sul"),times=139),ncol=2,byrow=T),
              matrix(rep(c("4.Outras","1.São Paulo"),times=119),ncol=2,byrow=T),
              matrix(rep(c("4.Outras","2.Paraná"),times=22),ncol=2,byrow=T),
              matrix(rep(c("4.Outras","3.Rio G. do Sul"),times=48),ncol=2,byrow=T)))
colnames(dados.tab4_8)<-c("tipo_de_cooperativa","estado")
attach(dados.tab4_8)

Para construirmos as tabelas deste exemplo, utilizaremos novamente a função CrossTable. Basicamente, utilizaremos os comandos prop.r=TRUE,expected=TRUE,prop.chisq=TRUE e resid=TRUE para obter, respectivamente, as proporções nas linhas, os valores esperados supondo independência entre as variáveis, os valores das contribuições de cada casela para a estatística de qui-quadrado e os resíduos de cada casela.

Tabela 4.8: Cooperativas autorizadas a funcionar por tipo e estado, junho de 1974.

CrossTable(estado,tipo_de_cooperativa,
           prop.r=TRUE, prop.c=FALSE, prop.t=FALSE, prop.chisq=FALSE, 
           digits=2)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |           N / Row Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  1551 
## 
##  
##                 | tipo_de_cooperativa 
##          estado | 1.Consumidor |   2.Produtor |     3.Escola |     4.Outras |    Row Total | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
##     1.São Paulo |          214 |          237 |           78 |          119 |          648 | 
##                 |         0.33 |         0.37 |         0.12 |         0.18 |         0.42 | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
##        2.Paraná |           51 |          102 |          126 |           22 |          301 | 
##                 |         0.17 |         0.34 |         0.42 |         0.07 |         0.19 | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
## 3.Rio G. do Sul |          111 |          304 |          139 |           48 |          602 | 
##                 |         0.18 |         0.50 |         0.23 |         0.08 |         0.39 | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
##    Column Total |          376 |          643 |          343 |          189 |         1551 | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
## 
## 

Tabela 4.9: Valores esperados na Tabela 4.8 assumindo a independência entre as duas variáveis.

CrossTable(estado,tipo_de_cooperativa,
           prop.r=FALSE, prop.c=FALSE, prop.t=FALSE, prop.chisq=FALSE, expected=TRUE,
           digits=0)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |              Expected N |
## |-------------------------|
## 
##  
## Total Observations in Table:  1551 
## 
##  
##                 | tipo_de_cooperativa 
##          estado | 1.Consumidor |   2.Produtor |     3.Escola |     4.Outras |    Row Total | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
##     1.São Paulo |          214 |          237 |           78 |          119 |          648 | 
##                 |          157 |          269 |          143 |           79 |              | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
##        2.Paraná |           51 |          102 |          126 |           22 |          301 | 
##                 |           73 |          125 |           67 |           37 |              | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
## 3.Rio G. do Sul |          111 |          304 |          139 |           48 |          602 | 
##                 |          146 |          250 |          133 |           73 |              | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
##    Column Total |          376 |          643 |          343 |          189 |         1551 | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
## 
##  
## Statistics for All Table Factors
## 
## 
## Pearson's Chi-squared test 
## ------------------------------------------------------------
## Chi^2 =  173.38     d.f. =  6     p =  8.6339e-35 
## 
## 
## 

Tabela 4.10: Desvios observados e esperados.

CrossTable(estado,tipo_de_cooperativa,
           prop.r=FALSE, prop.c=FALSE, prop.t=FALSE, resid=TRUE, prop.chisq=TRUE, 
           format="SPSS", digits=2)
## 
##    Cell Contents
## |-------------------------|
## |                   Count |
## | Chi-square contribution |
## |                Residual |
## |-------------------------|
## 
## Total Observations in Table:  1551 
## 
##                 | tipo_de_cooperativa 
##          estado | 1.Consumidor  |   2.Produtor  |     3.Escola  |     4.Outras  |    Row Total | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
##     1.São Paulo |         214  |         237  |          78  |         119  |         648  | 
##                 |       20.62  |        3.73  |       29.76  |       20.30  |              | 
##                 |       56.91  |      -31.64  |      -65.30  |       40.04  |              | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
##        2.Paraná |          51  |         102  |         126  |          22  |         301  | 
##                 |        6.61  |        4.16  |       53.07  |        5.87  |              | 
##                 |      -21.97  |      -22.79  |       59.43  |      -14.68  |              | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
## 3.Rio G. do Sul |         111  |         304  |         139  |          48  |         602  | 
##                 |        8.36  |       11.87  |        0.26  |        8.77  |              | 
##                 |      -34.94  |       54.43  |        5.87  |      -25.36  |              | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
##    Column Total |         376  |         643  |         343  |         189  |        1551  | 
## ----------------|--------------|--------------|--------------|--------------|--------------|
## 
## 

O cálculo da estatística de Qui-quadrado, calculado a partir da fórmula:

\[ \frac{(o_i-e_i)^2}{e_i} \]

é apresentado de forma padrão na saída da Tabela 4.9. No entanto, é também possível calculá-lo da seguinte forma:

tab4_8<-table(estado,tipo_de_cooperativa)
testequi<-chisq.test(tab4_8) 
testequi
## 
##  Pearson's Chi-squared test
## 
## data:  tab4_8
## X-squared = 173, df = 6, p-value <2e-16

As expressões (4.5) e (4.6) dadas respectivamente pelas fórmulas:

\[ C=\sqrt{\frac{\chi^2}{\chi^2+n}} \]

e

\[ T = \sqrt{\frac{\chi^2}{n(r-1)(s-1)}} \]

podem ser calculadas facilmente a partir dos resultados deste teste.
Para o Exemplo 4.3, estas quantidades são dadas por:

### (4.5) ### 

C = sqrt(testequi$statistic/(testequi$statistic+1551))
round(C,digits=2) # Arredondando para duas casas decimais
## X-squared 
##      0.32
### (4.6) ###

T = sqrt(testequi$statistic/(1551*(4-1)*(3-1)))
round(T,digits=2) # Arredondando para duas casas decimais
## X-squared 
##      0.14

4.5 Associação entre Variáveis Quantitativas

Exemplo 4.4

Dados do exemplo:

dados.ex4_4<-data.frame(agente=c("A","B","C","D","E","F","G","H","I","J"),
            anos_servico=c(2,3,4,5,4,6,7,8,8,10),
            n_clientes=c(48,50,56,52,43,60,62,58,64,72))

Tabela 4.12

Tabela 4.12 Número de anos de serviço(X) por número de clientes(Y) de agentes de uma companhia de seguros.
agente anos_servico n_clientes
A 2 48
B 3 50
C 4 56
D 5 52
E 4 43
F 6 60
G 7 62
H 8 58
I 8 64
J 10 72

Figura 4.2

attach(dados.ex4_4)
plot(dados.ex4_4$n_clientes,dados.ex4_4$anos_servico,pch=20, col="darkblue",
    xlab="Anos de Serviço", ylab="Número de Clientes",cex=2)

Figura 4.2: Gráfico de dispersão para as variáveis X: anos de serviço e Y: número de clientes.

Exemplo 4.5

Figura 4.3

A Leitura dos dados contidos no arquivo “cd-brasil.csv” pode ser feita a partir da sintaxe a seguir:

cd_brasil<-read.table("cd-brasil.csv",h=T,skip=7,sep=";")
names(cd_brasil)
## [1] "regiao"     "uf"         "superficie" "pop_urbana" "pop_rural" 
## [6] "total"      "densidade"
attach(cd_brasil)
plot(pop_urbana,pop_rural,pch=20, col="darkblue",
    xlab="População urbana",ylab="População rural",cex=2)

Figura 4.3: Gráfico de dispersão para as variáveis X: população urbana e Y: populacao rural.

Exemplo 4.6

Dados do exemplo:

dados.ex4_6<-data.frame(
        familia=c("A","B","C","D","E","F","G","H","I","J"),
            renda_bruta=c(12,16,18,20,28,30,40,48,50,54),
            gasto_saude=c(7.2,7.4,7,6.5,6.6,6.7,6,5.6,6,5.5))
attach(dados.ex4_6)
plot(renda_bruta,gasto_saude,pch=20, col="darkblue",
    xlab="Renda Bruta",ylab="% de gasto com saúde",cex=2)

Figura 4.4: Gráfico de dispersão para as variáveis X: renda bruta e Y: % renda gasta com saúde.

Tabela 4.14

dados.tab4_14<-data.frame(
        individuo=c("A","B","C","D","E","F","G","H"),
            resultado=c(45,52,61,70,74,76,80,90),
            tempo=c(343,368,355,334,337,381,345,375))
attach(dados.tab4_14)
plot(resultado,tempo,pch=20, col="darkblue",
        xlab="Resultado teste",ylab="Tempo",cex=2)

Figura 4.5: Gráfico de dispersão para as variáveis X: resultado do teste e Y: % tempo de operação.

Exemplo 4.7

O cálculo das colunas da Tabela 4.15 se baseiam nos dados do Exemplo 4.4. Utilizaremos ainda, para o cálculo do desvio padrão, a função varp, que declaramos nos comandos do Capítulo 3:

varp<-function(x, pop=TRUE, na.rm=TRUE,...){
  if (pop==TRUE & na.rm==TRUE){ # calcula var_n desconsiderando os missings
    n<-sum(!is.na(x))
    return(var(x,na.rm=na.rm,...)*(n-1)/n)
  }
  else{
    if(na.rm==FALSE){
      n<-length(x)
      return(var(x,na.rm=na.rm,...)*(n-1)/n)
      }
  }
  return(var(x,na.rm=na.rm,...))
}
attach(dados.ex4_4)
tab4_15<-dados.ex4_4
tab4_15$dsvx<-anos_servico-mean(anos_servico)  # Desvio da variável X em relação a sua média
tab4_15$dsvy<-n_clientes-mean(n_clientes)      # Desvio da variável Y em relação a sua média
tab4_15$zx<-tab4_15$dsvx/sqrt(varp(anos_servico))       # Desvios de X padronizados pelo seu desvio-padrão
tab4_15$zy<-tab4_15$dsvy/sqrt(varp(n_clientes))         # Desvios de Y padronizados pelo seu desvio-padrão
tab4_15$zxzy<-tab4_15$zx*tab4_15$zy              # Coeficiente de correlação entre X e Y
attach(tab4_15)
par(mfrow=c(1,2))
plot(dsvx,dsvy,pch=20, col="darkblue",
        xlab=expression(x-bar(x)),ylab=expression(y-bar(y)))
abline(v=0, lty=2,col="grey")
abline(h=0, lty=2,col="grey")

plot(zx,zy,pch=20, col="darkblue",
    xlab=expression(z[x]),ylab=expression(z[y]))
abline(v=0, lty=2,col="grey")
abline(h=0, lty=2,col="grey")

Figura 4.7: Mudança de escalas para o cálculo do coeficiente de correlação.

Note que nos gráficos acima, utilizamos, nos eixos, a expressão \(x-\overline{x}\). Para imprimir fomulas matemáticas dentro do gráfico, pode-se utilizar a biblioteca grDevices. Utilizando a função expression() pode-se incluir formulas matemáticas de acordo com a seguinte sintaxe*:

Sintaxe Significado
x + y x plus y
x - y x minus y
x*y juxtapose x and y
x/y x forwardslash y
x %+-% y x plus or minus y
x %/% y x divided by y
x %*% y x times y
x %.% y x cdot y
x[i] x subscript i
x^2 x superscript 2
paste(x, y, z) juxtapose x, y, and z
sqrt(x) square root of x
sqrt(x, y) yth root of x
x == y x equals y
x != y x is not equal to y
x < y x is less than y
x <= y x is less than or equal to y
x > y x is greater than y
x >= y x is greater than or equal to y
x %~~% y x is approximately equal to y
x %=~% y x and y are congruent
x %==% y x is defined as y
x %prop% y x is proportional to y
x %~% y x is distributed as y
plain(x) draw x in normal font
bold(x) draw x in bold font
italic(x) draw x in italic font
bolditalic(x) draw x in bolditalic font
symbol(x) draw x in symbol font
list(x, y, z) comma-separated list
ellipsis (height varies)
cdots ellipsis (vertically centred)
ldots ellipsis (at baseline)
x %subset% y x is a proper subset of y
x %subseteq% y x is a subset of y
x %notsubset% y x is not a subset of y
x %supset% y x is a proper superset of y
x %supseteq% y x is a superset of y
x %in% y x is an element of y
x %notin% y x is not an element of y
hat(x) x with a circumflex
tilde(x) x with a tilde
dot(x) x with a dot
ring(x) x with a ring
bar(xy) xy with bar
widehat(xy) xy with a wide circumflex
widetilde(xy) xy with a wide tilde
x %<->% y x double-arrow y
x %->% y x right-arrow y
x %<-% y x left-arrow y
x %up% y x up-arrow y
x %down% y x down-arrow y
x %<=>% y x is equivalent to y
x %=>% y x implies y
x %<=% y y implies x
x %dblup% y x double-up-arrow y
x %dbldown% y x double-down-arrow y
alpha – omega Greek symbols
Alpha – Omega uppercase Greek symbols
theta1, phi1, sigma1, omega1 cursive Greek symbols
Upsilon1 capital upsilon with hook
aleph first letter of Hebrew alphabet
infinity infinity symbol
partialdiff partial differential symbol
nabla nabla, gradient symbol
32*degree 32 degrees
60*minute 60 minutes of angle
30*second 30 seconds of angle
displaystyle(x) draw x in normal size (extra spacing)
textstyle(x) draw x in normal size
scriptstyle(x) draw x in small size
scriptscriptstyle(x) draw x in very small size
underline(x) draw x underlined
x ~~ y put extra space between x and y
x + phantom(0) + y leave gap for “0”, but don’t draw it
x + over(1, phantom(0)) leave vertical gap for “0” (don’t draw)
frac(x, y) x over y
over(x, y) x over y
atop(x, y) x over y (no horizontal bar)
sum(x[i], i==1, n) sum x[i] for i equals 1 to n
prod(plain(P)(X==x), x) product of P(X=x) for all values of x
integral(f(x)*dx, a, b) definite integral of f(x) wrt x
union(A[i], i==1, n) union of A[i] for i equals 1 to n
intersect(A[i], i==1, n) intersection of A[i]
lim(f(x), x %->% 0) limit of f(x) as x tends to 0
min(g(x), x > 0) minimum of g(x) for x greater than 0
inf(S) infimum of S
sup(S) supremum of S
x^y + z normal operator precedence
x^(y + z) visible grouping of operands
x^{y + z} invisible grouping of operands
group(“(”,list(a, b),“]”) specify left and right delimiters
bgroup(“(”,atop(x,y),“)”) use scalable delimiters
group(lceil, x, rceil) special delimiters
group(lfloor, x, rfloor) special delimiters

*fonte:R Help

Para calcular o coeficiente de correlação linear (Equação 4.7) e covariância (Equação 4.9) entre duas variáveis, utilize os comandos cor e cov

cor(X,Y) # Calcula a correlação linear entre X e Y
cov(X,Y) # Calcula a covariância entre X e Y

4.6 Associação entre Variáveis Qualitativas e Quantitativas

Exemplo 4.8

Para construir a Tabela 4.16, precisamos calcular as estatísticas descritivas de resumo e dispersão por grupo, depois calcular estas quantidades para a amostra e por fim montar a tabela. O mesmo será feito na Tabela 4.17. Utilizaremos os dados da Tabela 2.1, como descrito no livro.

attach(tab2_1)
tapply(salario,grau_instrucao,summary)-> summary.tab4_16 # Calculando medidas de posição por grupo
tapply(salario,grau_instrucao,varp)-> varp.tab4_16 # Calculando variancia por grupo
tapply(salario,grau_instrucao,length)-> n.tab4_16  # Calculando n por grupo

summary.tab4_16[[4]]<-summary(salario)             # Calculando medidas de posição de toda a amostra
varp.tab4_16[[4]]<-varp(salario)                   # Calculando variancia de toda a amostra
n.tab4_16[[4]]<-length(salario)                    # Calculando n

tab4_16 <- matrix(unlist(summary.tab4_16), ncol = 6, byrow = TRUE)
tab4_16<-cbind(n.tab4_16,tab4_16,sqrt(varp.tab4_16),varp.tab4_16)
dimnames(tab4_16)<-list(
                        c("Fundamental","Medio","Superior", "Todos"),
                        c("n", "Min.","Q1","Mediana","Média","Q3","Max.","dp(S)","Var(S)"))

Tabela 4.16

Tabela 4.16: Medidas-resumo para a variável salário, segundo grau de instrução, na Companhia MB.
n Min. Q1 Mediana Média Q3 Max. dp(S) Var(S)
Fundamental 12 4.00 6.01 7.12 7.84 9.16 13.8 2.83 8.01
Medio 18 5.73 8.84 10.90 11.50 14.40 19.4 3.61 13.04
Superior 6 10.50 13.60 16.70 16.50 18.40 23.3 4.11 16.89
Todos 36 4.00 7.55 10.20 11.10 14.10 23.3 4.52 20.46

Além da forma apresentada anteriormente para a construção de box plots (função boxplot apresentada no Capítulo 3), é possível construir box plots a partir do ggplot2. Utilizaremos a camada geom_boxplot para construir os box plots das Figuras 4.8 e 4.9 com o ggplot2.

Figura 4.8

ggplot(tab2_1, aes(grau_instrucao, salario)) + geom_boxplot(fill = "darkblue", colour = "grey")

Figura 4.8: Box plots de salário segundo grau de instrução.

attach(tab2_1)
tapply(salario,reg_procedencia,summary)-> summary.tab4_17 # Calculando medidas de posição por grupo
tapply(salario,reg_procedencia,varp)-> varp.tab4_17 # Calculando variancia por grupo
tapply(salario,reg_procedencia,length)-> n.tab4_17  # Calculando n por grupo

summary.tab4_17[[4]]<-summary(salario)             # Calculando medidas de posição de toda a amostra
varp.tab4_17[[4]]<-varp(salario)                   # Calculando variancia de toda a amostra
n.tab4_17[[4]]<-length(salario)                    # Calculando n

tab4_17 <- matrix(unlist(summary.tab4_17), ncol = 6, byrow = TRUE)
tab4_17<-cbind(n.tab4_17,tab4_17,sqrt(varp.tab4_17),varp.tab4_17)
dimnames(tab4_17)<-list(
                        c("Capital","Interior","Outra", "Todos"),
                        c("n", "Min.","Q1","Mediana","Média","Q3","Max.","dp(S)","Var(S)"))

Tabela 4.17

Tabela 4.17: Medidas-resumo para a variável salário segundo a região de procedência, na Companhia MB.
n Min. Q1 Mediana Média Q3 Max. dp(S) Var(S)
Capital 11 4.56 7.49 9.77 11.5 16.6 19.4 5.22 27.27
Interior 12 4.00 7.80 10.60 11.6 14.7 23.3 5.07 25.71
Outra 13 5.73 8.74 9.80 10.4 12.8 16.2 3.02 9.13
Todos 36 4.00 7.55 10.20 11.1 14.1 23.3 4.52 20.46

Figura 4.9

ggplot(tab2_1, aes(reg_procedencia, salario)) + geom_boxplot(fill = "darkblue", colour = "grey") # + geom_jitter()

Figura 4.9: Box plots de salário segundo região de procedência.

Exemplo 4.9

#R^2 para Salário por grau de instrução  
varS1=t(tab4_16[1:3,1])%*%tab4_16[1:3,9]/sum(tab4_16[1:3,1])
R2.1=1-varS1/tab4_16[4,9]

print(paste("media(var(S)) :",round(varS1,2)))
## [1] "media(var(S)) : 12"
print(paste("R^2 :",round(R2.1,2)))
## [1] "R^2 : 0.41"
#R^2 para Salário por região de procedência   
varS2=t(tab4_17[1:3,1])%*%tab4_17[1:3,9]/sum(tab4_17[1:3,1])
R2.2=1-varS2/tab4_17[4,9]
print(paste("media(var(S)) :",round(varS2,2)))
## [1] "media(var(S)) : 20.2"
print(paste("R^2 :",round(R2.2,2)))
## [1] "R^2 : 0.01"

4.7 Gráficos q x q

Exemplo 4.10

tab4_18<-data.frame(aluno=1:20,prova1=c(8.5,3.5,7.2,5.5,9.5,7,4.8,6.6,2.5,7,7.4,5.6,6.3,3,8.1,3.8,6.8,10,4.5,5.9),prova2=c(8,2.8,6.5,6.2,9,7.5,5.2,7.2,4,6.8,6.5,5,6.5,3,9,4,5.5,10,5.5,5))
plot(tab4_18$prova1,tab4_18$prova2,xlab="Quantis da 1a. prova",ylab="Quantis da 2a. prova",pch=16,col="darkblue")
abline(a=0,b=1)

Figura 4.10: Gráfico q x q para as notas em duas provas de Estatística.

Tabela 4.18

Tabela 4.18: Notas de 20 alunos em duas provas de Estatística.
aluno prova1 prova2
1 8.5 8.0
2 3.5 2.8
3 7.2 6.5
4 5.5 6.2
5 9.5 9.0
6 7.0 7.5
7 4.8 5.2
8 6.6 7.2
9 2.5 4.0
10 7.0 6.8
11 7.4 6.5
12 5.6 5.0
13 6.3 6.5
14 3.0 3.0
15 8.1 9.0
16 3.8 4.0
17 6.8 5.5
18 10.0 10.0
19 4.5 5.5
20 5.9 5.0

Exemplo 4.11

Para este exemplo, utilizaremos a função quantile - já apresentada anteriormente - que calcula os quantis da variável solicitada, e a função seq, que controi uma sequencia de números ordenados. veja ?seq para mais detalhes.

cd_temperaturas<-read.table("cd-temperaturas.csv",h=T,skip=4,sep=";",dec=",") # Leitura dos dados
attach(cd_temperaturas)
q_cananeia<-quantile(cananeia,probs = seq(0,1,1/120)) # seq(0,1,1/120) constroi uma sequencia de 0 a 1 com saltos de 1/120 de distância.
q_ubatuba<-quantile(ubatuba,probs = seq(0,1,1/120))
plot(q_cananeia,q_ubatuba,xlab="Quantis Cananéia",ylab="Quantis Ubatuba",pch=16,col="darkblue")
abline(a=0,b=1)

Figura 4.11: Gráfico q x q para os valores de temperatura de Cananéia e Ubatuba.

4.8 Exemplos computacionais

Exemplo 4.12

Figura 4.12

tab2_1$idade<-tab2_1$idade_anos*12+tab2_1$idade_meses
attach(tab2_1)

par(mfrow=c(1,3),pin=c(2,2))
plot(idade[grau_instrucao=="ensino fundamental"],salario[grau_instrucao=="ensino fundamental"],main="Fundamental",xlab="Idade",ylab="Salário",pch=16,col="darkblue")
plot(idade[grau_instrucao=="ensino médio"],salario[grau_instrucao=="ensino médio"],main="Médio",xlab="Idade",ylab="Salário",pch=16,col="darkblue")
plot(idade[grau_instrucao=="superior"],salario[grau_instrucao=="superior"],main="Superior",xlab="Idade",ylab="Salário",pch=16,col="darkblue")

Figura 4.12: Gráficos de dispersão das variáveis salário e idade, segundo a variável grau de instrução.

Exemplo 4.13

Leitura dos dados:

cd_mercado <- read.table("cd-mercado.csv",h=T,skip=4,sep=";",dec=",") # Leitura dos dados
attach(cd_mercado)
plot(telebras[1:39],indice[1:39],xlab="Telebrás",ylab="Ibovespa",pch=16,col="darkblue")
abline(lm(indice[1:39]~telebras[1:39]))

Figura 4.13: Gráfico de dispersão para ações da Telebrás e BOVESPA.

Calculando a correlação linear entre os dois preçcos temos:

print(paste("Corr(X,Y) = ",round(cor(indice[1:39],telebras[1:39]),2)))
## [1] "Corr(X,Y) =  0.98"

Exemplo 4.14

Leitura dos dados:

cd_veiculos <- read.table("cd-veiculos.csv",h=T,skip=4,sep=";",dec=",") # Leitura dos dados

Figura 4.14

Novamente, utilizaremos a biblioteca ggplot2 para a constução da Figura 4.14.

attach(cd_veiculos)
ggplot(cd_veiculos, aes(comprimento,preco)) +  geom_point(aes(shape =N_I,colour=N_I), size = 4)

Figura 4.14: Gráfico de dispersão simbólico das variáveis preço e comprimento de veículos, categorizadas pela variável procedência: nacional(N) e importado(I).


Capítulo Anterior | Introdução | Próximo Capítulo