1 ESTATÍSTICAS DESCRITIVAS NO R

Para ilustrar algumas ferramentas de análise de dados, vamos usar dados hipotéticos de atributos de 36 funcionários da companhia “Milsa” (livro Estatística Básica -W. Bussab e P. Morettin). Estes dados são do tipo data.frame. Disponível em: https://mega.nz/#!sh5SDQQC!p3dlAcsgwLwZiQMjcPWoYZm88dn23gqzAPnyM6UMqxI

#copie o arquivo milsa.txt em seu diretório de trabalho.
milsa <- read.table("milsa.txt", head = T)
milsa
##    funcionario civil instrucao filhos salario ano mês 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
## 7            7     1         1     NA    6.86  41   0      1
## 8            8     1         1     NA    7.39  43   4      2
## 9            9     2         2      1    7.59  34  10      2
## 10          10     1         2     NA    7.44  23   6      3
## 11          11     2         2      2    8.12  33   6      1
## 12          12     1         1     NA    8.46  27  11      2
## 13          13     1         2     NA    8.74  37   5      3
## 14          14     2         1      3    8.95  44   2      3
## 15          15     2         2      0    9.13  30   5      1
## 16          16     1         2     NA    9.35  38   8      3
## 17          17     2         2      1    9.77  31   7      2
## 18          18     2         1      2    9.80  39   7      3
## 19          19     1         3     NA   10.53  25   8      1
## 20          20     1         2     NA   10.76  37   4      1
## 21          21     2         2      1   11.06  30   9      3
## 22          22     1         2     NA   11.59  34   2      2
## 23          23     1         1     NA   12.00  41   0      3
## 24          24     2         3      0   12.79  26   1      3
## 25          25     2         2      2   13.23  32   5      1
## 26          26     2         2      2   13.60  35   0      3
## 27          27     1         1     NA   13.85  46   7      3
## 28          28     2         2      0   14.69  29   8      1
## 29          29     2         2      5   14.71  40   6      1
## 30          30     2         2      2   15.99  35  10      2
## 31          31     1         3     NA   16.22  31   5      3
## 32          32     2         2      1   16.61  36   4      1
## 33          33     2         3      3   17.26  43   7      2
## 34          34     1         3     NA   18.75  33   7      2
## 35          35     2         2      2   19.40  48  11      2
## 36          36     2         3      3   23.30  42   2      1

Inicialmente inspecionamos as primeiras linhas do conjunto de dados:

head(milsa)
##   funcionario civil instrucao filhos salario ano mês 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

A planilha ainda não está pronta! Precisamos informar para o programa que as variáveis civil, instrução e região NÃO são numéricas e sim categóricas, usando o comando factor().

Primeiro, redefinimos a variável civil com os rótulos (labels) solteiro e casado associados aos níveis (levels) 1 e 2.

Para a variável instrução, usamos o argumento adicional ordered = TRUE para indicar que é uma variável ordinal. Na variável região, codificamos assim: 2=capital, 1=interior, 3=outro.

