Pedalar…

Ler os dados de um ficheiro excel a partir da diretoria de trabalho, na diretoria “dados” deve estar o ficheiro ex1.xlsx.

# setwd("C:/Users/Laura/Documents/PE/dados/") # fixar a diretoria de trabalho
#library(rio)
#bicic<-import("ex1.xlsx")

Ver os dados

No objecto bicic encontra-se a variável massa
bicic
##    massa
## 1    4.3
## 2    6.8
## 3    9.2
## 4    7.2
## 5    8.7
## 6    8.6
## 7    6.6
## 8    5.2
## 9    8.1
## 10  10.9
## 11   7.4
## 12   4.5
## 13   3.8
## 14   7.6
## 15   6.8
## 16   7.8
## 17   8.4
## 18   7.5
## 19  10.5
## 20   6.0
## 21   7.7
## 22   8.1
## 23   7.0
## 24   8.2
## 25   8.4
## 26   8.8
## 27   6.7
## 28   8.2
## 29   9.4
## 30   7.7
## 31   6.3
## 32   7.7
## 33   9.1
## 34   7.9
## 35   7.9
## 36   9.4
## 37   8.2
## 38   6.7
## 39   8.2
## 40   6.5

Estatísticas sumárias

(b) Obtenha algumas medidas descritivas dos dados e comente

Para variáveis univariadas

Para aceder à variável massa do objecto bicic basta usar bicic$massa ou bicic[,1]

summary(bicic$massa)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.800   6.775   7.750   7.600   8.400  10.900
summary(bicic[,1])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.800   6.775   7.750   7.600   8.400  10.900
quantile(bicic$massa)
##     0%    25%    50%    75%   100% 
##  3.800  6.775  7.750  8.400 10.900
quantile(bicic[,1])
##     0%    25%    50%    75%   100% 
##  3.800  6.775  7.750  8.400 10.900
Se quisermos só a média, ou a variância da amostra:
mean(bicic$massa)
## [1] 7.6
var(bicic$massa)
## [1] 2.265128
Mas se quisermos calcular a moda, podemos usar:
library(modeest)
moda.bic<-mlv(bicic$massa, method = "mfv")
print(moda.bic) 
## [1] 8.2
Vamos confirmar…
table(bicic$massa)
## 
##  3.8  4.3  4.5  5.2    6  6.3  6.5  6.6  6.7  6.8    7  7.2  7.4  7.5  7.6  7.7 
##    1    1    1    1    1    1    1    1    2    2    1    1    1    1    1    3 
##  7.8  7.9  8.1  8.2  8.4  8.6  8.7  8.8  9.1  9.2  9.4 10.5 10.9 
##    1    2    2    4    2    1    1    1    1    1    2    1    1
o valor mais frequente é de facto o 8.2

Mais estatísticas - caso univariado

library(psych)
## Registered S3 method overwritten by 'psych':
##   method         from  
##   plot.residuals rmutil
describe(bicic$massa)
##    vars  n mean   sd median trimmed  mad min  max range  skew kurtosis   se
## X1    1 40  7.6 1.51   7.75    7.69 1.33 3.8 10.9   7.1 -0.44     0.39 0.24

Quantis

quantile(bicic$massa, c(0.25, 0.5, 0.75), type=2)
##  25%  50%  75% 
## 6.75 7.75 8.40

Amplitude e variação interquartil - IQR

range(bicic$massa) #gama valores
## [1]  3.8 10.9
IQR(bicic$massa)
## [1] 1.625

Variância, desvio padrão e coeficiente de variação

var(bicic$massa)
## [1] 2.265128
# 1/(n-1)*(sum(bicicletas*bicicletas)-n*mean(bicicletas)^2)
sd(bicic$massa)
## [1] 1.505034
# sqrt(1/(n-1)*(sum(bicicletas*bicicletas)-n*mean(bicicletas)^2))
sd(bicic$massa)/mean(bicic$massa)*100 # valor em percentagem
## [1] 19.80308

Coeficiente de assimetria (skew)

Coeficiente de assimetria (sc): é uma medida da falta de simetria de uma determinada distribuição de frequência

  • Se sc>0, então a distribuição tem uma cauda direita (valores acima da média) mais pesada
  • Se sc<0, então a distribuição tem uma cauda esquerda (valores abaixo da média) mais pesada
  • Se sc=0, então a distribuição é aproximadamente simétrica (na terceira potência do desvio em relação à média).
# install.packages("moments") # este comando deve ser usado apenas uma vez
library(moments)
## 
## Attaching package: 'moments'
## The following object is masked from 'package:modeest':
## 
##     skewness
skewness(bicic$massa) # coef de assimetria
## [1] -0.4577617
# mmean <- rep(mean(bicicletas),n)
# 1/n*sum((bicic$massa-mmean)^3)/ # ((n-1)/n*var(bicic$massa))^1.5

Coeficiente de achatamento ou curtose (kurtosis)

Coeficiente de achatamento: curtose é uma medida de forma que caracteriza o achatamento de determinada distribuição de frequência

  • Se o valor da curtose for 3, então tem o mesmo achatamento que a distribuição normal. Chama-se a estas distribuições de mesocúrticas
  • Se o valor é > 3, então a distribuição em questão é mais alta (afunilada) e concentrada que a distribuição normal. Diz-se que esta distribuição de frequência é leptocúrtica, ou que a distribuição tem caudas pesadas (o significado é que é relativamente fácil obter valores que não se aproximam da média a vários múltiplos do desvio padrão)
  • Se o valor é < 3, então a distribuição de frequência é mais “achatada” que a distribuição normal. Chama-se-lhe platicúrtica
