Você está na página 1de 130

Universidade do Estado do Rio de Janeiro

Faculdade de Administração e Finanças


Departamento de Ciências Contábeis

Aula 3 Business Intelligence e Mineração de Dados


Regressão com o programa R
linear
José Francisco Moreira Pessanha
Regressão
Instituto de Matemática e Estatística - Uerj
quantílica professorjfmp@hotmail.com

LOESS

Nadaraya-
Watson

Regressão
Logística Rio de Janeiro , 27 Maio de 2017
Galton's correlation diagram 1886
Sir Francis Galton
1822 - 1911

Em média, crianças de pais altos


são menores que seus pais,
enquanto crianças de pais baixos
são maiores que seus pais.

Galton chamou isso de regressão


para a média

http://galton.org/essays/1880-
1889/galton-1886-jaigi-
regression-stature.pdf
Regressão linear
O Avô da Inteligência Artificial Supervisionada
John W. Foreman
Modelo de Regressão Linear
Finalidade: Ajustar uma equação linear que relaciona uma variável dependente (ou
explicada) Y com uma ou mais variáveis independentes (ou explicativas) X1, X2,...,Xk, a
partir de n observações (dados) dos vetores (Yi,Xi,1,Xi,2,...,Xi,k)  i=1,n:

y = 0 + 1x1 + 2x2 +...+ kxk + 

Os coeficientes 0, 1, 2, ..., k não são conhecidos, mas podem ser estimados pela
aplicação do método dos mínimos quadrados ordinários (MQO) ao conjunto de n
observações amostradas (yi,xi,1,xi,2,...,xi,k)  i=1,n.

O erro , não observável, captura a natureza aleatória da variável dependente Y, os


erros nas medições das variáveis envolvidas e o efeito de possíveis variáveis
explicativas que foram ignoradas na especificação do modelo de regressão.

Qual o propósito de ajustar um modelo de regressão linear ?

 Previsão: prever o valor da variável dependente em função dos valores conhecidos


das variáveis independentes.
 Compreender o relacionamento entre as variáveis: estimação de parâmetros
econômicos, por exemplo, custos marginais, elasticidades e coeficiente Beta (CAPM).
Modelo de Regressão Linear
Para fins didáticos são classificados em dois tipos:
 Modelo de regressão linear simples
 Modelo de regressão linear Múltipla

Regressão linear simples: apenas uma variável independente


Exemplo: Relação entre vendas e despesas com propaganda
variável dependente y = vendas y = 0 + 1x + 
variável independente x = despesas com propaganda

Regressão linear múltipla: duas ou mais variáveis independentes


Exemplo: Precificação de imóveis
variável dependente y = preço do apartamento
variável independente x1 = área
variável independente x2 = nº de quartos
variável independente x3 = nº de banheiros
y = 0 + 1x1 + ... + 8x8 + 
variável independente x4 = idade do imóvel
variável independente x5 = tem garagem, Sim ou Não ?
variável independente x6 = andar
variável independente x7 = bairro
variável independente x8 = prédio com ou sem elevador ?
Estimação dos parâmetros do modelo

y   0  1 x1   2 x2     k xk   =?
=?
amostras de x e y em n objetos selecionados aleatoriamente

yi  0  1xi,1   2 xi,2     k xi, k   i i  1,, n


uma equação para cada objeto selecionado aleatoriamente

Y  Xβ   Notação matricial

Vetor da variável Matriz das variáveis Vetor de coeficientes Vetor de erros


dependente explicativas de regressão (Vetor aleatório)

 y1  1 x1,1  x1, k   1   1 
y  1 x  x     
X
2, k 
Y   2 β   2    2
2,1
       
       
 yn  1 xn,1  xn, k   k   n 
Premissas do modelo de regressão linear
Relação linear entre as variáveis dependente e independentes
y   0  1 x1   2 x2     k xk  
As variáveis explicativas x são fixas (não aleatórias)

Erro  é uma variável aleatória


•Normalmente distribuída
•Com média zero
•Variância constante (homocedasticidade)
•Erros não autocorrelacionados (covariância nula entre erros)

1   0  2 0  0 
     
 0 0  2
 0 
  2
~ N n   ,  

          
   
   2
 n   0  0 0     
Premissas do modelo de regressão linear
Caso da regressão lienar simples
Amostra
sinal ruído N(0, 2)
Y
y = 0 + 1xx + 
Densidade de probabilidade do erro y

y ~ Normal
X
E(y) = 0 + 1x

V(y) = 2

E(y) = 0 + 1x
Estimador de mínimos quadrados ordinários
Equação de interesse y   0  1x1   2 x2     k xk  

E  y   0  1x1   2 x2     k xk

 
n
Mínimos quadrados Min y  
 i 0 1 i,1
β  β X  ...  β X
k i, k  2
β 0 ,β1 ,...,β k i 1
X e y são valores conhecidos de uma
amostra aleatória de tamanho n

 ˆ0 
ˆ

Estimador de
Mínimos quadrados 

β̂   1   X T X X T Y
1

 
 ˆk 
Estimador da média
Equação de previsão yˆ  ˆ0  ˆ1 x1  ˆ2 x2    ˆk xk de y em função das
variáveis explicativas
Estimador de mínimos quadrados ordinários

 ˆ0   ˆ0 
ˆ ˆ
β̂  

1 
 
1 T
 X X X Y
T
β̂  

1 
 
~ N k β, Σ β̂
   
 ˆk   ˆk 
Não tendencioso

 Var ˆ1   
Cov ˆ1 , ˆ2  
 Cov ˆ1 , ˆk  
   T
Σ β̂  E β̂  β β̂  β 

 
Cov ˆ2 , ˆ1  Var ˆ  
2  
 Cov ˆ2 , ˆk   
  2 X T X 
1

       


Cov ˆk , ˆ1  
Cov ˆk , ˆ2   ˆ
Var  k   

  yi  yi 
ˆ 2

ˆ 2  i 1
n  k  1
Estimador de mínimos quadrados generalizados
Aplicado nos casos de heterocedasticidade ou de autocorreção serial
do erro do modelo de regressão

 ˆ0   ˆ0 
ˆ ˆ

 
β̂   1   X T  -1X X T  -1Y

1
β̂  

1 
 
~ N k β, Σ β̂
   
 ˆk   ˆk 

Matriz  determinada pela especificação de um modelo para a variância do


erro (caso de heterocedasticidade) ou processo estocástico para o erro (caso
de erros autocorrelacionados)



   T

Σ β̂  E β̂  β β̂  β    X  X

2 T -1
  1
Modelo de Regressão Linear no R
Função lm, no R digite help(lm)

Y ~ X1 + X2 + X3 Y = 0 +1X1 + 2X2 + 3X3+


Exemplo 1 (Ragsdale, 2009) – Regulação econômica
Nolan Ragsdale é um auditor da Comissão de Serviços Públicos do
Estado da Geórgia, um órgão governamental responsável por garantir
que as companhias de serviços públicos (monopólios de água, energia,
telefonia e transporte) em toda a Geórgia realizem suas operações
eficientemente, dentro dos padrões de qualidade e com preços justos

http://www.psc.state.ga.us/

Geórgia

Ray Charles
Exemplo 1 Regulação econômica
Um grande problema que Nolan enfrenta é determinar se as despesas
lançadas pelas companhias de serviços públicos são razoáveis.

Por exemplo, quando Nolan analisa o relatório financeiro para uma


companhia telefônica local, ele precisa determinar se os custos de
manutenção da linha da ordem de US$ 1.345.948 são razoáveis.

As companhias diferem em tamanho e por esta razão Nolan não pode


comparar diretamente com os valores apresentados por outras
companhias. Da mesma forma, não é recomendável comparar a
participação das despesas com manutenção na receita total.

Nolan coletou dados das despesas com manutenção e número de


clientes (proxy do tamanho da companhia) de 12 companhias
telefônicas locais.
Como ajudar na solução do problema ?
Exemplo 1 Leitura de dados em planilha Excel
Dados disponibilizados pelo Nolan na planilha CSPGEORGIA.XLSX
clientes (1000) despesas com manutenção (1000 US$)
25.3 484.6
36.4 672.3
37.9 839.4
45.9 694.9
53.4 836.4
66.8 681.9
78.4 1037
82.6 1095.6
93.8 1563.1
97.5 1377.9
105.7 1711.7
124.3 2138.6

