Skip to content

icaro87/preco_combustivel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Combustível

Uma análise estatística dos preços no Brasil

Icaro Pinheiro, 09/05/2022

Objetivo

Este documento tem por objetivo principal mostrar alguns dos recursos mais importante da linguagem R, além de apresentar uma análise de dados obtendo informações via web scraping ou coleta de dados web e aplicando técnicas estatísticas.

Macro Etapas

1.Captura de dados

2.Limpeza e transformação

3.Análise descritiva

4.Análise de correlação

5.Conclusão

Vamos carregar os pacotes necessários para esta análise.

image

Sobre os dados

Escolhemos o site: https://www.tabelasdefrete.com.br. Estamos interessados em realizar uma análise de preço dos combustíveis e aqui encontraremos os dados dispostos mensalmente de julho de 2001 a dezembro de 2015.

Extração dados

Nesta seção, usaremos as funções do primeiro pacote carregado rvest. Através da função read_html() vamos fazer a leitura da homepage.

image

Com as funções html_nodes() e html_table() conseguimos chegar num objeto do tipo lista e a partir dele chegamos na tabela de interesse.

image

Limpeza e transformação dos dados

Como podemos perceber, precisamos realizar algumas alterações no conjunto de dados, pois há muito ruido no dataset. Primeiro, renomearemos as varíaveis com a função rename() do pacote dplyr e em seguida excluiremos as linhas do cabeçalho que não usaremos.

image

Os números estão com separador casas decimais a vírgula, O R tem como separador o ponto. Para isso precisamos fazer uma substituição de vírgula para ponto. A função str_replace_all() do pacote stringr irá nos ajudar.

image

A função glimpse() do pacote dplyr nos ajuda conhecer melhor no nosso conjunto de dados.

image

Então temos 173 registros e 11 variáveis. Porém todas variáveis estão como tipo carácter e temos campos que são de outros tipos (data, numérico, etc.). Vamos promover essas alterações.

No pacote dplyr temos uma funções select(), separate() e mutate(), usaremos-as para selecionar as variáveis de interesse do estudo, quebrar o campo “mês” em dois novos e transformar o preço em tipo numérico, respectivamente.

image

Agora que temos o campo mês quebrado em mês e ano, vamos criar uma variável do tipo data, pois irá nos facilitar o plot gráfico dos dados e melhorar a experíencia de análise.

Para isso, vamos construir um novo conjunto de dados com a função tibble() do pacote tidyverse.

image

A função left_join() levará o número do mês para o nosso conjunto.

image

Criando a variável data no formato dia/mês/ano.

image

Precisamos alterar a nova variável para o tipo data conforme a localizada do SO instalado. Para isso, a função Sys.getlocale() retorna a localização.

image

Após as limpezas e transformações realizadas, a última ação necessária para darmos continuidade ao estudo é análise de dados faltantes ou missings. A função PlotMiss() do pacote DescTools retorna um plot da quantidade de dados faltantes por variável e o percentual em relação ao todo.

image

O gráfico retornou 5 registros com dados faltantes na variável Gás Natural. A nossa tratativa em relação a este caso será substituir esses valores por 50% da média da variável, pois sabemos que são dados distribuição ao longo do tempo e assim manteremos um arranjo coerente. Portanto, usaremos a função replace_na() do pacote dplyr para executar essa ação.

image

Análise descritiva

Nossa análise descritiva vai começar com um resumo completo de cada variáveil. O objetivo é extrair alguns insights dessa etapa importante de análise exploratória. A função escolhida para isso é Desc() do pacote DescTools.

image

image

image

image

image

Esta função é extremamente útil e completa, pois ela resumi o conjunto e apresenta todas as variáveis com gráficos e estatísticas.

Falando do conjunto, temos 173 registros e 4 variáveis. Ocultamos o campo data, para focarmos apenas no preço dos combustíveis. Caso o dataset apresente dados faltantes, o output da função informa quantidade e percentual do todo.