milsa$civil <- factor(milsa$civil, label = c("solteiro", "casado"), levels = 1:2)
milsa$instrucao <- factor(milsa$instrucao, label = c("1º Grau", "2º Grau", "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 mês   regiao
## 1           1 solteiro   1º Grau     NA    4.00  26   3 interior
## 2           2   casado   1º Grau      1    4.56  32  10  capital
## 3           3   casado   1º Grau      2    5.25  36   5  capital
## 4           4 solteiro   2º Grau     NA    5.73  20  10    outro
## 5           5 solteiro   1º Grau     NA    6.26  40   7    outro
## 6           6   casado   1º Grau      0    6.66  28   0 interior

O mesmo poderia ser feito com o comando transform()

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

Vamos agora, definir uma nova variável denominada idade, em anos, a partir das variáveis ano e mês.

milsa$idade <- milsa$ano + milsa$mês/12
milsa$idade
##  [1] 26.25000 32.83333 36.41667 20.83333 40.58333 28.00000 41.00000
##  [8] 43.33333 34.83333 23.50000 33.50000 27.91667 37.41667 44.16667
## [15] 30.41667 38.66667 31.58333 39.58333 25.66667 37.33333 30.75000
## [22] 34.16667 41.00000 26.08333 32.41667 35.00000 46.58333 29.66667
## [29] 40.50000 35.83333 31.41667 36.33333 43.58333 33.58333 48.91667
## [36] 42.16667
#ou
#milsa <- transform(milsa, idade = ano + mês/12)

A seguir, fazemos algumas análises descritivas uni e bi-variadas.

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"         "mês"         "regiao"      "idade"
dim(milsa)
## [1] 36  9

Uma vez que vamos fazer diversas análises com estes dados, usaremos o comando attach() para anexar o objeto ao caminho de procura.

attach(milsa)

2 ANÁLISE UNIVARIADA

A análise univariada consiste basicamente em, para cada uma das variáveis individualmente:

  1. classificar a variável quanto a seu tipo: qualitativa (nominal ou ordinal) ou quantitativa (discreta ou contínua);

  2. obter tabelas, gráficos e/ou medidas que resumam a distribuição da variável

Para exemplificar o uso dessas ferramentas, vamos selecionar uma variável de cada tipo.

2.1 VARIÁVEL QUALITATIVA NOMINAL

A variável civil é uma variável qualitativa nominal, assim podemos obter:

  1. uma tabela de frequências (absolutas e/ou relativas),
  2. um gráfico de setores,
  3. a moda, i.e., o valor que ocorre com maior frequência.

Primeiro, vamos listar os dados e checar se estão na forma de um fator, que é adequada para variáveis desse tipo.

civil
##  [1] solteiro casado   casado   solteiro solteiro casado   solteiro
##  [8] solteiro casado   solteiro casado   solteiro solteiro casado  
## [15] casado   solteiro casado   casado   solteiro solteiro casado  
## [22] solteiro solteiro casado   casado   casado   solteiro casado  
## [29] casado   casado   solteiro casado   casado   solteiro casado  
## [36] casado  
## Levels: solteiro casado
is.factor(civil)
## [1] TRUE

A seguir, obtemos as Frequências absolutas e relativas:

civil.tb <- table(civil)
prop.table(civil.tb)
## civil
##  solteiro    casado 
## 0.4444444 0.5555556

O gráfico de setores é adequado para representar esta variável:

pie(table(civil))

Finalmente encontramos a moda para esta variável (objeto civil.mo).

civil.mo <- names(civil.tb)[civil.tb == max(civil.tb)]
civil.mo
## [1] "casado"

2.2 VARIÁVEL QUALITATIVA ORDINAL

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

 instrucao
##  [1] 1º Grau  1º Grau  1º Grau  2º Grau  1º Grau  1º Grau  1º Grau 
##  [8] 1º Grau  2º Grau  2º Grau  2º Grau  1º Grau  2º Grau  1º Grau 
## [15] 2º Grau  2º Grau  2º Grau  1º Grau  Superior 2º Grau  2º Grau 
## [22] 2º Grau  1º Grau  Superior 2º Grau  2º Grau  1º Grau  2º Grau 
## [29] 2º Grau  2º Grau  Superior 2º Grau  Superior Superior 2º Grau 
## [36] Superior
## Levels: 1º Grau < 2º Grau < Superior
 is.factor(instrucao)
## [1] TRUE

As tabelas de frequências são obtidas de forma semelhante

instrucao.tb <- table(instrucao)
instrucao.tb
## instrucao
##  1º Grau  2º Grau Superior 
##       12       18        6

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:

barplot(instrucao.tb)

Para uma variável ordinal, além da moda podemos também calcular outras medidas, tais como a mediana.

Note que o comando median() não funciona com variáveis não numéricas, por isso, usamos:

instrucao.mo <- names(instrucao.tb)[instrucao.tb == max(instrucao.tb)]
instrucao.mo
## [1] "2º Grau"
median(as.numeric(instrucao))
## [1] 2
levels(milsa$instrucao)[median(as.numeric(milsa$instrucao))]
## [1] "2º Grau"

2.3 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 variável quantitativa discreta.

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
## [24]  0  2  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:

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 pode ser obtido através de um gráfico de linhas:

plot(filhos.tb)

Outra possibilidade seria fazer gráficos de Frequências relativas e de Frequências acumuladas:

plot(filhos.tbr)

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

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 o número de filhos para alguns indivíduos.

O argumento trim=0.1 indica uma média aparada, onde foram retirados 10% menores e 10% maiores valores.

Ao final, mostramos como obter os quartis, números mínimo e máximo, de um conjunto de dados.

filhos.mo <- names(filhos.tb)[filhos.tb == 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.meap <- mean(filhos, trim = 0.1, na.rm = T)
filhos.meap
## [1] 1.5625
filhos.qt <- quantile(filhos, na.rm = T)
filhos.qt
##   0%  25%  50%  75% 100% 
##    0    1    2    2    5

Quanto às medidas de dispersão, vejamos como obter números máximo e mínimo, amplitude, variância e desvio-padrão, coeficiente de variação.

Depois obtemos os quartis e 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] 76.85018
filhos.qt <- quantile(filhos, na.rm = T)
filhos.qt
##   0%  25%  50%  75% 100% 
##    0    1    2    2    5
filhos.ai <- filhos.qt[4] - filhos.qt[2]
filhos.ai
## 75% 
##   1

De forma geral, usamos:

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
fivenum(filhos)
## [1] 0 1 2 2 5

GRÁFICO DE PONTOS

Vamos construir o gráfico de pontos do número de filhos.

library(lattice)
dotplot(filhos)

Uma opção para criar um gráfico através de dados que uma fonte secundária, apresentados através de uma tabela de frequências, pode ser obtida através dos comandos abaixo.

Filhos = c(0,1,2,3,4,5,6)
Freq = c(20,32,15,7,3,2,2)
Total = rep(Filhos,Freq)
dotplot(Total)

Se quisermos comparar dois grupos, em relação a uma variável quantitativa discreta, podemos colocar dois gráficos de barras, lado a lado.

Por exemplo, suponha que o conjunto de dados anterior seja relativo a um grupo de pessoas (Grupo A), e que você deseja comparar o número de filhos em relação a outro grupo de pessoas (Grupo B), com frequências de 5,15,7,6,3,2,1.

GrupoA <-matrix(Freq,ncol=7,nrow=1)
colnames(GrupoA)=c(0,1,2,3,4,5,6)
FreqB = c(5,15,7,6,3,2,1)
GrupoB <- matrix(FreqB,ncol=7,nrow=1)
colnames(GrupoB)=c(0,1,2,3,4,5,6)
par(mfrow=c(1,2))
Limsup= max(Freq,FreqB)
barplot(GrupoA,ylim=c(0,Limsup))
barplot(GrupoB,ylim=c(0,Limsup))

2.4 VARIÁVEL QUANTITATIVA CONTÍNUA

Para concluir os exemplos para a 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
## [12]  8.46  8.74  8.95  9.13  9.35  9.77  9.80 10.53 10.76 11.06 11.59
## [23] 12.00 12.79 13.23 13.60 13.85 14.69 14.71 15.99 16.22 16.61 17.26
## [34] 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 variável contínua é preciso agrupar os dados em classes.

Para isso, inicialmente verificamos os valores máximo e mínimo dos dados, e usamos o critério de Sturges, para definir o número de classes, usando cut( ) para agrupar os dados.

Finalmente, obtemos as Frequências absolutas e relativas.

range(salario)
## [1]  4.0 23.3
nclass.Sturges(salario)
## [1] 7
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

Dois possíveis gráficos para variáveis contínuas são os histogramas e os box-plots:

hist(salario)

boxplot(salario)

Outra representação gráfica para variáveis numéricas é o diagrama de ramo-e-folhas:

stem(salario)
## 
##   The decimal point is at the |
## 
##    4 | 0637
##    6 | 379446
##    8 | 15701488
##   10 | 5816
##   12 | 08269
##   14 | 77
##   16 | 0263
##   18 | 84
##   20 | 
##   22 | 3

Algumas medidas estatísticas:

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.qt
##      0%     25%     50%     75%    100% 
##  4.0000  7.5525 10.1650 14.0600 23.3000
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

Outro exemplo: Dados representando o valor das vendas semanais (em salários mínimos) de vendedores de gênero alimentícios.

Fazendo um histograma:

vendas <- seq(32.5, 67.5, by = 5)
vendedores <- c(2, 10, 18, 50, 70, 30, 18, 2)
dados <- rep(vendas, vendedores)
hist(dados, breaks = seq(30, 70, by = 5), xlab = "vendas", ylab = "no. vendedores", main = "")

3 ANÁLISE BIVARIADA

Na análise bivariada, procuramos identificar relações entre duas variáveis.

O tipo de resumo estatístico informativo vai depender dos tipos das variáveis envolvidas.

A seguir, mostramos algumas possibilidades desse tipo de análise.

Salientamos que as relações entre duas variáveis devem ser examinadas com cautela, pois podem ser mascaradas por variáveis adicionais, não consideradas na análise (variáveis de confundimento).

3.1 QUALITATIVA VS QUALITATIVA

Vamos considerar as variáveis civil (estado civil) e instrucao (grau de instrução).

A forma mais adequada de construir a tabela envolvendo duas variáveis (tabela de cruzamento) vai depender dos objetivos da análise e da interpretação desejada para os dados.

Inicialmente obteremos a tabela de Frequências absolutas e relativas

 civ.gi.tb <- table(civil, instrucao)
 prop.table(civ.gi.tb)
##           instrucao
## civil         1º Grau    2º Grau   Superior
##   solteiro 0.19444444 0.16666667 0.08333333
##   casado   0.13888889 0.33333333 0.08333333
 prop.table(civ.gi.tb, margin = 1)
##           instrucao
## civil      1º Grau 2º Grau Superior
##   solteiro  0.4375  0.3750   0.1875
##   casado    0.2500  0.6000   0.1500
 prop.table(civ.gi.tb, margin = 2)
##           instrucao
## civil        1º Grau   2º Grau  Superior
##   solteiro 0.5833333 0.3333333 0.5000000
##   casado   0.4166667 0.6666667 0.5000000
 barplot(civ.gi.tb, legend = T)

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

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 podemos refazer as análises do cruzamento com esta nova variável:

instrucao1 <- ifelse(instrucao == "1º Grau", 1, 2)
instrucao1 <- factor(instrucao1, label = c("1º Grau", "2º + Superior"), lev = 1:2, ord = T)
table(instrucao1)
## instrucao1
##       1º Grau 2º + Superior 
##            12            24
table(civil, instrucao1)
##           instrucao1
## civil      1º Grau 2º + 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

3.2 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 anteriormente.

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)
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]
##   1º Grau  0.5454545   0.2727273   0.1818182   0.0000000
##   2º Grau  0.1111111   0.3333333   0.2777778   0.2777778
##   Superior 0.0000000   0.0000000   0.3333333   0.6666667

