Árvores de decisão

• Aprendizado supervisionado;
• Árvores de decisão vão permitir que operemos diretamente com atributos nominais, sem necessidade de uma transformação;
Os nós da árvore têm todos a mesma estrutura. Os nós são os atributos, e seus ramos se dividem nos valores possíveis que esses atributos assumem. No caso de valores numéricos, contínuos, é normalmente empregada uma discretização (binning). Se todas as instâncias que possuem determinado valor do atributo são da mesma classe, esse é um ramo que leva a um nó folha ou terminal, constituído dos valores do atributo classe. O processo de partição da árvore deve seguir até que tenhamos todos os dados classificados, isto é, até que tenhamos todos nós terminais.

Entropia
Os algoritmos de árvore de decisão buscam particionamentos que maximizem a decisão, tornando as árvores e os caminhos que temos que percorrer menores. Eles buscam a cada nível da árvore (partição) uma maior informação para “pureza” das partições dos dados em termos de sua classe. Os principais critérios para seleção do nó raiz e os nós seguintes e os seus respectivos algoritmos encontram:
Ganho de informação = ID3 algorithm (Claude Shannon Entropy)
Gain ratio = C4.5 algorithm
Gini index = CART algorithm
Existem particionamentos que alteram pouco a distribuição dos dados entre as classes e trazem, portanto, pouca informação adicional para a classificação, e outros que proporcionam informação maior para a decisão. O método mais comum baseia-se na entropia (Shannon), que é uma medida de quantidade de informação. A entropia de um atributo S é dada na somatória abaixo em que p é a probabilidade de cada um dos possíveis valores de S.


A entropia é empregada para o cálculo do ganho da informação (information gain) de cada atributo com relação à classificação e é o método empregado pelo algoritmo conhecido como ID3.

O ganho de informação, com base na entropia, é dado por:

O ganho de informação de um atributo S é medido pela diferença da entropia do atributo da classe final (T=Target) e da entropia ponderada de T com relação a cada valor de S.
Entropia “ponderada”:

Assim, a entropia ponderada, 0.693, E(PlayGolf | Outlook), é dada por:

E o ganho de informação de outlook pode então ser finalmente calculado como:

Fazendo o cálculo para os demais atributos, você notará que outlook é o atributo com maior ganho de informação e, portanto, deve ser escolhido como o nó raiz da árvore para o primeiro nível de particionamento dos dados. A poda, eliminação de alguns nós ou níveis, é frequentemente usada para aumentar a generalidade do modelo e reduzir o sobreajuste.
Random forests: médias de diversas árvores de decisão concorrentes. Não confunda essas partições com a partição dos nodes da árvore de decisão; essa é uma divisão pura e simples de conjuntos de dados que terão seus treinamentos em separado.

Naive Bayes
O teorema de Bayes fornece uma maneira de calcular a probabilidade posterior, P (A | B), isto é, a probabilidade de A sabendo-se que B é verdadeiro, a partir de P (A), P (B) e P (B | A).

O classificador naive bayes assume que o efeito do valor de um preditor é independente dos valores de outros preditores. Essa suposição é chamada de independência condicional de classe.
• P (A | B) é a probabilidade posterior do preditor (atributo) da classe (alvo);
• P (A) é a probabilidade anterior de classe;
• P (B | A) é a probabilidade de que a probabilidade da classe preditora seja dada;
• P (B) é a probabilidade anterior de preditor.
Algumas considerações sobre Naive-Bayes
O problema de freqüência zero: Para evitar esse problema adicione 1 à contagem para cada combinação de classe de valor de atributo (estimador de laplace).
Preditores numéricos: As variáveis numéricas precisam ser transformadas em variáveis categóricas (binning) antes de empregar as tabelas de freqüência.
Modelo gerativo: o modelo naive bayes pode classificar uma instância com dados completos como sunny, cool, high, strong, mas pode também classificar uma instância apenas com informação parcial.
Independência condicional de classe: Outros modelos também são baseados no teorema de Bayes, sem assumir essa independência. Nesse caso podemos ter inúmeros modelos conforme as diferentes dependências são assumidas. Esses modelos dão lugar às redes baysianas e, mais modernamente, aos chamados probabilistic graphical models. No modelo naive bayes todas as variáveis encontram-se no mesmo nível e não se relacionam.