Para cada variável numérica temos informações tais como: os 5 maiores/menores valores, média, mediana, percentis, assimetria, coeficiente de variação, etc.

Temos também os gráficos que apresentam a distribuição dos preços de cada combustível. Neles já podemos observar que a gasolina e o diesel apresentam valores discrepantes, mas todos tem uma curva cuja média e mediana não se distanciam muito, isso é um indicativo de assimetria.

Podemos resumir as medidas estatísticas em um tibble e construir um quadro de comparação. Com os pacotes knitr e kableExtra vamos formatar o quadro e assim podemos analisar o comportamento dos preços.

image

Nesta tabela podemos destacar que todos os combustíveis tem médias e medianas bem próximas, GNV tem a menor variação de preços ao longo do período. A gasolina é o combustível mais caro. Quanto ao coeficiente de variação, todos estão entre 0,15 e 0,30, isso significa média dispersão dos preços. Também apresentaram coeficiente de assimetria abaixo de 0,15, portanto podemos considerar distribuições praticamente simétricas. O coeficiente de curtose classifica a distribuição em relação a grau de achatamento da curva e no nosso estudo, todos tiveram valores inferiores a 0,263, portanto as distribuições são leptocúrticas.

Observação: conhecer as características das distribuições auxilia na tomada de decisão de escolha do parâmetro central que melhor representa a variável. No nosso caso as médias estão próximas das medianas, isso é uma evidência que a média é um bom estimador, pois sabemos que sofrem bastante com a presença de outliers (valores discrepantes).

Partiremos para uma análise gráfica dos dados, primeiramente olhando para a série histórica dos preços por cada um dos combustíveis. Iremos fazer uso da função ggplot() do pacote ggplot2, explorando seus recursos de formatação do gráfico.

image

image

image

image

Podemos destacar que todas as séries são não-estacionárias, pois há uma forte tendência de crescimento ao longo do tempo.

Análise de correlação

Uma boa análise estatística que podemos fazer com os dados é verificar o quanto o preço de um combustível está correlacionado a outro. Será que o Diesel tem “influência” no preço do GNV?

Sabemos que o transporte dos combustíveis no Brasil é feito por caminhões, isso já basta para dizermos que o preço do Etanol, por exemplo, leva em consideração os custos de transporte (Diesel). Mas o quanto é correlacionado? Podemos medir isso? Sim, podemos!

Através da função ggpairs() do pacote GGally podemos construir uma matriz de correlação. Ela é bacana, pois informa além do coeficiente de correlação entre duas variáveis, se o mesmo tem significância estatística. O que isso quer dizer? Bom, após calcularmos o coeficiente, podemos realizar um teste de hipótese em que colocamos como hipótese a ser testada, se o coeficiente é igual a zero e portanto indicando que as variáveis não são correlacionadas.

image

No diagrama resultante, obtivemos os seguintes pontos observáveis: todos os combustíveis apresentaram o coeficiente de correlação acima de 0,8, logo podemos afirmar que são altamente correlacionados. Além disso o R acrescenta o resultado do teste de hipótese. Os asteriscos “***” ao lado do coeficiente, informa que o teste apresentou significância estatística, o mesmo dizer que o p-valor foi abaixo 0,0001. Portanto, podemos afirmar que há evidência de que as variáveis são correlacionadas, ou seja, que podemos rejeitar a hipótese nula (H0: pho = 0). O diagrama apresenta também gráficos de dispersão e histograma das variáveis.

Regressão Linear

Por meio dos gráficos de dispersão acima, observamos uma relação linear entre as variáveis, o que significa que uma equação de reta pode descrever os dados e auxiliar na interpretação da relação entre elas. Nosso interesse aqui é saber o quanto o preço do Diesel impacta o preço da Gasolina.

A regressão linear é uma técnica estatística que encontra uma equação que minimize os erros através do método dos mínimos quadrados, utilizamos para descrever a relação linear entre duas variáveis, além de realizar previsões com base na amostra coletada.