Sequência de comandos para importar o arquivo no R


library(xlsx) # carrega pacote para ler planilha MS Excel
setwd("c:/curso R/dados") # diretório de trabalho
dados=read.xlsx("CSPGEORGIA.xlsx",header=TRUE,startRow=1, sheetIndex=1)
head(dados) # mostra as seis primeiras linhas de dados

header= T, primeira linha contém rótulos dos dados


startRow=1, inicie a leitura na primeira linha da planilha
sheetinde=1, leia a primeira pasta da planilha
Exemplo 1 Leitura de dados em arquivo CSV
Dados disponibilizados pelo Nolan na planilha CSPGEORGIA.CSV
clientes (1000) despesas com manutenção (1000 US$)
25.3 484.6
36.4 672.3
37.9 839.4
45.9 694.9
53.4 836.4
66.8 681.9
78.4 1037
82.6 1095.6
93.8 1563.1
97.5 1377.9
105.7 1711.7
124.3 2138.6

Sequência de comandos para importar o arquivo no R


setwd("c:/curso R/dados") # diretório de trabalho
dados=read.csv2("CSPGEORGIA.csv",header=TRUE,sep=";",dec=".")
head(dados) # mostra as seis primeiras linhas de dados
header= T, primeira linha contém rótulos dos dados
sep= searador de colunas
dec = separador decimal
Exemplo 1 Análise Exploratória de Dados
Resultado da sequência de comandos usados na importação do arquivo

dados[,1] dados[,2]

Diagrama de dispersão
plot(dados[,1],dados[,2],xlab="Clientes",ylab="Despesas US$")
Correlação
cor(dados[,1],dados[,2]) 0.9346278

Conclusão da análise exploratória de dados:


É razoável admitier uma relação linear entre a
despesa com manutenção e o número de clientes
despesa = 0 + 1 clientes + 
Exemplo 1 Ajuste do modelo
Sequência de comandos para ajustar o modelo de regressão linear simples
X = dados[,1] # variável independente , número de clientes
Y = dados[,2] # variável dependente , despesas com manutenção
modelo = lm( Y ~ X )
summary(modelo)
Estimador do valor esperado das despesas em
função do número de clientes
Yˆ  33,321  15,016 X
̂ 0 ̂1
Coeficiente 1 do número de
clientes é significativamente
diferente de zero, há relação
entere as despesas e o
tamanho da companhia

R2, 87,35% da variação


total dos custos é
explicada pelo número
de clientes
Exemplo 1 Intervalos de confiança dos coeficientes de regressão

confint(modelo) informa os intervalos com 95% de


confiança para os coeficientes de regressão

 275,73   0  342,37
10,99  1  19,04

confint(modelo) informa os intervalos com 99% de


confiança para os coeficientes de regressão
Exemplo 1 Gráfico da reta de regressão
plot(X,Y,xlab="Clientes",ylab="Despesas US$") # faz diagrama de dispersão
abline(coef(modelo)) # desenha a reta A reta de regressão
informa o valor
esperado da despesa
coef(modelo) retorna as estimativas com mautenção para
dos coeficientes de regressão B0 e B1 um dado número de
clientes

̂ 0 ̂1 Companhia
mais eficiente
Valores estimados para as despesas
esperadas das 12 companhias
consideradas (reta de regressão)

Estes valores podem ser comparados com os dados fornecidos pelas


companhias para identificar as companhias eficientes e ineficientes.
Exemplo 1 Resíduos

Os desvios entre os valores informados para as despesas e as respectivas estimativas


fornecidas pelo modelo de regressão são quantificados pelos resíduos da estimação

Valor informado Estimativa da despesa esperada dada o nº de clientes

 
ˆi  Yi  ˆ0  ˆ1 X i i  1, n
ˆi  Yi  33,32057  15,01598 X i  i  1, n

Resíduos negativos indicam as companhias que operam com custos abaixo das
respectivas estimativas para a despesa esperada. Resíduos positivos indicam
companhias com custos maiores que o eeperado.

Logo a companhia 6 é a mais eficiente e a companhia 12 a mais ineficiente


Exemplo 1 Previsão
Uma companhia com 75.000 (X=75) clientes informou uma despesa com
manutenção da ordem de US$ 1.500.000 (Y=1500). Com base no modelo de
regressão ajustado o valor informado é razoável ou excessivo ?
Estimativa do valor esperado da despesa com mantenção

Yˆ  E Y | X  75  33,321  15,016  75  1.159,519

A despesa informada está acima da despesa esperada. Adicionalmente, o valor


informado também está acima do limite superior do intervalo com 95% de confiança
da despesa esperada para uma companhia com 75.000 clientes. Logo 1.500.000 pode
ser considerado um valor excessivo para uma empresa com 75.000 clientes

1037,526  E Y | X  75  1281,512


Exemplo 1 Intervalos de previsão
Intervalo com 95% de confiança da despesa esperada para cada uma das 12
companhias consideradas no estudo
confianca=predict(modelo,interval="confidence")

plot(dados[,1],dados[,2],xlab="Clientes",ylab="Despesas US$")
lines(X,confianca[,1]) # insere a reta de regressão no gráfico (fit)
lines(X,confianca[,2],col="blue") # insere os limites inferiores (lwr) dos intervalos de confiança
lines(X,confianca[,3] ,col="blue") # insere os limites superiores (upr) dos intervalos de confiança
points(75,1500) # insere o dado informado pela empresa com 75000 clientes
arrows(70,1400,75,1500) # adiciona seta para indicar a companhia com 75000 clientes
text(60,1400,"X=75 e Y=1500") # insere texto explicativo na companhia com 75000 clientes
Exemplo 2 (Kutner et al, 2004) – Previsão de vendas
Uma empresa de artigos infantis opera em 21 cidades de médio porte.
A empresa está analisando a possibilidade de expansão em outras
cidades de médio porte (cidades candidatas).
A decisão depende de uma estimativa de vendas em cada cidade
candidata. Mas como prever as vendas nestas cidades, onde a
empresa não possui filiais ?
As vendas nas cidades candidatas podem ser estimadas por meio do
seguinte modelo de regressão linear múltipla, ajustado com as
observações provenientes das atuais 21 lojas da empresa.

Vendas  0  1POP16   2 RPC  


População até 16 anos Renda per capita da
da cidade cidade
Exemplo 2 Leitura de dados em planilha XLSX
Os dados estão disponíveis no arquivo KUTNER.xlsx.
library(xlsx) # carrega pacote para ler planilha MS Excel
setwd("c:/curso R/dados") # diretório de trabalho
dados=read.xlsx("KUTNER.xlsx",header=TRUE,startRow=1, sheetIndex=1)
head(dados) # mostra as seis primeiras linhas de dados

Matriz de correlações, cor(dados)

Correlações elevadas entre vendas e as variáveis explicativas, especificação linear é razoável


Exemplo 2 Leitura de dados em arquivo CSV
Os dados estão disponíveis no arquivo KUTNER.csv.
setwd("c:/curso R/dados") # diretório de trabalho
dados=read.csv2("KUTNER.csv",header=TRUE,sep=";",dec=".")
head(dados) # mostra as seis primeiras linhas de dados

Matriz de correlações, cor(dados)

Correlações elevadas entre vendas e as variáveis explicativas, especificação linear é razoável


Exemplo 2 Ajuste do modelo
Sequência de comandos para ajustar o modelo de regressão linear múltipla
POP16 = dados[,1] # variável independente , população até 16 anos de idade
RPC = dados[,2] # variável independente , renda per capita
VENDAS = dados[,3] # variável dependente , vendas
modelo = lm( VENDAS ~ POP16 + RPC )
summary(modelo)

Yˆ  68,8571  1,4546 POP16  9,3655 RPC


̂ 0 ̂1 ̂ 2
Coeficiente 1 e 2 são
estatisticamente diferente de zero

R2, 91,67% da variação


total das vendas é
explicada pelo modelo