É possível obter um resultado bastante melhor discretizando as variáveis numéricas. Lembre-se: para variáveis numéricas a função naiveBayes assume uma distribuição normal, o que muitas vezes não é o caso, e se você verificar a distribuição das variáveis no nosso problema verá que elas não têm uma distribuição normal.
Você pode então empregar os comandos cut( ) ou hist( ) para discretizar (binning) as variáveis numéricas e buscar melhor resultado do modelo.

Entropia, Ganho de informação e Decision trees

Ola pessoas, primeiramente já irei avisando que o post de hoje tem matemática sim, infelizmente em ML caso queiramos entender de fato os algoritmos é crucial termos a capacidade de lidar com alguns cálculos relativamente complexos. O que é chato para alguns mas eu adoro, mas não precisa se desesperar vamos usar um exemplo leve.

O exemplo de hoje foi baseado no livro Machine learning de Tom M. Mitchell claro que fiz algumas modificações para ficar mais leve e ajudar você leitor a entender melhor essas medidas e adaptá-las a seu modelo de aprendizado.

Muito bem para você que leu Introdução a decision tree percebeu que eu usei uma simples histograma para escolher os melhores atributos para os Nodes. Mas para classificarmos um conjunto de dados mais complexos essas medidas talvez não sejam as mais apropriadas.Eu usei os conceitos apresentados aqui hoje no post Decision tree em python.

Para esse exemplo vamos usar um conjunto de dados simples:

A tabela acima consiste em um conjunto de treino com 14 instâncias cada uma com 4 atributos, a primeira coluna é apenas para contar os dias e a última representa as classes de cada instância.

Vamos fazer algumas análises nesse conjunto de treino.

Entropia
entropia = \sum_{i=1}^{n}p(x_{i})log2p(x_{i})

A entropia é normalmente usada na teoria da informação para medir a pureza ou impureza de um determinado conjunto. A pergunta que ela responde é: O quanto diferente/iguais esses elementos são entre si? Claro que as aplicações desse conceito vai muito além da teoria da informação mas vamos manter as coisas humildes.

Vemos ao lado o clássico exemplo da entropia sendo aplicada a um conjunto de dados binários.

No caso, colocando no eixo das abscissas a proporção de exemplos positivos dos conjuntos.Na origem vemos que temos zero exemplos positivos o que implica em uma entropia igual a zero pois temos um conjunto todo negativo.

Quando a proporção de exemplos positivos chega a 0,5 temos o grau mais alto de entropia, pois em um conjunto binário esse é o ápice da mistura, depois ela vem diminuindo outra vez.

Pense sobre a figura acima um pouco e tente captar o conceito.

Abordaremos a fórmula de maneira bem prática o intuito é que você leitor consiga entender e reproduzi-la facilmente em código.

Primeiramente p(x) é a proporção de exemplos em relação a todo conjunto e log_{2}p(x) é o número no qual temos que elevar 2 para chegarmos ao valor em questão temos também nque é o número de classes que estamos usando.

Vamos calcular a entropia de todo o conjunto. Voltando na tabela vemos que temos 5 exemplos positivos e 9 negativos, é muito comum usar a notação [9+,5-], como a entropia é um somatório de todos os p(x)log_{2}p(x) temos que:

entropia = -(\frac{9}{14})*log_{2}(\frac{9}{14})-(\frac{5}{14})*log_{2}(\frac{5}{14})

Antes de fazermos os cálculos mostrarei uma propriedade dos logaritmos muito útil para você que ira utilizar calculadora para realizar os cálculos. Pois geralmente as bases usadas são 10:

log_{b}(a) = \frac{log_{c}(a)}{log_{c}(b)}

Vamos a um exemplo óbvio.

log_{2}(8) = \frac{log_{10}(8)}{log_{10}(2)}

Ou seja 2 elevado a 3 é igual a 4.

Uma importante observação é que quando formos calcular log_{2} de 0 iremos assumir que é 0 ,por motivos que espero esclarecer no futuro, e claro para valores igual 1 teremos também um valor igual a 0. Todo número elevado a 0 é igual a 1.

Voltando ao exemplo anterior temos:

entropia = -(\frac{9}{14})*log_{2}( \frac{9}{14})-(\frac{5}{14})*log_{2}(\frac{5}{14})=> -(0,642*-0,637)-(0,357*-1,485)= 0,939

Então essa é a entropia total do conjunto também representa a entropia de cada coluna/atributo. Esse índice será usado como parâmetro para outros índices um deles é o ganho de informação.

O ganho de informação
Uma vez medida a entropia do conjunto podemos aplicar o ganho de informação para selecionar o melhor atributo para ser o primeiro Node de uma árvore por exemplo.