Uma análise de regressão requer uma verificação dos pressupostos para que tenhamos resultados não viesados.

1.Relação linear entre as variáveis.

2.Normalidade: os resíduos(erros) seguem uma distribuição normal?

3.Homocedasticidade ou variância constante.

4.Ausência de outliers.

5.Independência dos resíduos.

Primeiramente vamos construir o modelo atráves da função lm() do pacote stats, informando que queremos como variável preditora ou explicativa (X = diesel) e variável resposta (Y = gasolina). O modelo proposto tem a forma: y^i = β0 + β1xi, para i variando de 1 até n (tamanho da amostra).

image

Para o primeiro ponto, vimos nos gráficos de dispersão que há uma relação linear entre as variáveis (gasolina e diesel). O modelo proposto gera resíduos, que são os erros de estimação da reta, que precisamos analisá-los para validar ou não a equação construída. Essa etapa vamos olhar para 4 gráficos: Résiduos vs Valores Ajustados (1), Quantis dos Resíduos Padronizados (2), Raiz dos Resíduos Padrozinados vs Valores Ajustados (3) e Resíduos Padronizados vs alavancagem (4).

image

1.O primeiro gráfico (canto superior esquerdo) serve para analisarmos se há relação de linearidade. Temos que a linha vermelha flutua sobre a linha pontilhada indicando relação linear entre as variáveis.

2.Próximo gráfico (canto superior direito) é utilizado para verificar se os resíduos tem distribuição normal, para isso os pontos devem estar sobre a linha pontilhada. No nosso caso, há alguns pontos bastante distante da linha, o que pode ser uma evidência de não normalidade dos resíduos. Mais a frente vamos analisar com mais profundidade a questão.

3.Gráfico do canto inferior direito. Este nos auxilia quanto a homocedasticidade, pois em caso de haver um padrão na distribuição dos resíduos pode nos levar a entender que não há variância constante e isso prejudicaria nossas estimativas futuras com estes dados. No nosso caso. a linha vermelha flutua sobre a pontilhada e apresenta uma forma aproximadamente horizontal, indicando haver homocedasticidade, apesar da distribuição dos pontos não se apresentar dispersos de forma homogênea.

4.E por último, temos o gráfico que serve para identificarmos pontos discrepantes nos resíduos. Caso haja, observaremos pontos além do intervalo -3 e +3 no eixo y. No nosso caso, não temos outliers.

Seguindo nossa análise de pressupostos. Vamos refinar nossa análise da distribuição dos resíduos. No diagrama anterior, plot QQ-Normal, vimos que a distribuição apresentação muitos pontos que não estão em cima da linha. Um histograma e um teste estatístico são ótimas formas de avaliação.

image

image

O teste escolhido foi Shapito Wilk, que tem como hipótese testada que os dados seguem uma distribuição normal. Tivemos a estatística W = 0,98 e um p-valor menor que 5%, portanto, temos uma evidência de não normalidade. Além disso, o histograma tem as caudas longas e a curva está bastante achatada, ou seja, não se assemelha a um sino como esperado, mais uma evidência da falta de normalidade.

As funções summary() e rstandard() trarão para nós um resumo dos resíduos padronizados.

image

Outra forma de diagnosticar outliers se dá pelos valores de máximo e mínimo. A literatura diz que os resíduos precisam ter valores entre -3 e +3, pois fora desse intervalo indica presença de outliers. Como vimos, esse pressuposto foi atendido.

É importante que os resíduos não apresente autocorrelação, ou seja, esperamos que sejam independentes. Para isso temos no pacote DescTools, a função DurbinWatsonTest(). O teste de Durbin-Watson tem como hipótese nula, H0: Os resíduos são independentes. A estatística DW esperada como resultado é um valor próximo de 2.

image

