Dica R do Dia – Gerenciando pedidos, estoques, etc

Eis um ótimo exemplo de como aprender R replicando exemplos (não fiz, mas as instruções são bem detalhadas). Mesmo que você não entenda tudo inicialmente, a repetição e a análise dos resultados acaba por fazer seu cérebro trabalhar.

A dica é esta.

p.s. é a primeira vez que vejo uma curva ROC utilizada em um exemplo aplicado. Serve de exemplo para sala de aula.

Anúncios

Momento R do Dia – Revisitando a mais longa série histórica do Brasil (na minha opinião)

Eis um antigo Momento R do Dia, revisitado.

dat<-read.table("C:/Users/cdshi_000/Documents/pila.csv",
                header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)
str(dat)
dat$date <- as.Date(as.character(dat$date))

library(ggplot2)
library(ggthemes)

p<-ggplot(dat, aes(date, pila)) +
  geom_line()+
  ggtitle("Taxa de câmbio Pila/unidade monetária brasileira")

p + theme_economist() + scale_colour_economist() +
  scale_y_continuous(position = "right")

O código acima nos dá…
pila

Como está tabulada a série? Eis o cabeçalho e a primeira linha.

date pila
1 1500-04-22 1

Segui a dica importante de transformar a data que estava em formato de fator para data mesmo.

Legal, né?

Mini-Dica R do Dia (literalmente “do Dia”, como você verá)

Sempre tive muita raiva daquele momento em que o Excel (ou mesmo o LibreOffice/OpenOffice) promete(m) converter datas em dias de semana mas diz que “se você entrou com formato texto, podem ocorrer problemas”. Em outras palavras, nunca funciona 100% (o que, numa planilha, significa que não funciona…a não ser que você não se importe com 9 + 7 = 23 e 2 + 2 = 4…).

Ontem, com meus dados no formato dd/mm/yyyy já importados no R, descobri – após alguma pesquisa – que a solução disso é bem simples (aliás,o exemplo está aqui).

Eis aí mais um caso de flagrante – e absurdamente clara – vantagem do R sobre planilhas eletrônicas. Creio que numa futura revisão da apostila do R incluirei esta dica.

Momento R do Dia – belo exercício para replicação (quebra estrutural e aquecimento global)

Este é um dos mais didáticos posts que já vi para replicação em R. Talvez as conclusões sofram com estes dados de baixa frequência, mas o exercício é didaticamente bem descrito).

Momento R do Dia – Replicando um exercício…com outra base de dados

Uma das maneiras mais simples de se aprender qualquer coisa – inclusive R – é ganhar confiança replicando um exemplo, ainda que você não tenha condições, no início, de entender todas as implicações do que está fazendo. Funciona bem com tudo na vida (ou você sabia andar de bicicleta antes de subir nela pela primeira vez?) e, claro, também no R.

Depois de replicar, claro, é legal mudar a base de dados e treinar novamente. Assim, após replicar o exemplo de cross-validation do BlogR, resolvi, como economista, fazer um exercício de, digamos, estática comparativa. Tudo o mais constante, mudei a base de dados. Mas o que vamos fazer? O que é cross-validation, ou melhor, o que é leave-one-out cross-validation? Citando o autor:

Leave-one-out is a type of cross validation whereby the following is done for each observation in the data:

  • Run model on all other observations
  • Use model to predict value for observation

This means that a model is fitted, and a predicted is made n times where n is the number of observations in your data.

Seu exemplo usa a (já) clássica base de dados do R, mtcars. Eu resolvi usar uma do pacote AER , a base OECDGrowth.

Um ponto importante é que a amostra precisa ser formatada para uso com os comandos do exemplo original. Veremos isso a seguir.

A regressão que vou replicar é uma equação de crescimento que Kleiber e Zeileis estimam na seção 4.4 de seu ótimo livro (obviamente, o Applied Econometrics with R), quando discutem resistant regressions.  Trata-se desta equação:

solow_lm <- lm(log(gdp85/gdp60) ~ log(gdp60) + log(invest) + log(popgrowth + .05), data = OECDGrowth)

Vejamos o que fiz.

Primeiro criei as variáveis já em logaritmos para evitar possíveis problemas com o uso de fórmulas dentro das funções utilizadas no exemplo (por via das dúvidas, prefiro me precaver). Eis o código.

