Universidade Federal do Paraná
Curso de Estatística
CE 083 - Estatística Computacional I - 2014/2
Prof. Dr. Walmes Marques Zeviani


Aula 13

Tabela de conteúdo


Medidas descritivas

##-----------------------------------------------------------------------------
## Medidas descritivas.

## Posição: média, mediana, moda.
## Separação: extremos, quartis, quantis.
## Dispersão: amplitude, variância/desvio-padrão, desvio absoluto da
##    mediana, amplitude interquartílica, coeficiente de variação.
## Forma: coeficiente de assimetria e coeficiente de curtose.

##-----------------------------------------------------------------------------
## Pacotes com funções úteis para obter medidas descritivas.

require(plyr)    ## ddply(), colwise(), each().
require(reshape) ## melt(), cast().
require(doBy)    ## summaryBy().
##-----------------------------------------------------------------------------
## Lendo dados de veículos Renault Duster à venda no
## `http://www.webmotors.com.br/` em 26/03/2014.

dus <-
    read.table("http://www.leg.ufpr.br/~walmes/data/duster_venda_260314.txt",
               header=TRUE, sep="\t", encoding="utf-8")
str(dus, vec.len=1)
## 'data.frame':    699 obs. of  10 variables:
##  $ modelo: Factor w/ 11 levels "RENAULT DUSTER 1.6 4X2 16V FLEX 4P MANUAL",..: 3 1 ...
##  $ cor   : Factor w/ 9 levels "Azul","Branco",..: 5 1 ...
##  $ km    : int  31442 40800 ...
##  $ ano   : Factor w/ 7 levels "2011/2011","2011/2012",..: 2 2 ...
##  $ valor : num  41990 ...
##  $ cambio: Factor w/ 2 levels "AUTOMÁTICO","MANUAL": 2 2 ...
##  $ poten : num  1.6 1.6 ...
##  $ trac  : Factor w/ 2 levels "4X2","4X4": 1 1 ...
##  $ cat   : Factor w/ 5 levels " "," DYNAMIQUE ",..: 3 1 ...
##  $ novo  : Factor w/ 2 levels "novo","usado": 2 2 ...
##-----------------------------------------------------------------------------
## Quantos NA tem em cada coluna?

sumNA <- function(x) sum(is.na(x))
colwise(.fun=sumNA)(dus)
##   modelo cor  km ano valor cambio poten trac cat novo
## 1      0   0 132   0     0      0     0    0   0    0
## Pode se usar apply também.
apply(dus, MARGIN=2, sumNA)
## modelo    cor     km    ano  valor cambio  poten   trac    cat   novo 
##      0      0    132      0      0      0      0      0      0      0
## Se fizer na.omit() será jogado fora veículos com informações para as
## demais variáveis.
## dus <- na.omit(dus)
## str(dus)

##-----------------------------------------------------------------------------
## Questões.

## Qual o total de veículos?
nrow(dus)
## [1] 699
## Quantos custam mais que 50 mil?
sum(dus$valor>50000)
## [1] 443
## Qual a proporção que custa mais que 50 mil?
sum(dus$valor>50000)/nrow(dus)
## [1] 0.6338
prop.table(table(dus$valor>50000))
## 
##  FALSE   TRUE 
## 0.3662 0.6338
## Qual o custo médio dos carros da amostra?
mean(dus$valor)
## [1] 53742
## Qual o custo mediano dos carros da amostra?
median(dus$valor)
## [1] 52900
## Qual o desvio-padrão do custo dos carros da amostra?
sd(dus$valor)
## [1] 6101
sqrt(var(dus$valor))
## [1] 6101
## Qual a amplitude do custo dos carros da amostra?
with(dus, max(valor)-min(valor))
## [1] 34500
diff(range(dus$valor))
## [1] 34500
## Quartis?
fivenum(dus$valor) ## Cinco números de Tukey: extremos e quartis.
## [1] 38000 49000 52900 58000 72500
quantile(dus$valor, prob=0.65)    ## Qualquer percentil.
##   65% 
## 55900
quantile(dus$valor, prob=(1:3)/4) ## 1Q = 25%, 2Q=50% e 3Q=75%.
##   25%   50%   75% 
## 49000 52900 58000
## Desvio médio absoluto da mediana.
dmam <- function(x){
    sum(abs(median(x)-x))/length(x)
}

## Desvio mediano absoluto da mediana.
dmdam <- function(x){
    median(abs(median(x)-x))
}