Como podemos ver, o pressuposto não foi atendido. A estatística DW está muito longe do esperado e o p-valor do teste indica que devemos rejeitar a hipótese nula, afirmando que os resíduos não são independentes.

Atráves da função bptest() do pacote lmtest, podemos realizar o teste de homocedasticidade dos resíduos.

image

Com BP = 0,68971 e p-valor maior que 5%, podemos afirmar que há homodecasticidade nos resíduos, logo este pressuposto foi atendido.

Em seguida vamos fazer uma análise dos parâmetros do modelo com a função summary().

image

Nesta função o output do R nos informa um resumo dos resíduos, os valores de β0/β1 e os testes de significância, além do R² e estatística F. Estas são informações essenciais para avaliação do modelo proposto. Com base nos resultados obtidos, podemos dizer que o preço do Diesel é estatisticamente significativo e portanto um bom previsor para o preço da gasolina. O teste F mostrou relevância estatística, logo o nosso modelo é válido e melhor que um modelo sem varíavel independente (Diesel). O R² ajustado foi de 0,96, ou seja, o modelo consegue explicar 96% da variabilidade dos preços. E por último, o parâmetro β1 foi de 0,86, isso significa que para um acréscimo de uma unidade de real do preço do Diesel está associada a um acréscimo de 0,86 unidade no preço da Gasolina.

Podemos estabelecer um intervalo de confiança para o coeficiente de regressão ou parâmetro β1. com a função confint.lm() informamos os argumentos: objeto (modelo), parâmetro de interesse e o nível de confiança.

image

Então para o nosso coeficiente de regressão de 0,86, obtivemos um intervalo de confiança de 95%: ]0,84 ; 0,89[. Significa dizer que para 95 vezes em 100 esperamos que o nosso intervalo de confiança contenha o verdadeiro valor do parâmetro β1 da população.

Abaixo temos uma representação gráfica do modelo de regressão linear simples proposto neste estudo.

image

Conclusão

Ao final desta análise, podemos afirmar que a técnica de regressão linear não pode ser aplicada aos dados para se fazer estimativas futuras no preço da gasolina, uma vez que não tivemos todos os pressupostos atendidos. Em especial podemos destacar que, o fato dos resíduos não apresentar independência se dá pelo fato de que os nossos dados estão distribuidos ao longo do tempo. O resultado do teste de Durbin-Watson nos diz que a regressão linear não é adequada para realizar previsões com dados dispostos em série. O melhor a se fazer é aplicar um modelo de séries temporais!

Apresentamos uma análise de dados do começo com a coleta dos dados, passando por limpeza e transformação do conjunto de dados. Desenvolvemos uma análise exploratória dos dados e com técnica estatística estudamos a correlação entre variáveis númericas e apresentamos os resultados. Grosseiramente, esse é o passo-a-passo de uma análise estatística.

Com este trabalho, espero ter passado um pouco do que sei sobre análise de dados com a linguagem R, apresentando os principais recursos do R, bem como o poder que a estatística tem de extrair informações de dados brutos para gerar inteligência e ações que podem impactar nossa sociedade.

Referências

https://proeducacional.com/ead/curso-cga-modulo-i/capitulos/capitulo-4/aulas/covariancia-e-correlacao/

https://pt.stackoverflow.com/questions/6979/como-colocar-a-equação-da-regressão-em-um-gráfico

https://data.library.virginia.edu/diagnostic-plots/

https://br.investing.com

http://professor.ufop.br/sites/default/files/ericarodrigues/files/regressaolinearsimples_parte1.pdf

http://professor.ufop.br/sites/default/files/ericarodrigues/files/regressaolinearsimples_parte2.pdf

http://professor.ufop.br/sites/default/files/ericarodrigues/files/regressaolinearsimples_parte4.pdf

http://professor.ufop.br/sites/default/files/ericarodrigues/files/regressaolinearsimples_parte5.pdf

About

Preço médio de combustível ao longo do tempo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published