Considerando instrucao como variável explicativa (eixo-X) e salario como variável resposta (eixo-Y), obtemos um boxplot dos salários, para cada nível de instrução.

Note que na função abaixo, usamos a notação de fórmula do R (~), indicando que a variável salario é explicada pela variável instrução.

boxplot(salario ~ instrucao)

Para as medidas estatísticas, o usual é obter um resumo da variável quantitativa para cada nível do fator qualitativo.

Exemplo: Resumos da variável salário, para cada nível de instrução.

tapply(salario, instrucao, mean)
##   1º Grau   2º Grau  Superior 
##  7.836667 11.528333 16.475000
tapply(salario, instrucao, sd)
##  1º Grau  2º Grau Superior 
## 2.956464 3.715144 4.502438
tapply(salario, instrucao, quantile)
## $`1º Grau`
##      0%     25%     50%     75%    100% 
##  4.0000  6.0075  7.1250  9.1625 13.8500 
## 
## $`2º Grau`
##      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

3.3 QUANTITATIVA VS QUANTITATIVA

Para ilustrar este caso, vamos considerar as variáveis salário e idade.

Para se obter uma tabela é necessário agrupar as variáveis em classes, por exemplo, através dos quartis, gerando 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 menor de classes, podemos fazer como no exemplo a seguir, onde cada variável é dividida em 3 classes, 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 a relação entre duas variáveis quantitativas é um diagrama de dispersão.

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.

plot(idade, salario)