Gain(S,A)=Entropia(S)- \sum_{v \in valores(A)} p(A_{v})*Entropia(A_{v})

Eu sei que parece chato a primeira vista mas não é nem um bicho de sete cabeças. Vamos interpretar com bastante calma essa fórmula.

Vamos analisar a seguinte notação primeiroGain(S,A) o S representa o conjunto todo e A representa o atributo em questão.

Lembre-se que um atributo é representado por uma coluna logo podemos fazer uma análise de todos os atributos e selecionar aquele que tem o maior ganho de informação.

Quando vemos \sum_{v \in valores(A)} estamos nos referindo a um somatório aplicado a valores de um conjunto, será feito uma iteração para cada valor desse conjunto, no caso os valores do atributo. p(A_{v}) é a proporção da frequência de v em relação ao conjunto todo e depois multiplicamos isso pela entropia do subconjunto que contem esses valores para esse atributo.

O ganho de informação nesse contexto nos permite criar um índice para medir qual o melhor atributo para ser o primeiro Node da árvore.

Vamos aos cálculos:

Consideramos que a entropia do conjunto todo vale 0.939 com isso podemos calcular o ganho de informação do primeiro atributo expectativa. Vamos antes disso criar uma tabela de frequência com os valores da primeira coluna.

tabela-2

Temos quatro colunas com a Frequência relativa de cada valor juntamente com a ocorrência de valores positivos e negativos em cada um.

Com isso podemos calcular o ganho de informação da primeira coluna e saber se ela é um bom atributo para ser a raiz da árvore.

Então teremos:

0,939-(\frac{5}{14}*entropia(sol))-(\frac{4}{14}*entropia(nublado))-(\frac{5}{14}*entropia(chuva))

Como vimos para calcular a entropia do conjunto usamos entropia = \sum_{i=1}^{n}p(x_{i})log2p(x_{i}) fazendo isso para cada subconjunto de Expectativa teremos:

0,939-0,347-0-0,347 = 0,245

Logo:

Gain(S,Expectativa) = 0,245

Fazendo o mesmo processo nos outros conjuntos:

Gain(S,Humidade) = 0,151

Gain(S,Vento) = 0,048

Gain(S,Temperatura) = 0,029

A conclusão que tiramos é que o melhor atributo seria Expectativa para ser a raiz da árvore.

Vamos apenas para exemplificar a situação começar a construir a árvore de duas maneiras diferentes.

A primeira fazendo o Atributo como Node e os Ramos como seus valores ficaria dessa forma:

arvore-1

Usamos o primeiro Atributo para ser a raiz da árvore e cada ramo representa um conjunto de instâncias que por sua vez devem ser reavaliadas para formar novos ramos.

Com exceção do Ramo nublado pois segundo o conjunto de treino quando Expectativa = nublado é certo que é um exemplo positivo.

Poderíamos também fazer uma árvore binária, nesse casso procuraríamos dentro do Atributo com maior ganho de informação o valor com a menor entropia.

tabela-2

Para nossa sorte fica claro que quando Expectativa=Nublado a classe da instância é certamente positiva logo podemos usar este valor para ser o primeiro Node da árvore.

arvore-2

Repare que quando a resposta é não ainda tem várias instâncias a serem classificadas, caso se interesse em continuar fazendo o processo é o mesmo basta supor que esse node é uma nova árvore e continuar o processo de medir o ganho de informação selecionar o melhor atributo no caso do primeiro exemplo ou selecionar ou o melhor atributo e valor no segundo caso.

Muito bem queridos leitores para aqueles que tiveram a paciência de chegar ate aqui muito obrigado primeiramente por ler esse post isso é importante para mim. E que tenha sido útil para você continuar desenvolvendo seus skills nessa área fascinante.

E qualquer duvida,feedback,critica ou erro de calculo não se acanhe deixe nos comentários.

Como instalar Python e Jupyter Notebook usando Anaconda

Como instalar Python e Jupyter Notebook usando Anaconda
Aprenda a utilizar esse pacote de arquivos que contém os itens essenciais de todo Data Scientist

O Anaconda é uma iniciativa que tem como objetivo agregar todas as ferramentas para análise de dados em um único arquivo. Resumidamente, é um arquivo que irá instalar em seu computador todas as bibliotecas e recursos necessários para você começar seus projetos de Data Science e Machine Learning, como o Python em si, Jupyter Notebook, a IDE Spyder, além de famosas bibliotecas, como NumPy, Pandas, Scikit-learn, etc. Se interessou? Aprenda abaixo como baixar e instalar o Anaconda.