Coeficiente 1 e 2 são
simultanemente não
nulos
Exemplo 2 Ajuste do modelo
Os dados das 21 localidades podem ser dispostos em um gráfico, onde cada localidade
é representada por um ponto.

A equação de regressão E Yi X 1 , X 2    0  1 X 1   2 X 2 define um plano

passando pelo meio da nuvem de pontos. Este plano representa o valor esperado das
vendas em função da renda e da população abaixo de 16 anos em uma localidade

library(car)
scatter3d(VENDAS ~ POP16 + RPC,fit="linear")
Exemplo 2 Análise dos resíduos
Gráficos dos resíduos contra cada variável explicativa e a variável explicada exibem um
padrão aleatório e a dispersão parece constante e, portanto, estão coerentes com as
hipóteses (pressupostos) de covariâncias nulas entre os erros e variância do erro
constante.

par(mfrow=c(2,2))
plot(modelo$fitted,modelo$residuals)
plot(POP16,modelo$residuals)
plot(RPC,modelo$residuals)
plot(POP16*RPC,modelo$residuals)
Exemplo 2 Análise dos resíduos
O gráfico de probabilidade normal índica que a distribuição dos resíduos é normal,
portanto, coerente com a hipótese (pressuposto) de distribuição normal para o erro.

qqnorm(modelo$residuals)
qqline(modelo$residuals)
Exemplo 2 Análise dos resíduos

Outros gráficos
Residuals vs Fitted Normal Q-Q

20

2
5 5

Standardized residuals
10

1
Residuals
par(mfrow=c(2,2))

0
plot(modelo)

-10

-1
18
18

-20
16
16

140 160 180 200 220 -2 -1 0 1 2


Não há
Fitted values Theoretical Quantiles
observações
influentes
Scale-Location Residuals vs Leverage
5
16

2
5 0.5
1.2
Standardized residuals

Standardized residuals
18

1
0.8

0
0.4

-1
15

Cook's distance
16

-2
0.0

0.5

140 160 180 200 220 0.00 0.05 0.10 0.15 0.20 0.25

Fitted values Leverage


Exemplo 2 Matriz de covariâncias dos estimadores

Matriz de covariâncias dos estimadores dos coeficiente de regressão

vcov(modelo)

ˆ2 
S     X X T

1

Variâncias na diagonal principal


Covariâncias fora da diagonal
principal

Erros padrão dos


ˆ ˆ  ˆ 2ˆ  3602,0347  60,0170
estimadores dos 0 0

coeficientes de regressão ˆ ˆ  ˆ 2ˆ  0,0449  0,2118


(valores informados pelo 1 1

ajuste de regressão no
Excel)
ˆ ˆ  ˆ 2ˆ  16,5158  4,0640
2 2
Exemplo 2 Intervalos de confiança dos coeficientes de regressão

confint(modelo) informa os intervalos com 95% de confiança para os


coeficientes de regressão

 194,948  0  57,2339
1,0096  1  1,8995
0,8274   2  17,9036
Exemplo 2 Previsões das vendas esperadas nas cidades A e B
Cidade A
número de pessoas com até 16 anos de idades = 65.400 (POP16 = 65,4)
renda per capita na localidade = 17.600 (RPC=17,6)
E VendasA | POP16 A , RPC A   68,86  1,45  65,4  9,37 17,6  191,10

Cidade B
número de pessoas com até 16 anos de idades = 53.100 (POP16 = 53,1)
renda per capita na localidade = 17.700 (RPC = 17,7)
E VendasA | POP16 A , RPC A   68,86  1,45  53,1  9,37 17,7  174,15
novodado=data.frame(rbind(c(65.4,17.6),c(53.1,17.7)))
colnames(novodado)=c("POP16","RPC")
rownames(novodado)=c("A","B")
predict(modelo,novodado)

Intervalo com 95% de confiança para


a venda esperada em cada cidade

Intervalos de
confiança Expectativas de vendas
Exemplo 2 Intervalos de previsão e de confiança de 95%
Intervalo de previsão: intervalo para uma realização da variável dependente Y dado X
Intervalo de confiança: intervalo para a média da variável dependente E(Y|X).

predict(modelo, interval="predict") predict(modelo, interval="confidence")

Intervalos
calculados
para cada par
(POP16, RPC)
observado na
amostra

Intervalo de previsão Intervalo de confiança


Exemplo 3 (Ledolter, 2013) – Precificação de automóveis
Um vendedor de automoveis deseja construir
um aplicativo para precificação de carros
usados, em especial de Toyota Corollas usados.

O modelo deve fornecer estimativas de preço a


partir de algumas características do carro
usado.

Ajuste um modelo de regressão linear múltipla


a partir das observações de 1436 Toyota
Corollas disponíveis no arquivo
ToyotaCorolla.csv.
Exemplo 3 Dados
Importação dos dados para o R
dados=read.csv("c:/curso R/dados/ToyotaCorolla.csv",sep=",") # importa arquivo csv
head(dados) # mostra as seis primeiras linhas de dados

Há variáveis qualitativas:
FuelType: CNG (GNV), Diesel, Petrol
MetColor: 1 cor metálica, 0 caso contrário
Automatic: 1 direção automática, 0 caso contrário

