library(htmltools)
library(knitr)
library(ggplot2)
library(GGally)
library(dplyr)
library(reshape2)

Inicia-se a análise da base de dados Iris com a função str(), dá-se preferência a esta função pelo facto de agrupar um conjunto de informação útil nesta fase inicial. De notar que que seria equivalente a usar as funções class(), names, dim(), typeof() e head. Porém, em vez de “chamar” multiplas funções consegue-se a mesma informação somente com uma.

str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

Verifica-se 150 observações (linhas) e 5 variàveis (colunas) em que uma das variáveis é relativamente três espécies de flores e as restantes quatro variáveis as caracteristicas das flores. Procede-se com a função summary() para obter algumas estatisticas descritivas.

summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 

Por forma a que os valores do quadro acima sejam mais perceptivel iremos dotar-nos de ferramentas visuais para explorar os dados em estudo.Inicia-se com caixas de bigodes.

boxplot(iris[, 1:4], col="gray")

ggplot(iris) +
  geom_point(aes(x = Sepal.Length, y = Sepal.Width, col = Species, shape = Species))

ggplot(iris) +
  geom_point(aes(x = Petal.Length, y = Petal.Width, col = Species, shape = Species))

Com o uso de cores torna-se possivel distinguir as espécies perante petal e sepal. Nesta caso obtêm-se uma percepção de que o comprimento e largura da petal é bastante distinta entre espécies ao contrário do que sucede no primeiro gráfico relativo a sépala. A par da espécie setosa que se encontra com os dados localizados no lado superior esquerdo do gráfico, as outras duas espécies encontra-se com valores bastante dispersos no gráfico.O uso de caixas de bigodes poderá ajudar-nos a entender a dispersão de cada carecteristica.

Uma outra abordagem talvez nos venha a ser mais útil, iremos usar a função ggpairs que é de leitura fácil e complementaridade superior à função pairs. Consegue-se desta forma obter correlações, diferentes combinações das caracteristicas e graficos de densidades.

GGally::ggpairs(iris,columns = 1:4, aes(color = Species, alpha = 0.5))

Ou em alternativa, sem os valores de correlações e mais combinações de caracteristicas temos:

GGally::ggpairs(iris, columns = 1:4, aes(color = Species, alpha = 0.5),
        upper = list(continuous = "points"))

A espécie setosa é claramente das três espécies a que tem caracteristicas bem vincadas e proprias, sendo que os dados mostram sucessivamente como os valores se destacam.

Uma forma útil e rápida de quando se está perante dados com dimensões elavads é condensar o nosso data set e efetuar médias, neste caso das caracteristicas das espécies, passando assim a ter um data frame com 12 linhas e 3 colunas. Deve-se ter em conta que ao executar tal passo perde-se alguma visibilidade dos dados como um todo. A média por si só pode conduzir a elações por vezes distorcidas. Esta condensação pretende somente dar um vislumbre de como os dados se posicionam e como um analista pode de forma ágil visualizar um data frame extenso em algo mais compacto.

medias <- iris %>% 
  dplyr::group_by(Species) %>% 
  dplyr::summarise(m_sepal_leng = mean(Sepal.Length),
                   m_sepal_wid = mean(Sepal.Width),
                   m_petal_leng = mean(Petal.Length),
                   m_petal_wid = mean(Petal.Width))

medias <- medias %>% 
  reshape2::melt(id.vars = "Species")
str(medias)
## 'data.frame':    12 obs. of  3 variables:
##  $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 2 3 1 2 3 1 2 3 1 ...
##  $ variable: Factor w/ 4 levels "m_sepal_leng",..: 1 1 1 2 2 2 3 3 3 4 ...
##  $ value   : num  5.01 5.94 6.59 3.43 2.77 ...
medias %>% 
  ggplot() +
  geom_point(aes(x = variable, y = value))

NO gráfico acima temos as médias das quatro caracteristicas das três espécies. Iremos usar uma visualização mais perceptivel e de fácil leitura.

medias %>% 
  ggplot() +
  geom_point(aes(x = variable, y = value)) +
  facet_wrap(~Species) +
  theme(axis.text.x = element_text(angle = 90))

Torna-se desta forma evidente do que se está a analisar ao contrário do que sucedia acima.

Um outra forma de visualizar este novo data frame é a de introduzir cores com formas.

medias %>% 
  ggplot() +
  geom_point(aes(x = Species, y = value, shape = variable, col = variable), 
             size = 4) +
  geom_smooth(aes(x = Species, y = value))

Existe uma amplitude vasta da forma como abordar esta base dados em termos de visualização. Tudo depende de qual a pergunta que se pretende responder e qual o objetivo do estudo em questão.