Por que usar o Anaconda?
Praticidade. Essa é a resposta. Imagine que, para começar a utilizar as ferramentas para realizar seus projetos e estudos de Data Science você precisasse baixar e instalar o Python e cada uma de suas bibliotecas. A menos que você esteja procurando configurar seu computador especificamente, ou instalar as bibliotecas a medida que progride, utilizar o Anaconda é a forma mais rápida e eficaz para dar o pontapé inicial.

Baixando e instalando o Anaconda

1.Para realizar o download do Anaconda, inicialmente você deve acessar o site oficial da iniciativa. ou neste Site

2. Lá, selecione a versão do seu Sistema Operacional. Tem até pra MacOS. Em nosso exemplo utilizaremos Windows.

3. Feito isso, lhe será mostrado as versões disponíveis do Python para baixar, além das arquiteturas 32 e 64 bits. Eu gosto da versão 3.6 do Python, então, eu preferi baixar esse.

4. Ao clicar sobre o botão, o arquivo será baixado. Concluído o processo, realize a instalação do Anaconda.

5. A instalação é simples, resume-se ao famoso “Next, Next, Next…”. Um ponto interessante a se considerar é a tela acima, onde você decide se instalará os pacotes e arquivos para todos os usuários. Será necessário possuir permissões administrativas para instalar para todo mundo, caso queira. Ao decidir, prossiga com a instalação.

6. Ao final do processo, marque a caixa em que pergunta se você deseja adicionar o Anaconda ao Path do seu Sistema Operacional. Isso será muito útil quando você quiser instalar outras bibliotecas facilmente.

7. Ao clicar em “Install”, Anaconda será instalado em seu computador. Quando terminar, dê aquela reiniciada na máquina pra ter certeza que tudo está certinho. Parabéns, você é o mais novo usuário do Anaconda.

Tutorial de ggplot2