kurtosis(bicic$massa) # coef. de achatamento ou curtose
## [1] 3.561001
# mmean <- rep(mean(bicic$massa),n)
# 1/n*sum((bicic$massa-mmean)^4)/ ((n-1)/n*var(bicic$massa))^2

(c) Determine o intervalo das 25% menores massas e o intervalo das 25% maiores massas da amostra, bem como a amplitude inter-quantil.

quantile(bicic$massa,c(0,0.25), type=2)
##   0%  25% 
## 3.80 6.75
quantile(bicic$massa,c(0.75,1), type=2)
##  75% 100% 
##  8.4 10.9
IQR(bicic$massa)
## [1] 1.625

(d) Indique o quantil amostral de ordem 0.68.

quantile(bicic$massa,0.68,type=2)
## 68% 
## 8.2

(f) Obtenha o histograma e a caixa de bigodes identificando possíveis outliers.

# ?hist # help para a função hist
hist(bicic$massa,main="Histograma",xlab="Massa",ylab="Freq. absoluta")

Usando o ggplot2
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
# Basic histogram
ggplot(bicic, aes(x=massa)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## Alterando o numero de intervalos (bins)
ggplot(bicic, aes(x = massa)) + 
  geom_histogram(colour = 4, fill = "white", 
                 bins = 10)

Com área total unitária:

library(ggplot2)

## Alterando o numero de intervalos (bins) e area total unitária
ggplot(bicic, aes(x = massa)) + 
  geom_histogram(colour = 4, fill = "white", bins = 10,aes(y=..density..))

Boxplot

# ?boxplot 
boxplot(bicic$massa, col="red", main="")

boxplot(bicic$massa, col="green", horizontal=TRUE, main="Bicicletas")

Usando o ggplot2
# By default, outlier points match the colour of the box. Use outlier.colour to override
p <- ggplot(bicic, aes(y=massa))
p + geom_boxplot(outlier.colour = "red", outlier.shape = 2) + scale_x_discrete( )+labs(title = "Bicicletas",y = "massa")

(g) Após agrupar os dados em classes, calcule a média e o desvio padrão para os dados agrupados e compare estas medidas descritivas com as dos dados originais.

Usando a regra de Sturges para agrupar os dados: Sturges definiu que o número ideal de intervalos k é dado pela expressão (onde n é a dimensão da amostra)

\[\begin{equation} k=1+\log_2(n) \end{equation}\]

k <- nclass.Sturges(bicic$massa)
print(k)
## [1] 7
amp <- (max(bicic$massa)-min(bicic$massa))/k
breaaaks <- NULL
for (i in rep(0:k)) {
breaaaks <- c(breaaaks,min(bicic$massa)+i*amp)
}
print(breaaaks)
## [1]  3.800000  4.814286  5.828571  6.842857  7.857143  8.871429  9.885714
## [8] 10.900000
out.tab<-table(cut(bicic$massa,breaks=breaaaks,right=TRUE,
include.lowest = TRUE))
out.tab
## 
##  [3.8,4.81] (4.81,5.83] (5.83,6.84] (6.84,7.86] (7.86,8.87] (8.87,9.89] 
##           3           1           8           9          13           4 
## (9.89,10.9] 
##           2
ll <- breaaaks[-(k+1)]
print(ll)
## [1] 3.800000 4.814286 5.828571 6.842857 7.857143 8.871429 9.885714
ul <- breaaaks[-1]
print(ul)
## [1]  4.814286  5.828571  6.842857  7.857143  8.871429  9.885714 10.900000
freqabs <- c(3,1,8,9,13,4,2) 
### ou usando out.tab[[1]], out.tab[[2]], ...
midpoints <- (ll+ul)/2
print(midpoints)
## [1]  4.307143  5.321429  6.335714  7.350000  8.364286  9.378571 10.392857
Média, variância e desvio padrão com os dados agrupados e comparação com os valores não agrupados
## Calculo da média dados agrupados
n<-length(bicic$massa)
meang <- sum(freqabs*midpoints)/n
print(meang)
## [1] 7.552857
## Calculo da média dados não agrupados
print(mean(bicic$massa))
## [1] 7.6
# Calcular a diferencia absoluta entre os dois valores:
dif.media<-round(abs(meang-mean(bicic$massa)),5)
dif.media
## [1] 0.04714
## Calculo da variância dados agrupados
k <- length(freqabs)
mmeang <- rep(meang,k)
varg<-1/n*sum(freqabs*(midpoints-mmeang)^2)
## Calculo da variância dados não agrupados
print(var(bicic$massa))
## [1] 2.265128
# Calcular a diferencia absoluta entre os dois valores:
dif.var<-round(abs(varg-var(bicic$massa)),5)
dif.var
## [1] 0.09441
## Calculo do desvio padrão dados agrupados
sqrt(1/n*sum(freqabs*(midpoints-mmeang)^2))
## [1] 1.473335
## Calculo do desvio padrão dados não agrupados
print(sd(bicic$massa))
## [1] 1.505034

Comentário: ao agrupar os dados há perda de informação. Usou-se a regra de Sturges para fazer o agrupamento e verificou-se que o erro absoluto entre os valores médios é de cerca 4.714% e entre as variâncias de 9.441%.