library(AER)

data("OECDGrowth")
# vamos criar a base das variaveis usadas na solow_lm
solow_lm &lt<- lm(log(gdp85/gdp60) ~ log(gdp60) +
                    + log(invest) + log(popgrowth + .05), data = OECDGrowth)

gdp85<-OECDGrowth$gdp85
gdp60<-OECDGrowth$gdp60
invest<-OECDGrowth$invest
popgrowth<-OECDGrowth$popgrowth
lgdp85_60<-log(gdp85/gdp60)
lgdp60<-log(gdp60)
linves<-log(invest)
lpopgrowthplus005<-log(popgrowth+0.05)
data1<-data.frame(lgdp85_60,lgdp60,linvest,lpopgrowthplus005)

Pronto para a replicação? É bom ler o código original com atenção. Ao fazer isso, descobre-se facilmente que é preciso alterar o nome da base de dados original – e o da variável dependente – para não ter surpresas desagradáveis. O trecho do código abaixo pode ser comparado com o original citado lá no início deste pequeno texto.

library(pipelearner)
pl <- pipelearner(data1, lm, lgdp85_60 ~ .)
pl <- learn_cvpairs(pl, k = nrow(data1))
pl <- learn(pl)

# ou
pl <- pipelearner(data1, lm, lgdp85_60 ~ .) %>% 
  learn_cvpairs(k = nrow(data1)) %>% 
  learn()

O que está acontecendo? Não é esta a minha preocupação, neste estágio do exercício (como disse no início do texto). Mas você pode descobrir um pouco mais aqui. Basicamente, estamos usando um algoritmo de machine learning na regressão de crescimento original.

Os passos seguintes não necessitam alterações. Para não ficar tão igual, vou traduzir os elementos textuais do gráfico (ok, eu sei que é preguiça).

library(tidyverse)

# Extrai os valores observados e previstos da variavel dependente para cada observação
pl <- pl %>% 
  mutate(true = map2_dbl(test, target, ~as.data.frame(.x)[[.y]]),
         predicted = map2_dbl(fit, test, predict)) 

# Resumo dos resultados
results <- pl %>% 
  summarise(
    sse = sum((predicted - true)^2),
    sst = sum(true^2)
  ) %>% 
  mutate(r_squared = 1 - sse / sst)

results

pl %>% 
  ggplot(aes(true, predicted)) +
  geom_point(size = 2) +
  geom_abline(intercept = 0, slope = 1, linetype = 2)  +
  theme_minimal() +
  labs(x = "Valor observado", y = "Valor previsto") +
  ggtitle("Valores Observados contra previstos baseados\n em leave-one-one cross validation")

Agora, vejamos o gráfico.

crossvalidation_2017

Comparando com o gráfico do autor para seu exercício em mtcars confesso que não consigo dizer se há alguma superioridade no ajuste. Isto é bastante razoável, dado que o R² obtido por ele (0.95) não é tão distante do que o obtido aqui (0.94).

Ok, concluímos o nosso objetivo de refazer os passos do exercício original com outra base de dados. Vale ressaltar que o pipelearner tem funções mais interessantes e talvez você queira estudar outros exemplos criados pelo autor do pacote (aliás, caso você queira realmente entender o que foi feito aqui, é bom dar uma olhada lá). Aliás, após o sucesso de um exercício como este, a gente ganha confiança para, justamente, seguir em busca de maior compreensão, não é?

Até a próxima.

Dica R do Dia – Penn World Tables 9.x

O prof. Zeileis tem feito ótimos pacotes para o R. O último é o que contém os dados da última versão da Penn World Tables (ele tem também pacotes para as versões anteriores). Claro, deve-se ter muito cuidado com esta base de dados.

Ela já foi mais simples. Hoje, está longe de ter seu uso feito sem um bocado de restrições. Leia, por exemplo, a documentação que se encontra aqui.

Um exemplo bem simples de como aprender a analisar dados em R

É um blog cheio de propaganda, mas vale a pena. Didático e simples. A dica é: copie e cole os comandos e replique lendo o texto. Depois, pense no que você pode fazer com isso (ou seja, com os dados que te interessam). Pense também nas limitações do exemplo (o que poderia ser feito para minimizar seu trabalho).

R é tudo, heim? ^_^