O pacote ggplot2 foi desenvolvido pelo Dr. Hadley Wickham (que desenvolveu diversos outros pacotes importantes para R como o (d)plyr por exemplo. Este pacote implementa uma nova maneira de criar gráficos a partir dos dados, trazendo o conceito de camadas (layers) para a sintaxe do R. Com esse novo conceito, surge também a necessidade de se organizar os dados de uma maneira que facilite a utilização da nova sintaxe. Para isso, os outros pacotes (como os já mencionados (d)plyr) foram desenvolvidos pelo Dr. Wickham de maneira a tornar a manipulação de dados mais ágil, intuitiva e já adequada para o uso conjunto com ggplot2.

Instalação
O pacote deve ser instalado como qualquer outro pacote no R:

install.packages(“ggplot2”)
É possível também instalar as versões mais recentes do pacote (mas que podem apresentar instabilidades ou serem incompletas) através da função install_github do pacote devtools. Este tipo de instalação usa os arquivos disponíveis no repositório público do ggplot2 no github.

install.packages(“devtools”)
library(devtools)
install_github(“hadley/ggplot2”)
Após a instalação, carregue o pacote para utilização.

library(ggplot2)
Como organizar os dados para o ggplot2
É bastante comum usuários enfrentarem problemas nas primeiras vezes que usam o ggplot2 pois ao organizarem os dados para serem importados no R, procuram o fazer da maneira mais sintética possivel, agrupando variáveis por exemplo. A tabela a seguir é um exemplo de como NÃO se deve organizar os dados para serem usados com o ggplot2 (para nenhuma situação na verdade).

## Tratamento Valor
## 1 Tratamento A – 2h 10.821762
## 2 Tratamento A – 4h 10.306185
## 3 Tratamento A – 8h 10.608959
## 4 Tratamento A – 16h 9.023300
## 5 Tratamento A – 24h 9.098674
## 6 Tratamento B – 2h 10.875956
## 7 Tratamento B – 4h 9.560360
## 8 Tratamento B – 8h 10.117291
## 9 Tratamento B – 16h 10.575051
## 10 Tratamento B – 24h 10.787699
Os objetos de entrada nas funções do ggplot2 são da classe data.frame. No entanto, organizar o data.frame de maneira a otimizar o trabalho poupa bastante tempo e dor de cabeça. O data.frame a ser usado em um trabalho deve idealmente conter cada uma das variáveis em colunas separadas, e cada observação em linhas separadas. Assim, o exemplo anterior deveria ser idealmente organizado da seguinte forma:

## Valor Tempo Tratamento
## 1 10.821762 2 Tratamento A
## 2 10.306185 4 Tratamento A
## 3 10.608959 8 Tratamento A
## 4 9.023300 16 Tratamento A
## 5 9.098674 24 Tratamento A
## 6 10.875956 2 Tratamento B
## 7 9.560360 4 Tratamento B
## 8 10.117291 8 Tratamento B
## 9 10.575051 16 Tratamento B
## 10 10.787699 24 Tratamento B
Alguns pacotes foram desenvolvidos com o propósito de facilitar a organização dos dados de maneira limpa e otimizada. Dentre esses pacotes, encontram-se (d)plyr, tidyr, magrittr dentre outros. Para mais informações sobre como (e porquê) organizar seus dados dessa forma, leia este artigo do Dr. Wickham.

Estrutura básica de um gráfico
Como dito na introdução, um gráfico feito no ggplot2 consiste de diversas camadas que são adicionadas a uma estrutura básica. Essa estrutura básica é criada usando as funções ggplot ou qplot. Essas funções possuem dois componentes essenciais: data, que como o nome diz recebe o data.frame a ser utilizado para a construção do gráfico, e mapping, que é o argumento que controla a estética do gráfico, ou seja, que controla quais variáveis serão plotadas nos eixos x e y, dentre outros detalhes que serão abordados posteriormente. Para o mapeamento dos dados, usaremos a função aes, na qual indicaremos qual variável deve ser posicionada em cada eixo, além de outros argumentos relativos a cor, tamanho, etc.

Diogo Melo, do Laboratório de Evolução de Mamíferos do IB-USP sintetizou uma regra geral para gráficos no ggplot2:

ggplot(data_frame_entrada, aes(x = coluna_eixo_x,
y = coluna_eixo_y,
group = coluna_agrupadora,
color = coluna_das_cores))
+ geom_tipo_do_grafico(opções que não dependem dos dados,
aes(opções que dependem))
Para exemplificar a construção de um gráfico, usaremos o conjunto de dados do próprio pacote ggplot2 chamado diamonds.

data(diamonds)
head(diamonds)
## carat cut color clarity depth table price x y z
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
## 4 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
Gráficos unidimensionais (boxplots e histogramas)
Um bom modo de iniciar qualquer análise é fazendo uma análise exploratória dos dados. Para isso, alguns tipos específicos de gráficos como boxplots ou histogramas são maneiras simples de visualizar a estrutura básica dos dados. Estes tipos de gráfico são ditos unidimensionais, pois representam apenas uma variável. Neste tópico, veremos como criar esses dois gráficos de maneira simples (complementos serão adicionados mais para frente no tutorial).

O primeiro passo para criarmos um gráfico é então gerar o objeto da classe ggplot. DICA: armazene as camadas básicas do seu gráfico em um objeto, pois isso facilita a adição de novas camadas sem a necessidade de repetir o código inteiro.

g1 <- ggplot(data=diamonds,aes(x=1,y=price)) No exemplo acima, indicamos que a variável price deve ser atribuída ao eixo y, e o eixo x recebe o valor 1 apenas para posicionar o gráfico. Além disso o código que acabamos de rodar serve apenas para criar um objeto da classe ggplot, porém ele ainda não produz nenhum gráfico. Ao chamarmos o objeto g1: ## Error: No layers in plot Isso se deve ao fato de que nenhuma camada de gráfico foi adicionada, ou seja, não especificamos qual o tipo de gráfico desejamos produzir. A maioria das camadas iniciais podem ser criadas usando as funções da família geom_. No primeiro exemplo, vamos criar um boxplot para termos uma ideia de valores mínimos, máximos, média e posição dos quartis. g1 + geom_boxplot() Note a sintaxe bastante intuitiva que usa o símbolo “+” para adicionar camadas. Isso torna o ggplot2 um pacote bastante prático depois de pegar o jeito para criar gráficos informativos, bonitos e prontos para publicação. Para criarmos um histograma simples, é igualmente fácil: ggplot(diamonds,aes(x=price)) + geom_histogram() ## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this. Observe no entanto que para o histograma a variável de interesse está no eixo x, já que o eixo y contém a contagem de valores em cada intervalo. Os gráficos básicos podem não parecer tão bonitos assim à primeira vista; vamos aprender em seções posteriores como modificar a estética dos gráficos (cores, tamanho, bordas, plano de fundo, etc.). Gráficos bidimensionais (gráficos de dispersão, modelos lineares, etc.) Gráficos de dispersão Em grande parte dos estudos em ecologia buscamos analisar como duas ou mais variáveis se comportam umas em relação às outras. Para isso, um bom ponto de partida é construir gráficos de dispersão (scatterplots). No exemplo a seguir construiremos um gráfico de dispersão entre as variáveis carat e price. g2 <- ggplot(diamonds,aes(x=carat,y=price)) g2 + geom_point() Note que no exemplo acima, estamos indicando para a função ggplot que as camadas que forem adicionadas de agora em diante devem conter os valores de carat no eixo x e de price no eixo y. Isso pode ser modificado posteriormente (como nos casos onde você quer por exemplo acrescentar uma outra variável no eixo y), e será exemplificado mais adiante. No entanto, a maioria (se não todas) das funções da família geom_ também possuem os argumentos básicos data e mapping. Sendo assim, uma outra forma de criar o mesmo gráfico é: ggplot() + geom_point(data=diamonds,mapping=aes(x=carat,y=price)) Caso a cor padrão seja feia não seja adequada, podemos indicar para o gráfico qual cor queremos usar para os pontos. Como cor é um dos componentes essenciais da parte estética de um gráfico, essa especificação deve entrar na função aes. g2 + geom_point(mapping=aes(colour="red")) Ao analisarmos o conteúdo do objeto diamonds notamos que os valores de carat e price são divididos por classe de cut, color e clarity. Assim, podemos por exemplo representar o mesmo conjunto de dados separados por classe de clarity por exemplo. Se seu objeto contendo os dados estiver mal organizado, você levaria um tempo razoável para adicionar uma cada para cada classe cada uma com uma cor diferente. Porém, como já aprendemos a organizar nossos dados de maneira idea, podemos facilmente usar a variável clarity para atribuir diferentes cores que representarão cada uma das classes da seguinte forma: g2 + geom_point(mapping=aes(colour=clarity)) Essa separação em classes de clarity pode ser feita em outros tipos de gráfico também (os outliers foram removidos para fins de visualização): ggplot(data=diamonds, aes(x=clarity, y=price, group=interaction(clarity,cut), color=clarity)) + geom_boxplot(outlier.shape=NA) Adicionando linhas de tendência Os gráficos de dispersão que construímos até agora indicam que existe uma relação positiva entre quilates e preço. Nesse caso, podemos ajustar um modelo linear que indique como se dá essa correlação. Para isso, o pacote ggplot2 possui funções específicas para algumas estatísticas comumente usadas. Aqui, usaremos a função stat_smooth para isso. g2 + geom_point(aes(color=clarity)) + geom_smooth(method = "lm", se=FALSE, aes(color="red")) A linha de regressão adicionada no gráfico anterior corresponde à correlação entre carat e price indepentende da classe de clarity. Porém, dependendo do caso pode ser mais interessante criar uma reta de correlação para cada classe de clarity. Fazemos isso da seguinte forma (adicionando também intervalos de confiança da média): g3 <- g2 + geom_point(aes(color=clarity)) + geom_smooth(method = "lm", se=TRUE, aes(color=clarity)) g3 Personalizando os gráficos Alterar rótulos dos eixos g3 + xlab("Quilates") + ylab("Preco") Alterar limites dos eixos g3 + xlim(0,10) + ylim(0,30000) Alterar tamanho e direção das fontes dos eixos g3 + theme(axis.text.x = element_text(angle=45,vjust=1,size=30)) Inserir anotações g3 + xlim(0,10) + ylim(0,30000) + annotate("text",x=9.5,y=30000,label= "Painel a",color="red") g3 + xlim(0,10) + ylim(0,30000) + annotate("rect",xmin=3, xmax=4, ymin=10000, ymax=20000, alpha=.2, color="blue",fill="green") g3 + xlim(0,10) + ylim(0,30000) + annotate("segment", x=3, xend=4, y=30000, yend=20000, color="orange", arrow=arrow(length=unit(1,"cm"))) Alterar paleta de cores g2 + geom_point(aes(color=clarity)) + scale_color_brewer(type="seq",palette="Set3") Separar gráficos em painéis g2 + geom_point(aes(color=clarity)) + facet_grid(. ~ cut) g2 + geom_point(aes(color=clarity)) + facet_grid(cut ~ .) g2 + geom_point(aes(color=clarity)) + facet_grid(cut ~ clarity) Alterar posição, título e tamanho da legenda g3 + xlim(0,10) + ylim(0,30000) + theme(legend.position = "none") g3 + xlim(0,10) + ylim(0,30000) + theme(legend.position = "bottom") g3 + xlim(0,10) + ylim(0,30000) + theme(legend.position = "bottom", legend.title = element_blank()) g3 + xlim(0,10) + ylim(0,30000) + theme(legend.position = c(.8,.8)) g3 + xlim(0,10) + ylim(0,30000) + theme(legend.position = c(.8,.2)) Alterar temas g3 + theme_bw() g3 + theme(panel.grid.major = element_line(colour = "red", linetype = "dotted"), panel.background = element_rect(fill = "green")) Principais tipos de gráfico Tipo de gráfico Função Histograma geom_histogram Densidade geom_density Boxplot geom_boxplot Barras geom_bar Polígonos geom_polygon Abline geom_abline Texto geom_text

Como fazer uma análise de regressão linear simples no R

null

A análise de regressão é normalmente utilizada quando se deseja obter um modelo preditivo do efeito de uma variável sobre outra sendo que essas variáveis devem ser contínuas. Na Regressão Linear Simples têm-se apenas duas variáveis, uma variável preditora (eixo X) e outra resposta (eixo y).

Existem quatro pressupostos básicos para análises de regressão:

LINEARIDADE (o modelo linear descreve corretamente a relação funcional entre X e Y)
Se esse pressuposto for violado a estimativa do erro aumentará, já que os valores observados não se aproximarão dos valores preditos (local onde passará a reta). Pressuposto fundamental já que essa regressão é um modelo linear.
VARIÁVEL PREDITORA MEDIDA SEM ERROS
Garante que a variação observada na análise é devido apenas à sua associação com a variável resposta Esse pressuposto tem sido ignorado devido a eficiência da solução dos mínimos quadrados.

NORMALIDADE
Normalidade dos resíduos é esperada para que não existam tendências e que a estatística F funcione de forma correta.

VARIÂNCIAS HOMOGÊNEAS
As variâncias dentro de cada grupo é igual (ou pelo menos aproximadamente) àquela dentro de todos os grupos. Desta forma, cada tratamento contribui de forma igual para a soma dos quadrados.

Se os pressupostos forem atendidos fica mais fácil afirma que os resultados da análise são devido aos efeitos testados. Além disso, a confiabilidade do teste aumenta, já que se terá certeza que não há tendências nos resultados.

Segue um scrip para a realização da regressão linear simples no R (em verde são os comentários):

#Primeiramente, vamos criar dois conjuntos de dados (“x” e “y”) apenas para realizar o exemplo
x< -c(1,2,3,4,5,6,7,8,9,10) y<-c(2,5,8,5,3,9,10, 12, 9, 10)

#A função para regressão é “lm” e não requer pacote estatístico (variavel resposta ~ variável preditora)
resmodelo<-lm(x~y) #Sumário dos resultados do modelo summary(resmodelo)

#Teste para NORMALIDADE (valores de p > 0,05 indicam dados normais)
shapiro.test(rstudent(resmodelo)) ##teste de shapiro wilk (normalidade)

# Análise visual para homogeneidade dos resíduos
(visualmente eles devem se distribuir igualmente #abaixo e acima da linha)
plot(rstudent(resmodelo) ~ fitted(resmodelo), pch = 19)
abline(h = 0, lty = 2)

#Visualização gráfica lty é o tipo da linha 1: linha contínua; 2: linha descontínua
plot(x~y)
abline(resmodelo,lty=2)

Ao digitar todas essas linhas de comando, o resultado final deverá ser um R2 ajustado = 0,55. Para montar a equação é necessário pegar o valor do intercepto e da inclinação: y = 0,3586 + 0,7043x. Além disso, por meio do teste de Shapiro Wilk (W) é possível atestar a normalidade dos dados (p = 0,33) e através da inspeção visual dos resíduos verifica-se que os mesmos distribuem-se de forma igual.

Um dos principais resultados da regressão é o R2, que é o coeficiente de determinação. Esse valor varia de -1 a 1 (repostas positivas e negativas) e indica o grau de associação entre as duas variáveis testadas. Já o parâmetro da inclinação demonstra o quanto a variável resposta varia em função da preditora. Desta forma, uma inclinação igual a zero indicaria a falta de associação entre elas.

Execute R-online

Ter acesso ao R online pode ser muito útil para os estudantes que estão em fase de aprendizado do R, facilita o uso prático, especialmente naquela hora em que você quer mostrar algo para um amigo que não conhece o R, tirar um dúvida sobre um comando, usá-lo num equipamento que não o tenha instalado, ou ainda está no celular e quer fazer uso rápido do R. Já se viu nesta situação?

Até mesmo para o professor em sala de aula, que deseja que os alunos experimentem algum comando simples do R, especialmente em aulas fora de um laboratório. Muitas vezes o professor quer mostrar uma funcionalidade do R, algo simples como fazer um histograma, calcular probabilidades de uma distribuição normal, gerar números aleatórios, fazer um sorteio com ou sem reposição, enfim, tarefas simples para serem feitas no R em um segundo!

Temos pesquisado como ter acesso ao R online, em setembro de 2015 publicamos sobre o R-Fiddle, porém outras alternativas parecem ser igualmente interessantes, como é o caso do execute_r_online. Está inserido numa plataforma de desenvolvimento integrado (IDE) com uma variedade enorme de ferramentas.

Listamos a seguir um conjunto de opções sobre o R online, incluindo estas descritas acima e outras que encontramos:

1.http://www.r-fiddle.org/

2.https://www.tutorialspoint.com/execute_r_online.php

3.https://www.jdoodle.com/execute-r-online

4.https://rweb.stat.umn.edu/Rweb/Rweb.general.html

5.https://rdrr.io/snippets

6.rextester.com/l/r_online_compiler

7.https://rnotebook.io/

Já utilizou alguma destas? Conhece outras? Compartilhe conosco sua opinião!

Autoria: João Bispo

BI & Big Data: Por um negócio fora da crise

Ninguém tem tempo hábil para esperar informações e dados, tendo essas duas coisas em mãos você consegue ter uma tomada de decisão rápida é ajudar seu time de gestão estratégica.
O Bi e o Big Data traz inteligência de ponta e para alavancar sua cartela de clientes o momento e apropriado a aumentar sua cartela de clientes usando novas tecnologias.
A Diferenca em
BI é o Dataware house fui estruturado para tomada de decisão, é estruturado para consulta.
No Big data se trata de um conceito voltado ao grande volume de dados e estrutura dados não estruturados, exemplo click viewers.

Big Data

Big Data
O que é e qual sua importância?

Big data é um termo que descreve o grande volume de dados — tanto estruturados quanto não-estruturados — que impactam as empresas diariamente. Mas não é a quantidade de dados disponíveis que importa; é o que as organizações fazem com eles. Big data pode ser analisado para obter insights que levam a decisões melhores e ações estratégicas de negócio.

História e considerações atuais de big data
Embora o termo “big data” seja relativamente novo, o ato de coletar e armazenar grandes quantidades de informações para análises eventuais é muito antiga. O conceito ganhou força no começo dos anos 2000, quando o analista Doug Laney articulou a definição [atualmente mainstream] de big data em três Vs:
Volume. Organizações coletam dados de fontes variadas, incluindo transações financeiras, redes sociais e informações de sensores ou dados transmitidos de máquina para máquina. No passado, armazená-los teria sido um problema — mas novas tecnologias (como o Hadoop) aliviaram esse fardo.
Velocidade. Os dados são transmitidos numa velocidade sem precedentes e devem ser tratados em tempo hábil. Etiquetas RFID, sensores e medições inteligentes estão impulsionando a necessidade de lidar com torrentes de dados praticamente em tempo real.
Variedade. Dados são gerados em inúmeros formatos — desde estruturados (numéricos, em databases tradicionais) a não-estruturados (documentos de texto, e-mail, vídeo, áudio, cotações da bolsa e transações financeiras).
No SAS, nós consideramos duas dimensões adicionais ao falar de big data:
Variabilidade. Além das crescentes velocidade e variedade dos dados, seus fluxos podem ser altamente inconsistentes com picos periódicos. Qual a última tendência nas redes sociais? Todos os dias, picos de dados sazonais ou gerados por eventos particulares podem ser difíceis de gerenciar, ainda mais com dados não-estruturados.
Complexidade. Os dados de hoje vêm de múltiplas fontes, o que torna difícil ligá-los, combiná-los, limpá-los e transformá-los entre sistemas. No entanto, é necessário conectar e correlacionar relações, hierarquias e ligações múltiplas, ou você pode rapidamente perder o controle sobre seus dados.

O grande potencial do big data
A quantidade de dados criados e armazenados globalmente é quase inimaginável e apenas continua a crescer. Isso significa que há ainda mais potencial para extrair insights importantes dessas informações — embora apenas uma pequena porcentagem de dados seja realmente analisada. O que isso significa para as empresas? Como elas podem fazer um uso melhor dessas informações brutas que fluem para dentro de suas paredes todos os dias?