summary(dados)
Exemplo 3 Análise Exploratória de Dados
Para chamar cada variável por seu nome digite attach(dados)
attach(dados)
par(mfrow=c(1,2)) # prepara para receber dois gráficos lado a lado
hist(Price,xlab="Preço",ylab="Frequência",main="Histograma do Preço")
hist(log(Price),xlab="log(Preço)",ylab="Frequência",main="Histograma do log(Preço)“)

Distribuição A transformação logaritmica


muito reduz a assimetria e torna a
assimétrica distribuição da variável
dependente (Preço) mais
próxima da hipótese de
normalidade assumida pelo
modelo de regressão
Exemplo 3 Análise Exploratória de Dados
Idade x Preço
plot(log(Price)~Age,xlab=“Idade",ylab="log(Preço)")
abline(lm(log(Price)~Age))
Exemplo 3 Análise Exploratória de Dados
KM x Preço
plot(log(Price)~KM,xlab="Km",ylab="log(Preço)")
abline(lm(log(Price)~KM))
Exemplo 3 Ajuste do modelo
Modelo
Log(Price) = 0 + 1Age +2KM + 
modelo=lm(log(Price) ~Age+KM)
summary(modelo)
Exemplo 3 Análise dos resíduos

O diagnóstico dos resíduos do modelo permite identificar violações


dos pressupostos assumidos pelo modelo de mínimos quadrados para
a componente de erro :

• média nula E() = 0


• variância contante (homocedasticidade) V() é contante
• não autocorrelacionados E(i, j) = 0  ij
• erros normalmente distribuídos
Exemplo 3 Avaliação da normalidade
library(MASS)
sresid <- studres(modelo) # resíduos padronizados
hist(sresid, freq=FALSE,xlab="resíduo padronizado",ylab="densidade",main="",ylim=c(0,0.5))
xfit = seq(min(sresid),max(sresid),length=40)
yfit = dnorm(xfit)
lines(xfit, yfit,col="blue",lwd=2)

Testes de aderência H0 : erro normal


H1: erro não normal

Teste de Kolmogorov-Smirnov
ks.test(sresid,"pnorm")

Rejeita H0 ao nível de significância de 5%

Teste de Anderson-Darling
library(nortest)
ad.test(sresid)
Exemplo 3 Avaliação da normalidade
QQplot útil na avaliação da premissa de normalidade
qqnorm(sresid)
qqline(sresid,distribution=qnorm)

Contribuições
contra a premissa
de normalidade
dos erros
Exemplo 3 Avaliação da homocedasticidade
Gráfico dos resíduos normalizados contra os valores estimados pelo
modelo para a variável dependente
plot(modelo$fitted,sresid)
Teste de Breusch – Pagan
H0 : erro homocedástico
H1: erro heterocedástico

library(lmtest)
bptest(modelo)

Rejeita H0 ao nível de significância de 5%


Exemplo 3 Avaliação da homocedasticidade
Gráfico dos resíduos normalizados contra os valores estimados pelo
modelo para a variável dependente
plot(modelo$fitted,sresid)
Teste de Goldfeld – Quandt
H0 : erro homocedástico
H1: erro heterocedástico

library(lmtest)
gqtest(modelo)

Não rejeita H0 ao nível de significância de 5%


Exemplo 3 Remoção de observações influentes
Uma observação é influente se sua exclusão dos dados provoca uma mudança
substancial nos valores ajustados

saída é uma variável lógica: saida=influence.measures(modelo)$is.inf


•FALSE se observação não é influente head(saida) # mostra a 6 primeiras observações
•TRUE se observação é influente

7 Métricas para identificação de


observações influentes: dfb1,
dfbAge, dfbKM, dffit, covr,
cookd, hat

indice=which(saida[,4]==T) # índices das observações influentes segundo dffit = TRUE

Y=log(Price[-indice]) Remove observações


X1=Age[-indice] influentes identificadas
X2=KM[-indice] pelo critério dffit

http://www.portalaction.com.br/analise-de-regressao/343-pontos-influentes
Exemplo 3 Novo ajuste

modelo1=lm(Y ~ X1+X2)
summary(modelo1)

Novo ajuste sem as


observações
influentes

sresid <- studres(modelo1) # resíduos padronizados


ks.test(sresid,"pnorm")
H0 : erro normal
H1: erro não normal Não rejeita H0

bptest(modelo1)
H0 : erro homocedástico Não rejeita H0
H1: erro heterocedástico
Exemplo 4 (Berndt, 1991) – Previsão do consumo de energia elétrica
A previsão de longo prazo do consumo de energia elétrica é uma
informação fundamental para o planejamento da expansão de um
sistema elétrico, cujo objetivo consiste em estabelecer um cronograma
de entrada em operação das novas instalações de geração, transmissão
e distribuição de energia elétrica a fim de assegurar um atendimento
confiável e de custo mínimo à demanda futura de energia elétrica.
Exemplo 4 Modelo
Um modelo de previsão do consumo de energia elétrico poderia ter a
seguinte especificação (Cobb-Douglas)

kWht  exp 0  Pelect GNPt exp t 1 2

kWH = total de energia consumida nos EUA em bilhões de kWh ou TWh

PELEC = preço da eletricidade por kWh (em centavos de dólar de 1972)

GNP = PIB dos EUA em bilhões de dólares (a preços de 1972)

A especificação linear é alcançada por meio de uma transformação


logaritimica

LnkWht   0  1 LnPelec t   2 LnGNPt   t


1 e 2 são as elasticidades preço e renda respectivamente
Exemplo 4 Leitura de dados em planilha XLSX

Séries temporais anuais do consumo de energia elétrica , PIB e preço


médio da energia elétrica no período 1951 - 1984 estão disponíveis no
arquivo ENERGIA_ELÉTRICA.xlsx
library(xlsx) # carrega pacote para ler planilha MS Excel
setwd("c:/curso R/dados") # diretório de trabalho
dados=read.xlsx(“ENERGIA_ELÉTRICA.xlsx",header=TRUE,startRow=1, sheetIndex=1)
head(dados) # mostra as seis primeiras linhas de dados
Exemplo 4 Leitura de dados em arquivo CSV

Séries temporais anuais do consumo de energia elétrica , PIB e preço


médio da energia elétrica no período 1951 - 1984 estão disponíveis no
arquivo ENERGIA_ELÉTRICA.csv
setwd("c:/curso R/dados") # diretório de
trabalhodados=read.csv2("ENERGIA_ELÉTRICA.csv",header=TRUE,sep=";",dec=".")
head(dados) # mostra as seis primeiras linhas de dados
Exemplo 4 Séries temporais
Transforma o tipo do objeto dados para séries temporais
series=ts(dados[,2:4],start=1951,end=1984,frequency=1)
plot(series,xlab="Anos",main="Séries Temporais")
Exemplo 4 Ajusta modelo
logseries=log(series) # transformação logaritmica
logKWh=logseries[,1]
logPELEC=logseries[,2]
logPIB=logseries[,3]

modelo=lm(logKWh ~ logPELEC + logPIB)


summary(modelo)

Elasticidades
observe que
os sinais estão
coerentes com a
teoria econômica
Exemplo 4 Análise dos resíduos
library(MASS)
sresid = studres(modelo) # resíduos padronizados
hist(sresid, freq=FALSE,xlab="resíduo padronizado",ylab="densidade",main="")
xfit = seq(min(sresid),max(sresid),length=40)
yfit = dnorm(xfit)
A premissa de
lines(xfit, yfit,col="blue",lwd=2)
normalidade dos erros
não foi violada
ks.test(sresid,"pnorm")

residuos=ts(modelo$residuals,start=1951,end=1984,frequency=1)
plot(residuos,xlab="Anos") A sequência dos sinais
dos resíduos ao longo do
tempo não exibe um
padrão aleatório, logo a
premissa de erros não
Gráfico dos resíduos
ao longo do tempo autocorrelacionados foi
violada
Exemplo 4 Análise dos resíduos
Funções de
autocorrelação(FAC ou
ACF) e autocorrelção
parcial (FACP ou PACF) Decaimento exponencial Apenas a primeira FACP é
dos resíduos da FAC típico de um significativa
par(mfrow=c(1,2)) processo AR
acf(residuos,36)
pacf(residuos,36)

Mostra até lag 36

A premissa de erros não autocorrelacionados foi violada


Erros são autocorrelacionado e seguem um processor AR(1) : t = t-1 +vt
library(lmtest)
dwtest(modelo) # teste de Durbin - Watson
H0: Erro não é AR(1)
H1: Erro é AR(1)

A hipótese nula é rejeitada, logo James Durbin Geoffrey Watson


erro sergue processo AR(1) 1923-2012 1921 - 1998
Exemplo 4 Novo modelo considera a autocorrelação AR(1) do erro

Equação principal

LnkWht   0  1 LnPelec t   2 LnGNPt   t

Coeficiente de autocorrelação ].1,1[

 t   t 1  vt Ruído branco

Equação do erro

Parâmetros do modelo estimados


por mínimos quadrados generalizados - MQG
Exemplo 4 Estimação por MQG
Procedimento de Cochrane-Orcutt (Prais-Winsten)
library(prais)
dados=cbind(logKWh,logPELEC,logPIB)
modeloMQG = prais.winsten(logKWh ~ logPELEC + logPIB,data=dados)
print(modeloMQG)

Elasticidades

Estimativa do coeficiente de autocorrelação ].1,1[


Exemplo 4 Comparação MQO x MQG
Estimativas por mínimos quadrados ordinários - MQO
(considera os erros não autocorrelacionados)

Estimativas pelo método de Cochrane-Orcutt . MQG


(reconhece que os erros são autocorrelacionados e
corrige o efeito da autocorrelação do erro)

Comparando os dois conjuntos de estimativas pode-se observar que os coeficientes


de regressão são da mesma ordem de grandeza.

Porém, conforme esperado, o MQO subestima os erros-padrão


Exemplo 4 Equação de previsão
Último erro de previsão
ˆt  LnkWht   4,755  0,239 LnPelect  1,727 LnGNPt 

Equação de previsão h passos à frente


LnkWht  h  4,755  0,239 LnPelec t  h  1,727 LnGNPt  h  0,827 h ˆt
Exemplo 4 Gráfico MQO x MQG
# consumo de energia elétrica no período 1951-1984
plot(logKWh,xlab="Anos",lwd=2)

# valores estimados pelo MQO para o período 1951-1984


lines(seq(1951,1984,1),modelo$fitted.values,col=“red”,lwd=2)

# valores estimados pelo MQG para o período 1951-1984


betasMQG=modeloMQG[[1]]$coefficients[1:3]
X=cbind(rep(1,dim(dados)[1]),dados[,2:3])
residuos=logKWh-X%*%betasMQG
Rho=modeloMQG[[2]]$Rho
erros=c(0,residuos[1:(dim(dados)[1]-1)])
estimadosMQG=X%*%betasMQG+Rho*erros
lines(seq(1951,1984,1),estimadosMQG,col="blue",lwd=2)

Cálculo da equação de previsão 1 passo a frente (h=1) para o período entre 1951 e 1984
LnkWht  h  4,755  0,239 LnPelec t  h  1,727 LnGNPt  h  0,827 h ˆt

# insere legenda no gráfico


legend(1950,7.5,c("Valores observados","Estimativas MQO","Estimativas MQG"),
lty=c(1,1,1),col=c("black","red","blue"))
Exemplo 4 Gráfico MQO x MQG
LOESS
LOESS
Procedimento não paramétrico proposto por Cleveland (1979)

W. S. Cleveland. Robust Locally Weighted Regression and


Smoothing Scatterplots. Journal of the American Statistical
Association, 74:829–836, 1979.

Útil no ajuste de regressões, na identificação e remoção de


outliers, bem como na imputação de dados (preenchimento
de lacunas de dados)

William S. Cleveland
http://www.stat.purdue.edu/~wsc/
LOESS

Regressões ajustadas por mínimos quadrados ponderados, MQG com matriz 


diagonal e cujos elementos ponderam as observações
http://streaming.stat.iastate.edu/~stat416/LectureNotes/handout_LOWESS.pdf
LOESS

Valor
Valor suavizado
suavizado

As ponderações são maiores na


vizinhaça do ponto em que se deseja
calcular a regressão
LOESS

Dados e curva suavizada gerada pelo proceditmento LOESS

X
https://en.wikipedia.org/wiki/Local_regression
Função loess do R

help(loess)

Equação do modelo y ~ x1 + x2
grau do polinomio utilizado na
regressão, normalmente 1 ou 2.

Tamanho da vizinhança (número entre 0 e 1)


controla o grau de suavização
Exemplo 5 Função loess do R
dados=read.csv("c:/curso R/dados/ToyotaCorolla.csv",sep=",") # importa arquivo csv

preco = dados$Price
km = dados$KM
plot(km,preco,xlab="km",ylab="preço") Preço = funcão(km)

modelo=loess(preco ~ km, span=0.1, degree=1)


precosuavizado=modelo$fitted
points(km, precosuavizado,xlab="km",ylab="preço",col="green")
Exemplo 5 Função loess do R
Testando valores de span (tamanho da vizinhança) e degree (grau do polinômio)
par(mfrow=c(1,3))
modelo=loess(preco ~ km, span=0.05, degree=1)
plot(km,preco,xlab="km",ylab="preço",main="span=0.05 degree=1")
precosuavizado=modelo$fitted
points(km, precosuavizado,xlab="km",ylab="preço",col="green")

modelo=loess(preco ~ km, span=0.5, degree=1)


plot(km,preco,xlab="km",ylab="preço",main="span=0.5 degree=1")
precosuavizado=modelo$fitted
points(km, precosuavizado,xlab="km",ylab="preço",col="green")

modelo=loess(preco ~ km, span=0.5, degree=2)


plot(km,preco,xlab="km",ylab="preço",main="span=0.5 degree=2")
precosuavizado=modelo$fitted
points(km, precosuavizado,xlab="km",ylab="preço",col="green")
Exemplo 5 Função loess do R
Exemplo 5 Função loess do R – Previsão

# Estimativa do preço para um veículo que percorreu 1000 km

previsao=predict(modelo,1000,se=TRUE)

previsao$fit # preço previsto

previsao$se.fit # erro padrão


Exemplo 5 Função loess do R – SuperfÍcie de preços
# ajuste o modelo
age=dados$Age # preço e km foram definidos anteriormente
modelo=loess(preco ~ km + age, span=0.15, degree=1)

# estimativa para o preço US$ de um Corolla com 12 meses e 1000 km rodados


predict(modelo,newdata=t(c(1000,12))) 20341.86

# cria grade bidimensional de tamanho len para fazer a superfície de preços


len=50
price=matrix(NA,len,len)
quilometragem=seq(min(km),max(km),len=len)
idade=seq(min(age),max(age),len=len)
for (i in 1:len){
for (j in 1:len){
x=c(quilometragem[i],idade[j]) # ponto x em que será avaliado o preço
price[i,j]=predict(modelo,t(x)) # preço médio estimado pelo loess
}
}

# gráfico da superfície de preços


persp(quilometragem,idade,price, theta = 30, phi = 30, expand = 0.5,
col = "lightblue",ltheta = 120, shade = 0.75, xlab="idade", ylab="KM",zlab="preco“)
Exemplo 5 Função loess do R – SuperfÍcie de preços
LOESS na suavização dos dados de curva de carga
Demanda diária de energia elétrica em cada minuto do dia
curva com 1440 pontos

Curva
suavizada

dados
LOESS na suavização dos dados de curva de carga
Demanda diária de energia elétrica em cada minuto do dia
curva com 1440 pontos
LOESS na suavização dos dados de curva de carga
Demanda diária de energia elétrica em cada minuto do dia
curva com 1440 pontos

outlier
LOESS na suavização dos dados de curva de carga
Demanda diária de energia elétrica em cada minuto do dia
curva com 1440 pontos

outlier
Regressão Quantílica
Regressão quantílica

Roger Koenker

https://pdfs.semanticscholar.org/a3cd/bfbba2ef3ce285980edc1213a4ac56f05bb1.pdf
Regressão quantílica
Quantil  da variável resposta y é função das variáveis explicativas

Q  y   0  1x1   2 x2     k xk
Regressões estimadas separadamente para cada quantil
Para mediana  = 0,5
Para o primeiro quartil  = 0,25 Quantile loss function
Para o terceiro quartil  = 0,75

yi  β 0  β1Xi1  ...  β k Xik   i


ui   i se  i  0
yi  β 0  β1Xi1  ...  β k Xik  ui  vi
vi   i se  i  0
n
Min
β 0 ,β1 ,...,β k
   yi  β0  β1Xi1  ...  β k Xik  Estimativas obtidas pela minimização
i 1 da função perda dos erros
i
n n
Min   ui  1    vi
u, v,β i 1 i 1
Coeficientes estimados por meio da solução
s.a.
de um problema de programação linear
yi  X iT   ui  vi i  1, n (algoritmos simplex ou pontos interiores)
  R k , u  0, v  0
Exemplo 6 Regressão quantílica no R (pacote quantreg)
# leitura de dados
dados=read.csv("c:/curso R/dados/ToyotaCorolla.csv",sep=",") # importa arquivo csv
head(dados) # mostra as seis primeiras linhas de dados
preco = dados$Price
age = dados$Age

# ajusta modelo de regressão quantílica para os quantis de 10% até 90%


library(quantreg)
modelo=rq(preco~age, tau=seq(0.1,0.9,by=0.1))
plot(modelo)
Preço = b0 + b1Age + erro

Estimativas dos coeficientes


em cada quantil avaliado

quantis
Exemplo 6 Intervalos de confiança dos coeficientes de regressão
# intervalos de confiança dos coeficientes nos diferentes quantis
plot(summary(modelo))

Intercepto estimado pela


regressão linear (MQO)
20294,059
IC 95% (20007,47 ; 20580,65)

Coeficientes estimados
quantis pela regressão quantílica
para diferentes quantis

Coeficiente estimado pela


regressão linear (MQO)
-170,934
IC 95% (-175,79 ; -166,07)

quantis
Exemplo 6 Quantis do preço em função da idade do veículo
# estimativas dos quantis de preços para diferentes idades
estimativas= predict(modelo,newdata=data.frame(age),type="")
dados=cbind(preco,estimativas)
plot(preco~age)
for (i in 2:10) {
lines(dados[,i]~age,col="blue")
}
Nadaraya – Watson (Kernel regression)
Nadaraya - Watson
Nadaraya, E. A. 1964. On estimating regression. Theory of Probability and Its Application 9: 141–142
A study is made of certain properties of an approximation to the
regression line on:the basis of sampling data when the sample
size increases unboundedly

http://www.mathnet.ru/php/archive.phtml?wshow=paper&jrnid=tvp&paperid=356&option_lang=eng

Watson, G. S. 1964. Smooth regression analysis. Sankhy¯a Series A 26: 359–372..

The present paper gives a simple computer


method for obtaining a “graph” from a large
number of observations.
Nadaraya - Watson

y  mx    Equação de regressão

E  y x   mx  Xi e Yi são observações da


amostra de tamanhao n

n  x  Xi 
 K  h   Yi
 x 
m x  
ˆ i 1 Estimador Nadaraya Watson
n  x  Xi 
 K  h 
i 1  x 
Exemplo 7 Nadaraya – Watson (função ksmooth)
dados=read.csv("c:/curso R/dados/ToyotaCorolla.csv",sep=",") # importa dados

preco = dados$Price
km = dados$KM
Preço = funcão(km)
plot(km,preco,xlab="km",ylab="preço")

modelo=ksmooth(km,preco,kernel="normal",bandwidth=6000)
precosuavizado=modelo$y
points(modelo$x, precosuavizado,xlab="km",ylab="preço",col="green")

The present paper gives a simple computer


method for obtaining a “graph” from a large
number of observations.
Exemplo 7 Nadaraya – Watson com o pacote np
dados=read.csv("c:/curso R/dados/ToyotaCorolla.csv",sep=",") # importa dados
preco = dados$Price https://cran.r-project.org/web/packages/np/vignettes/np.pdf
km = dados$KM
Preço = funcão(km)
library(np) # carrega pacote
modelo=npreg(preco~km) # regressão não paramétrica Estimativas de E(y|x)
names(modelo) Erro padrão das
bandwidth estimativas

Medidas de
qualidade de
modelo$bw # bandwidth ajuste

hx
Exemplo 7 Nadaraya – Watson com o pacote np
plot(modelo)
Gráfico das estimativas de E(preço | km)

plot(km,preco)
points(km,modelo$mean,col="blue")
Exemplo 7 Nadaraya – Watson com o pacote np

Correlação entre os
preços estimados e
observados

Quadrado da correrlação entre os preços


observados e verificados (R2)

Erro médio absoluto (Mean Absolute Error)

Erro médio relativo (Mean Absolute Percentage Error)


Neste caso o MAPE = 17,5%

Raiz do erro médio quadrático (Root Mean Square Error)


Exemplo 7 Nadaraya – Watson com o pacote np
dados=read.csv("c:/curso R/dados/ToyotaCorolla.csv",sep=",") # importa dados
preco = dados$Price
km = dados$KM
idade = dados$Age Preço = funcão(km,idade)

library(np) # carrega pacote


modelo=npreg(preco~km+idade) # regressão não paramétrica

plot(modelo)
Exemplo 7 Nadaraya – Watson com o pacote np

Com duas variáveis explicativas o comando plot(modelo) abre uma janela com o
gráfico das médias estimadas em função da idade e quilometragem.

Após o primeiro gráfico o próprio programa inicia a rotação do gráfico, interrompida


apenas pelo comando ESC.
Modelo de escolha binária - regressão Logística
Regressão logística
David Roxbee Cox, DR. The regression analysis of binary sequences (with
discussion). Journal of the Royal Statistical Society. Series B, 20: 215-242, 1958.

David Roxbee Cox

https://www.nuffield.ox.ac.uk/users/cox/cox48.pdf

https://papers.tinbergen.nl/02119.pdf
Regressão logística
Neste caso a variável dependente é binária Y  {0,1} e representa, por
exemplo, uma decisão entre duas escolhas ou um desfecho entre dois
resultados possíveis.
1
PY  1 
1  exp  0  1 X1  ...   k X k   

1
PY  0  1  PY  1  1 
1  exp  0  1 X1  ...   k X k   

Coeficientes de regressão.estimados pelo método da máxima


verossimilhança:
1 yi yi
n  1   1 
Max  1    
 0 , 1 ,..., k i 1  1  exp  0  1 X i1  ...   k X ik  1  exp  0  1 X i1  ...   k X ik 

log

n 
  1  1 
Max  1  yi  log   yi log 
 0 , 1 ,..., k i 1 
  1  exp  0  1 X i1  ...   k X ik   1  exp  0  1 X i1  ...   k X ik  
Exemplo 8 (Neter et al, 1985) – Classificação entre falha e sucesso
O RH de uma desenvolvedora de software está estudando o efeito do
tempo de experiência em programação computacional sobre a habilidade
para completar, dentro de um determinado prazo, uma tarefa difícil. Para
o estudo foi realizado um experimento com vinte e cinco programadores
em que todos receberam a mesma tarefa. A experiência (em meses) de
cada programador e o respectivo desfecho do experimento (1 tarefa
concluída, 0 tarefa não concluída) são apresentados a seguir:

experiencia=c(14,29,6,25,18,4,18,12,22,6,30,11,30,5,20,13,9,32,24,13,19,4,28,22,8)
desfecho=c(0,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,1)
plot(experiencia,desfecho)
Exemplo 8 Boxplots
boxplot(experiencia~desfecho,xlab="desfecho",ylab="experiência")

Maior experiência
para o grupo que
concluiu a tarefa
dentro do prazo

tapply(experiencia,desfecho,mean)
Exemplo 8 Ajuste do modelo
# Ajuste do modelo de regressão logístico
modelo=glm(desfecho~experiencia,family=binomial)
summary(modelo) Pdesfecho  1 | experiencia   1
1 exp (  0  1experienci a )

Parameter Estimates
Variable DF Estimate Std Error Chi-Sq Pr > Chi-Sq
INTERCEPT 1 -3.0597 1.2594 5.9029 0.0151
EXPERIE 1 0.1615 0.0650 6.1760 0.0129

Pdesfecho  1 | experiencia   1
1 exp ( 3,0597  0,1615 experienci a ) 
Exemplo 8 Probabilidades estimadas

plot(experiencia,modelo$fitted,xlab="esperiência",ylab="Probabilidade(desfecho=1)")
Chance (odds)

Pdesfecho 1|experienci a 
odds 
1 Pdesfecho 1|experienci a 

Pdesfecho  1 | experiencia   1
1 exp (  0  1experienci a )

 P desfecho 1|experienci a  
log    0  1experienci a
 1 P desfecho 1|experienci a  
Logito = log(odds)
Razão de chances (Odds ratio)

 P desfecho 1|experienci a  
log    0  1experienci a
 1 P desfecho 1|experienci a  
 P desfecho 1|experienci a 1 
log    0  1 experienci a  1
 1 P desfecho 1|experienci a 1 

 P desfecho 1|experienci a 1   P desfecho 1|experienci a  


log
       log 1 P desfecho 1|experienci a    1
 1 P desfecho 1| experienci a 1   

P desfecho 1|experienci a 1


1 P desfecho 1|experienci a 1
 exp 1
P desfecho 1|experienci a 
Odds ratio

1 P desfecho 1|experienci a 

Medida do efeito do incremento de uma unidade na variável explicativa


Exemplo 8 Odds ratio

odds ratio  exp(0,1615)  1,175

A chance aumenta em 17,5% para um mês adicional de experiência.


Exemplo 9 Aceitação de empréstimo (Ledolter, 2013)

Uma campanha do Universalbank mostrou que cerca de 9% de seus


clientes aceitaram propostas de empréstimos pessoais oferecidas pelo
banco.

Visando aumentar este percentual o banco tem interesse em desenvolver


um modelo capaz de identificar os clientes mais propensos à aceitação
de propostas de empréstimos. Com base nos resultados fornecidos pelo
modelo, o banco poderá aprimorar as propostas de empréstimos
pessoais oferecidas aos clientes

Para alcançar este objetivo a equipe de BI do banco conta com um


conjunto de dados de 5000 clientes, contendo uma variedade de
informações demográficas (idade, renda, etc), relacionamentos dos
clientes com o banco (correntistas, hipotecas, seguros, etc) e respostas
dos clientes à proposta de empréstimo (aceitação ou recusa) ao longo da
última campanha realizada pelo banco.

# carrega dados dos 5000 clientes


loan = read.csv("C:/curso R/aula3/UniversalBank.csv“)
Exemplo 9 Dados
head(loan) # mostra dados dos 6 primeiros clientes no objeto loan

Age = idade em anos


Experience = experiência profissional em anos
Income = renda do cliente
ZIP.code = CEP
Family = tamanho da família (1, 2, 3, 4)
CCAvg = despesa média mensal no cartão de crédito
Education = undergraduate, graduate, professional
Mortgage = tamanho da hipoteca
PersonalLoan = Aceita ou Recusa proposta de empréstimo
SecuritiesAccount = Sim ou Não
CDAccount = Capital Dividend Account Sim ou Não
Online = Sim ou Não
CreditCard = Sim ou Não
Exemplo 9 Recodifica variáveis

# Recodificação das variáveis


response=loan$PersonalLoan # respostas dos clientes Sim = 1, Não = 0
MeanRes=mean(response) # proporção de respostas positivas

# Families: 4 grupos (1, 2, 3, 4) e 3 dummies


# categoria de referência : família unipessoal
v1=rep(1,dim(loan)[1])
v2=rep(0,dim(loan)[1])
loan$FamSize2=ifelse(loan$Family==2,v1,v2)
loan$FamSize3=ifelse(loan$Family==3,v1,v2)
loan$FamSize4=ifelse(loan$Family==4,v1,v2)

# Escolaridade: 3 níveis e 2 dummies


# categoria de referência : undergraduate
loan$Educ2=ifelse(loan$Education==2,v1,v2)
loan$Educ3=ifelse(loan$Education==3,v1,v2)
Exemplo 9 Matriz de dados

# Matriz de dados
xx=cbind(response,Age=loan$Age,Exp=loan$Experience,Inc=loan$Income,Fa
m2=loan$FamSize2,Fam3=loan$FamSize3,Fam4=loan$FamSize4,CCAve=loa
n$CCAvg,Mort=loan$Mortgage,SecAcc=loan$SecuritiesAccount,CD=loan$CD
Account,Online=loan$Online,CreditCard=loan$CreditCard,Educ2=loan$Educ2,
Educ3=loan$Educ3)

Variável Variáveis
dependente independentes
Exemplo 9 Amostras de treinamento e validação

# Divide o conjunto de dados em amostra de treinamento (in sample)


# e amostra de validação (out sample).
n=dim(loan)[1] # número de clientes, tamanho da base
n1=floor(n*(0.6)) # tamanho do conjunto in sample 60% da base de dados
n2=n-n1 # tamanho do conjunto out sample 40% da base de dados

# conjunto de treinamento é uma AAS de tamanho n1 dos 5000 clientes


train=sample(1:n,n1) # índices dos clientes na amostra insample
xx=xx[,-1] # retira variável resposta (primeira coluna)

# conjunto de treinamento
xtrain = xx[train,] # variáveis explicativas
ytrain = response[train] # variável dependente

# conjunto de validação
xnew = xx[-train,] # variáveis explicativas
ynew = response[-train] # variável expllicativa
Exemplo 9 Ajusta modelo
m2=glm(response~.,family=binomial,data=data.frame(response=ytrain,xtrain))
summary(m2)
Exemplo 9 Probabilidades estimadas
# probabilidades de respostas positivas dos clientes do conjunto de validação
ptest=predict(m2,newdata=data.frame(xnew),type="response")

# probabilidades previstas contra respostas dos clientes


plot(ptest,ynew)

Respostas positivas

Respostas negativas

P(resposta positiva)
Exemplo 9 Matriz de confusão

SE P(resposta positiva) > 0,5 ENTÃO resposta será positiva


SE P(resposta positiva)  0,5 ENTÃO resposta será negativa

previsao = floor(ptest+0.5)
observado = ynew
tabela = table(observado,previsao)
tabela

erro=(tabela[1,2]+tabela[2,1])/n2
erro
(19 + 67) / 2000
19 + 67 2000 = total
total de de clientes no
classificações conjunto
erradas out sample
Exemplo 9 Matriz de confusão

SE P(resposta positiva) > 0,5 ENTÃO resposta será positiva


SE P(resposta positiva)  0,5 ENTÃO resposta será negativa

previsao = floor(ptest+0.5)
observado = ynew
tabela = table(observado,previsao)
tabela

Acurácia = (1785 + 129) / 2000 = 0,957 (acertos / total de casos)

Sensibilidade = 129 / (129 + 19) = 0,872

Especificidade = 1785 / (1785 + 67) = 0,964


Exemplo 9 Curva ROC - Receiver Operating Characteristic Curve
# função para desenhar a curva ROC
roc = function(p,y){
y = factor(y)
n = length(p)
p = as.vector(p)
Q <- p > matrix(rep(seq(0,1,length=500),n),ncol=500,byrow=TRUE)
fp = colSums((y==levels(y)[1])*Q)/sum(y==levels(y)[1])
tp = colSums((y==levels(y)[2])*Q)/sum(y==levels(y)[2])
plot(fp, tp, xlab="1-Specificity", ylab="Sensitivity")
abline(a=0,b=1,lty=2,col=1)
}

# desenha a curva ROC


roc(p=ptest,y=ynew)
Exemplo 9 Curva ROC com pacote ROCR
# Pacote ROCR
library(ROCR)
data=data.frame(ptest,ynew)
pred = prediction(data$ptest,data$ynew)

# sensibilidade e especificidade (taxa de falso positivo)


perf = performance(pred, "sens", "fpr")
plot(perf)
Exemplo 10 Empresas concordatárias e saudáveis (Corrar et al, 2007)
Um dos pontos de interesse em trabalhos de perícia contábil voltados
para processos de concordatas é a emissão de uma opinião sobre a
capacidade da empresa de recuperar-se financeiramente e retomar a sua
rotina, após a concessão desse benefício legal.

Emitir uma opinião dessa natureza é sempre uma tarefa sujeita ao


questionamento por parte dos interessados, ou até mesmo da justiça,
sobretudo quando levada a efeito sem bases objetivas.

Uma forma de prevenir problemas dessa natureza pode ser a comparação


estatística da empresa em relação a outras, ou seja, buscar identificar se
a empresa que pleiteia a concordata possui características indicadoras
de que a sua classificação é compatível com a de uma empresa que se
encontre em condições financeiras saudáveis.

Considere que o perito esteja diante dessa situação e tenha que avaliar a
capacidade da empresa P&R de passar pela concordata e sair com todos
os seus compromissos honrados e em condições de continuar operando
normalmente como outras empresas. Uma abordagem para solucionar o
problema consiste em utilizar a análise discriminante.
Exemplo 10 Empresas concordatárias e saudáveis (Corrar et al, 2007)
Variável dependente (CLASS_Y): variável categórica com duas categorias
Empresas insolventes concordatárias (codificada com 1)
Empresas solventes (codificada com 2)

Variáveis independentes (X)


Sigla Nome Composição

LS Liquidez seca Ativo circulante – Estoques / Passivo circulante

GA Giro do ativo Receita de vendas / Ativo total

AVDREC Representatividade de duplicatas Estoque / Ativo total


a receber
AVEST Representatividade de estoques Passivo circulante / Passivo total

AVPC Representatividade do passivo Estoque / Custo


circulante
ESTCUS Estoque a preço de custo Fornecedores / Receita de Vendas

FORNVEN Relação fornecedores x Receita Fornecedores / Receita de vendas


de vendas
Exemplo 10 Empresas concordatárias e saudáveis (Corrar et al, 2007)

# leitura de dados
setwd("c:/cursoR")
filename="empresas.csv"
dados=read.csv2(filename,header=T,sep=",",dec=".")
names(dados)

# recodifica CLASS_Y
CLASS_Y=ifelse(dados[,1]==1,0,1)

dim(dados) # 91 empresas e 9 variáveis


length(which(CLASS_Y==0)) # CLASS_Y=0 # 49 empresas concordatárias
length(which(CLASS_Y==1)) # CLASS_Y=1 # 42 empresas solventes

# identficação das variáveis com maior capacidade de discriminar as empresas


# concordatárias e solventes
par(mfrow=c(2,4))
for (i in 2:8){
boxplot(dados[,i] ~ CLASS_Y,main=names(dados)[i],xlab="CLASS_Y")
}
Exemplo 10 Empresas concordatárias e saudáveis (Corrar et al, 2007)

AVEST e AVPC são boas variáveis discriminantes


Exemplo 10 Empresas concordatárias e saudáveis (Corrar et al, 2007)
# as empresas foram classificadas em duas amostras: insample e outsample

length(which(dados[,9]==0))
# 64 empresas na amostra insample, variável ALEAT = 0

length(which(dados[,9]==1))
# 27 empresas na amostra outsample, variável ALEAT = 1

# conjunto de treinamento (insample)


insample=which(dados[,9]==0) # ALEAT = 0
y=CLASS_Y[insample]
x=data.frame(y,dados[insample,5],dados[insample,6])
colnames(x)=c("y","AVEST","AVPC")
attach(x)

# ajusta modelo de regressão logística


modelo=glm(y~AVEST + AVPC,family=binomial)
summary(modelo)
Exemplo 10 Empresas concordatárias e saudáveis (Corrar et al, 2007)
Exemplo 10 Empresas concordatárias e saudáveis (Corrar et al, 2007)
# previsão de probabilidade de solvência
prob=predict(modelo,newdata=data.frame(AVEST,AVPC),type="response")

SE P(resposta positiva) > 0,5 ENTÃO resposta será positiva


SE P(resposta positiva)  0,5 ENTÃO resposta será negativa

previsao = floor(prob+0.5)
Performance observado = y
insample # tabela de confusão
tabela = table(observado,previsao)
tabela

# erro aparente
erro=(tabela[1,2]+tabela[2,1])/sum(tabela)
erro
Exemplo 10 Empresas concordatárias e saudáveis (Corrar et al, 2007)
# conjunto de validação (outsample)
outsample=which(dados[,9]==1) # bservações na amostra outample
y=CLASS_Y[outsample]
x=data.frame(y,dados[outsample,5],d ados[outsample,6])
colnames(x)=c("y","AVEST","AVPC")

# previsão das probabilidades de solvência


pout=predict(modelo,newdata=x[,2:3],type="response")

Performance outsample
previsao = floor(pout+0.5)
observado = y
# tabela de confusão
tabela = table(observado,previsao)
tabela

# erro aparente
erro=(tabela[1,2]+tabela[2,1])/sum(tabela)
erro
Atividade extra 1 (Corrar et al, 2007)
O gerente de uma seguradora de veículos está interessado em aprimorar a sua
política de vendas para expandir a base de clientes. Ele acredita que em muitas
situações teria condições de realizar contratos a preços mais competititvos se
tivesse uma melhor percepção da taxa de risco a que se expõe em cada operação.
Recorrendo à sua base de dados, resolveu extrair uma maostra aleatória de 36
clientes para identificar quais são as variáveis que mais contribuem para
diferenciá-los quanto à ocorrência de sisnistros. Com isso, espera poder estimar
de forma mais racionalo risco a que ficará exposto em futuras operações e,
consequentemente, conceder descontos mais adequados. A amostra de 36
clientes é apresentada a seguir:

Dados no arquivo CORRAR.csv


Atividade extra 1 (Corrar et al, 2007)
Ajuste um modelo de regressão logística capaz de descrever o relacionamento
entre a ocorrência de sinistro e as variáveis sexo, idade e estado civil. Inteprete
os coeficientes estimados.

Estime a probabilidade de sinistro para um cliente do sexo masculino, casado e


com 25 anos de idade.

Para o mesmo cliente acima qual a probabildade se ele fosse solteiro.

Use o modelo estimado para classificar todos os 36 clientes da amostra, monte a


matriz de confusão e calcule a curva ROC.

Use a mesma amostra para implementar um classificador Naive Bayes,


classifique os 36 clientes, monte a matriz de confusão e calcule a curva ROC.
A aplicação do classificador Naive Bayes requer a categorização da variável idade
por meio de faixas etárias.

Faça um gráfico com as duas curvas ROC e identifique o melhor classificador


Atividade extra 2 (Peternelli e Mello, 2011)
Considere os 100 dados simulados pelo seguinte programa R
x=rep(1:10,10) # repete 10 vezes a sequência de 1 a 10
y=as.numeric(gl(10,10))
z=rnorm(100,30,15)
coord=data.frame(x,y,z)

Estime o modelo o modelo de regressão linear múltipla.


z   0  1x   2 y   3 x 2   4 xy   5 y 2  

Dica: para estimar o modelo faça


modelo = z ~ x + y +I(x^2) + I(x*y) + I(y^2)
resultado=lm(modelo,coord)

Estime o modelo pelo método LOESS e gere e superfície de resposta.


Atividade extra 3 (Kleiber e Zeileis, 2008)
A aplicação da metodologia bootstrap em modelos de regressão pode ser
útil nos casos com pequenas amostras, dado que os modelos baseiam-se
aproximações assintóticas.

Considerando os dados do exemplo 1 no slide 15 aplique a metodologia


bootstrap para obter o intervalo de confiança do coeficiente da variável
explicativa no modelo Custos = b0 + b1Clientes + .

Execute o seguinte programa:


library(xlsx) # carrega pacote para ler planilha MS Excel
setwd("c:/curso R/dados") # diretório de trabalho
dados=read.xlsx("CSPGEORGIA.xlsx",header=TRUE,startRow=1, sheetIndex=1)
colnames(dados)=c("clientes","custos")
refit=function(data,i) coef(lm(custos ~clientes,data=dados[i,]))
library(boot)
bootstrap=boot(dados,statistic=refit,R=999) # betas estimados por bootstrap
boot.ci(bootstrap,index=1) # intervalo de confiança para b0
boot.ci(bootstrap,index=2) # intervalo de confiança para b1

Compare os resultados obtidos com os encontrados pelo método


convencional no exemplo 1.
Atividade extra 4 Registros anemométricos de São João do Cariri (Projeto Sonda)
No arquivo ventos.xls encontram-se 30 perfis diários da velocidade do
vento a 50 metros de altura coletados na estação anemométrica de Sâo
João do Cariri na Paraíba. Cada linha do arquivo contém um perfil diário
com 144 observações (resolução temporal de 10 minutos).

Faça um programa R para suavizar os perfis diários visando remover


eventuais outliers. Use o método Loess e como variável explicativa
considere a sequência de 1 até 144 (seq(1,144,1) em que cada elemento
representa um intervalo de 10 minutos ao longo do dia.

Faça gráficos para ilustrar a qualidade da suavização de dados.

http://sonda.ccst.inpe.br/
Atividade extra 5 Estimação robusta
O estimador de mínimos quadrados é sensível aos outliers e observações
influentes. Uma alternativa ao estimador de mínimos quadrados é o
estimador de mínimos desvios absoluto LAD e que corresponde à
obtenção de estimativas da mediana da variável resposta condicionadas
aos valores das variáveis explicativas. Portanto, trata-se de um caso da
regressão quantílica para  =0,5.

O modelo de precificação de automóveis desenvolvido no exemplo 3


(slide 36) e estimado por mínimos quadrados foi bastante afetado por
observações influentes. Aplique a regressão quantílica para estimar a
mediana do preço condicionada aos valores de idade e distância
percorrida pelos veículos.

Compare os resultados obtidos pela regressão quantílica com os


alcançados pelo estimador de mínimos quadrados.
Referências bibliográficas
Berndt, E.R. The practice of econometrics classic and contemporary, Addison Wesley, California,
1991.

Bhowmik, R. Data mining techniques in fraud detection, Journal of Forensics, Security and Law,
v. 3, n.3, pp. 35- 54, 2008

Corrar, L.J.M Paulo, E.; Dias Filho, J.M. Análise multivariada para os cursos de administração,
ciências contábeis e economia, São Paulo: Editora Atlas, 2007.

Kleiber, C.; Zeileis, A. Applied Econometrics with R, Springer, 2008.

Kutner, M.H.; Nachtsheim, C.J.; Neter, J. Applied linear regression models, New York: McGraw-
Hill Irwin, 2004.

Ledolter, J. Data mining and business analytics with R, New Jersey: Wiley, 2013.

Neter, J.; Kutner, M.H.; Wasserman,C.J. Applied linear regression models, New York: McGraw-Hill
Irwin, 1985.

Peternelli, L.A.; Mello, M.P. Conhecendo o R: uma visão estatística, Viçosa: Editora UFV, 2011.

Ragsdale, C.T. Modelagem e Análise de Decisão, São Paulo, Cengage Learning, 2009
Se a sua intenção é retratar a verdade, faça-a com a
simplicidade e a elegância de um alfaiate.

Albert Einstein

Você também pode gostar