## help(mad, help_type="html")

dmam(dus$valor)
## [1] 5025
dmdam(dus$valor)
## [1] 4100
mad(dus$valor, constant=1)
## [1] 4100
## Coeficiente de variação?
## cv <- function(x, ...){
##     100*sd(x, ...)/mean(x, ...)
## }

cv <- function(x, na.rm=FALSE, ...){
    100*sd(x, na.rm=na.rm)/mean(x, na.rm=na.rm, ...)
}

cv(dus$valor, na.rm=TRUE)
## [1] 11.35
cv(dus$valor, na.rm=TRUE, trim=0.1)
## [1] 11.4
## Como obter todas as medidas descritivas de uma vez?

## Função que retorna mais de uma estatística.
mystats <- function(x){
    f <- fivenum(x)
    c(media=mean(x), mediana=f[3],
      "desv pad"=sd(x), ampli=f[5]-f[1],
      cv=cv(x), "1Q"=f[2], "3Q"=f[4])
}

sts <- mystats(dus$valor)
## sts

cbind(sts)
##               sts
## media    53742.32
## mediana  52900.00
## desv pad  6101.09
## ampli    34500.00
## cv          11.35
## 1Q       49000.00
## 3Q       58000.00

Medidas descritivas por estrato

##-----------------------------------------------------------------------------
## Perguntas.

## Qual a frequência para cada tipo de tração?
table(dus$trac)
## 
## 4X2 4X4 
## 642  57
xtabs(~trac, data=dus)
## trac
## 4X2 4X4 
## 642  57
## Qual a frequência para cada tipo de cambio?
xtabs(~cambio, data=dus)
## cambio
## AUTOMÁTICO     MANUAL 
##        195        504
## Qual a frequência para cada tipo de cambio x tipo de tração?
xtabs(~trac+cambio, data=dus)
##      cambio
## trac  AUTOMÁTICO MANUAL
##   4X2        195    447
##   4X4          0     57
## Qual o preço médio para cada tipo de tração?
with(dus, tapply(valor, trac, mean))
##   4X2   4X4 
## 53406 57534
aggregate(valor~trac, data=dus, FUN=mean)
##   trac valor
## 1  4X2 53406
## 2  4X4 57534
with(dus, by(valor, trac, FUN=mean))
## trac: 4X2
## [1] 53406
## ------------------------------------------------------------------- 
## trac: 4X4
## [1] 57534
## Qual o preço médio e o desvio padrão para cada tipo de tração?
myfun <- function(x) c(m=mean(x), s=sd(x))

with(dus, tapply(valor, trac, myfun))
## $`4X2`
##     m     s 
## 53406  6023 
## 
## $`4X4`
##     m     s 
## 57534  5731
aggregate(valor~trac, data=dus, FUN=myfun)
##   trac valor.m valor.s
## 1  4X2   53406    6023
## 2  4X4   57534    5731
with(dus, by(valor, trac, FUN=myfun))
## trac: 4X2
##     m     s 
## 53406  6023 
## ------------------------------------------------------------------- 
## trac: 4X4
##     m     s 
## 57534  5731
aggregate(valor~trac, data=dus, FUN=each(mean, sd))
##   trac valor.mean valor.sd
## 1  4X2      53406     6023
## 2  4X4      57534     5731
## Qual o preço médio para cada tipo de tração x tipo de cambio?
with(dus, tapply(valor, list(trac, cambio), mean))
##     AUTOMÁTICO MANUAL
## 4X2      58085  51364
## 4X4         NA  57534
aggregate(valor~trac+cambio, data=dus, FUN=myfun)
##   trac     cambio valor.m valor.s
## 1  4X2 AUTOMÁTICO   58085    5333
## 2  4X2     MANUAL   51364    5100
## 3  4X4     MANUAL   57534    5731
with(dus, by(valor, list(trac, cambio), FUN=myfun))
## : 4X2
## : AUTOMÁTICO
##     m     s 
## 58085  5333 
## ------------------------------------------------------------------- 
## : 4X4
## : AUTOMÁTICO
## NULL
## ------------------------------------------------------------------- 
## : 4X2
## : MANUAL
##     m     s 
## 51364  5100 
## ------------------------------------------------------------------- 
## : 4X4
## : MANUAL
##     m     s 
## 57534  5731

Estudar para não ter mais essa reação nas sabatinas