Regressão Linear Simples com Exemplo
Regressão Linear Simples com Exemplo
- 1 - Introdução
- 2 - O exemplo da
rede de Pizzarias Salão do Armando
- 3 Equação de
Regressão Linear Simples
: - 4 Equação de
Regressão Estimada
: - 5 O
Método dos Mínimos Quadrados
: - 6 Obtendo o modelo da equação linear usando R
- 7 Coeficiente de determinação \(r²\):
- 8 Coeficiente de Correlação Amostral \(r_{xy}\):
1 - Introdução
Descobrir uma fórmula para prever o faturamente do seu negócio é algo bem atrativo para o dono, grupo de sócios ou acionistas. Essa fómula mágica pode ser bem simples como uma equação de reta (equação do primeiro grau) naquele velho formato \(y = a*(x) + b\). Essa equação pode ser deduzida de uma planilha com dados observados no dia-a-dia do negócio. Vamos explorar um pouco da metodologia dos mínimos quadrados (Least Square Method), desenvolvendo um exemplo matemáticamente e, em seguida, utilizar uma ferramenta como o R para validar nosso desenvolvimento e plotar um gráfico.
2 - O exemplo da rede de Pizzarias Salão do Armando
O restaurante Salões de Pizza Armando é uma rede de restaurantes de comida italiana em cinco estados. As localizações mais bem sucedidas dos restaurantes da rede Armando estão próximos a campis
universitários. Os gestores acreditam que as vendas trimestrais nesses restaurantes (vamos chamar-las de y ) estão relacionadas positivamente com o tamanho da população estudantil (que vamos chamar de x). Assim sendo, supomos que os restaurantes próximos a campis
vão gerar mais vendas do que aqueles que estão mais afastados dos campis
universitários, afinal os restaurantes próximos contam com população estudantil maior. Usando a análise de regressão, criemos uma equação (modelo) que mostre como e quanto a variável y vendas é dependente da variável x de população estudantil.
planilha de dados das vendas trimestrais do restaurante Salões de pizza do Armando:
Restaurante | Populacao | Vendas |
---|---|---|
1 | 2 | 58 |
2 | 6 | 105 |
3 | 8 | 88 |
4 | 8 | 118 |
5 | 12 | 117 |
6 | 16 | 137 |
7 | 20 | 157 |
8 | 20 | 169 |
9 | 22 | 149 |
10 | 26 | 202 |
# inserindo diretamente no código o conteúdo da planilha restaurante.csv na variável tipo texto arquivo_csv
arquivo_csv = '
"Restaurante","Populacao","Vendas"
1,2,58
2,6,105
3,8,88
4,8,118
5,12,117
6,16,137
7,20,157
8,20,169
9,22,149
10,26,202
'
# criando a variável tabela_formatada do tipo dataframe através da função read.csv, que lê um conteúdo armazenado na variável arquivo_csv;
tabela_formatada = read.csv(text=arquivo_csv, header=TRUE)
# Gerando o gráfico de núvem de pontos com a função plot
# usando como eixo x a coluna Populacao da planilha restaurante.csv e usando como eixo y a coluna Vendas da planilha restaurante.csv
# Plotando o gráfico dos pontos
plot(x=tabela_formatada$Populacao, y=tabela_formatada$Vendas, main = "Vendas Trimestrais da Rede de Pizzaria", xlab="População de Estudantes - milhares pessoas", ylab = "Vendas trimestrais - milhares R$")
3 Equação de Regressão Linear Simples
:
3.1 Na teoria tudo é muito bonito
Num mundo ideal, deveria existir uma equação da reta que interpolaria toda a núvem de pontos e que deveria seguir a seguinte forma: \[ y = \beta_0 + \beta_1*x + \epsilon \]
Sendo:
- \(y\) o valor estimado da venda
- \(\beta_0\) é um valor de constante para que o resultante ponto toque o eixo y (ou seja, onde x vale 0 portanto ponto (0,y) ).
- \(\beta_1\) é a inclinação da reta, ou seja, o coeficiente angular da reta.
- \(\epsilon\) é a parcela de erro
4 Equação de Regressão Estimada
:
4.1 Na prática, o negócio é estimar
Como não vivemos em um mundo ideal, e sim no mundo real de ifinitas possíbilidades de desconhecidas variáveis afetando o fenômeno, e equação da reta que irá descrever será estimada. \[{\hat y} = b_0 + b_1* (x)\]
Os valores para montar essa equação, ou seja, encontrar os valores de \(b_0\) e \(b_1\), devemos usar os dados das colunas vendas e população (pares x,y) fornecidos pela tabela gerando e traçando uma reta que se ajuste o melhor possível ao número de pontos visíveis no gráfico (se ajuste o melhor possível à núvem de pontos).
5 O Método dos Mínimos Quadrados
:
Para desenvolver esse cálculo utilizando um método matemático. Vamos recorrer ao Método dos Mínimos Quadrados
- O critério dos mínimos quadrados: \[min\sum(y_i - \hat y_i)^2\] Onde:
- \(y_i\) é valor observado da variável dependente para a i-ésima observação
- \(\hat y_i\) é o valor estimado da variável dependente para a i-ésima observação.
- A inclinação \(b_1\) da equação de regressão estimada. \[b_1 = {\sum_{i=0}^{n} (x_i - \bar x)*(y_i - \bar y) \over \sum_{i=0}^{n} (x_i - \bar x)^2} \] Onde:
- \(b_1\) é o valor da inclinação da reta
- \(x_i\) é o valor da variável independente da i-ésima observação
- \(y_i\) é o valor da variável dependente para a i-ésima observação
- \(\bar x\) é o valor médio da variável independente.
- \(\bar y\) é o valor médio da variável dependente.
- \(i\) é o contador, enumerador da observação
- \(n\) é o número total de observações.
- A intersecção \(b_0\) da equação de regressão estimada. \[b_0 = \bar y - b_1*(\bar x) \] Onde:
- \(b_0\) é o valor da constante que resulta onde a reta toca o eixo y
- \(x_i\) é o valor da variável independente da i-ésima observação
- \(y_i\) é o valor da variável dependente para a i-ésima observação
- \(\bar x\) é o valor médio da variável independente.
- \(\bar y\) é o valor médio da variável dependente.
5.1 -Resolução do exemplo no braço (sem ajuda do R)
Colocando as colunas (variáveis) na fórmula. + \(i\) é a unidade da rede de restaurantes. + \(x_i\) é a população de estudantes em milhares. + \(y_i\) são as vendas trimestrais em R$ x1.000
5.1.1 -Desenvolvendo usando o método dos mínimos quadrados manualmente
5.1.1.1 -Encontrando o valor médio das vendas trimestrais \(\bar y\) na amostra:
- Temos 10 amostras, portanto \(n=10\) O valor da venda média das 10 amostras é \[\bar y = \sum_{i=1}^{n}{(y_i)\over n}\] então \[\bar y = {(58 + 105 + 88 + 118 + 117 + 137 + 157 + 169 + 149 + 202)\over 10 }\] \[\bar y = {(1.300)\over 10 } = {130}\]
- Portanto o valor de venda média nas 10 amostras é \[\bar y = 130 \]
5.1.1.2 -Encontrando o valor médio da população de estudantes \(\bar x\) nas 10 amostras:
O valor da população média das 10 amostras é \[\bar x = \sum_{i=1}^{n=10}{(x_i)\over n}\] então
\[\bar x = {(2 + 6 + 8 + 8 + 12 + 16 + 20 + 20 + 22 + 26)\over 10 }\] \[\bar x = {(140)\over 10 } = {14}\]
- Portanto valor médio da população de estudantes \(\bar x\) nas 10 amostras é \[\bar x = 14\]
5.1.1.3 Desenvolvendo os mínimos quadrados:
Restaurante i | Populacao Xi | Vendas Yi | \(x_i - \bar x\) | \(y_i - \bar y\) | \((x_i - \bar x)*(y_i - \bar y)\) | \((x_i - \bar x)^2\) |
---|---|---|---|---|---|---|
1 | 2 | 58 | \(-12=(2 -14)\) | \(-72=(58-130)\) | \(864=((2-14)*(58-130))\) | \(144=(-12)²\) |
2 | 6 | 105 | \(-8=(6-14)\) | \(-25=(105-130)\) | \(200=((6-14)*(105-130))\) | \(64=(-8)^2\) |
3 | 8 | 88 | \(-6=(8-14)\) | \(-42=(88-130)\) | \(252=((8-14)*(88-130))\) | \(36=(-6)²\) |
4 | 8 | 118 | \(-6=(8-14)\) | \(-12=(118-130)\) | \(72=((8-14)*(118-130))\) | \(36=(-6)^2\) |
5 | 12 | 117 | \(-2=(12-14)\) | \(-13=(117-130)\) | \(26=((12-14)*(117-130))\) | \(4=(-2)²\) |
6 | 16 | 137 | \(2=(16-14)\) | \(7=(137-130)\) | \(14=((16-14)*(137-130))\) | \(4=(2)^2\) |
7 | 20 | 157 | \(6=(20-14)\) | \(27=(157-130)\) | \(162=((20-14)*(157-130))\) | \(36=(6)^2\) |
8 | 20 | 169 | \(6=(20-14)\) | \(39=(169-130)\) | \(234=((20-14)*(169-130))\) | \(36=(6)\) |
9 | 22 | 149 | \(8=(22-14)\) | \(19=(149-130)\) | \(152=((22-14)*(149-130))\) | \(64=(8)^2\) |
10 | 26 | 202 | \(12=(26-14)\) | \(72=(202-130)\) | \(864=((26-14)*(202-130))\) | \(144=(12)^2\) |
:—–: | :—–: | :—–: | :—–: | :—–: | :—–: | :—–: |
Total | \(\sum x_i\) | \(\sum y_i\) | \(\sum(x_i - \bar x)(y_i - \bar y)\) | \(\sum (x_i - \bar x)^2\) | ||
valores | 140 |
1.300 |
N/A | N/A | 2.840 |
568 |
Já sabemos que para encontrar \(\hat y = b_0 + b_1*x\), temos que encontrar primeiro a inclinação \(b_1\) e a partir dela, a constante \(b_0\). Vamos usar os valores da tabela.
\[b_1 = {\sum_{i=0}^{n=10} (x_i - \bar x)*(y_i - \bar y)\over \sum_{i=0}^{n=10} (x_i - \bar x)^2}\] \[ b_1 = {2.840 \over 568} \] \[ b_1 = 5 \] Agora vamos calcular \(b_0\): \[b_0 = \bar y - b_1*\bar x \] \[b_0 = {130 - 5*(14)}\] \[b_0 = 60\] Então a equação \({\hat y} = b_0 + b_1* x\) fica \[ \hat y = 60 + 5*x\] Podemos agoras por exemplo estimar, com nosso modelo, qual seria a quantidade de vendas se a rede do armando abrisse um restaurante em um ponto com população de estudantes de 16 mil estudantes: \[\hat y = b_0 + b_1*(x)\] \[\hat y = 60 + 5*(16)\] \[\hat y = 140\] ou seja, R$ 140.000,00
6 Obtendo o modelo da equação linear usando R
6.1 A função `r lm() `
do R
6.1.1 Descobrindo \(b_0\) e \(b_1\) com o R:
Através da função lm (linear model), podemos fazer o R calcular para nós os valores de \(b_0\) e \(b_1\), fornecendo como entrada a planilha de vendas x população. Como já haviamos carregado a planilha de vendas x população anteriormente na variável tabela_formatada
, vamos utiliza-la no código abaixo.
# Plotando o gráfico dos pontos
plot(x=tabela_formatada$Populacao, y=tabela_formatada$Vendas, main = "Vendas Trimestrais da Rede de Pizzaria", xlab="População de Estudantes - milhares pessoas", ylab = "Vendas trimestrais - milhares R$")
# aplique a função lm para obter os coeficientes b0 e b1.
lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada)
##
## Call:
## lm(formula = tabela_formatada$Vendas ~ tabela_formatada$Populacao,
## data = tabela_formatada)
##
## Coefficients:
## (Intercept) tabela_formatada$Populacao
## 60 5
Como podemos per, o R nos fala que Coefficients
tem valor \(b_0\) = 60 - onde intercepta e valor de coeficiênte inclinação de reta \(b_1\) = 5 . Portanto, comprovando nosso \(\hat y = 60 + 5*(x)\) obtido no desenvolvimento manual do exercício.
6.2 A função `r abline() `
do R
6.2.1 Desenhando no R a reta da função \(\hat y = b_0 + B_1*(x)\) :
Agora vamos usar a função abline do R em conjunto com a função lm e plot vistas acima no código anterior para traçar a reta do modelo \(\hat y = 60 + 5*(x)\) no gráfico de núvem de pontos formado pelos valores de vendas e população:
# Plotando o gráfico dos pontos
plot(x=tabela_formatada$Populacao, y=tabela_formatada$Vendas, main = "Vendas Trimestrais da Rede de Pizzaria", xlab="População de Estudantes - milhares pessoas", ylab = "Vendas trimestrais - milhares R$")
lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada)
##
## Call:
## lm(formula = tabela_formatada$Vendas ~ tabela_formatada$Populacao,
## data = tabela_formatada)
##
## Coefficients:
## (Intercept) tabela_formatada$Populacao
## 60 5
7 Coeficiente de determinação \(r²\):
Nosso objetivo, uma vez gerado nosso modelo, é conseguir medir a qualidade
do mesmo para acertar em suas estimativas.
7.1 Introdução
Como podemos verificar, a equação \(\hat y = 60 + 5*(x)\) para estimar um valor aproximado
para as Vendas trimestrais
de cada unidade
da rede de restaurantes em função da População Estudantil
próxima.
Contudo observe que, se comprarmos , para uma dada população de estudantes, o valor medido
e o valor estimado
são diferentes.
Vamos tomar como exemplo, o restaurante 1 da rede Armando:
7.1.0.1 Restaurante 1 Medido:
Restaurante | População | Vendas Trimestre |
---|---|---|
\(i\) | \(x_i\) | \(y_i\) |
—————- | ————— | ———————- |
1 | 2 | 58 |
7.1.0.2 Restaurante 1 Estimado por \(\hat y_1 = 60 + 5*(x_1)\) :
- \(x_1\) é 2, portanto \[ \hat y_1 = 60 + 5*(2)\] \[ \hat y_1 = 60 + 10\] \[ \hat y_1 = 70\]
Restaurante | População | Vendas Trimestre |
---|---|---|
\(i\) | \(x_i\) | \(y_i\) |
—————- | ————— | ———————- |
1 | 2 | 70 |
A diferença
entre o valor de vendas medido
\(y_1 = 58\) e o valor de vendas estimado
pelo modelo \(\hat y_i = 60 + 5*(x_i)\) , que é \(\hat y_1 = 70\) para a observação \(i\) é chamado de resíduo
. Neste caso então, para o restaurante 1, o erro ou resíduo é:
\[Resíduo_1 = \hat y_1 - y_1\] \[ Resíduo_1 = 70 - 58 \] \[ Resíduo_1 = 12 \] A soma dos quadrados de todos os resíduos, ou seja, a soma da imprecisão de todos os pontos medidos comparados aos respectivos valores estimados pelo nosso modelo gera a soma dos quadrados dos resíduos e representa a quantidade de erros minimizada pelo método dos mínimos quadrados.
7.2 Soma dos Quadrados dos Resíduos \(SQRes\) :
Também conhecida como Residual sum of Squares (RSS), os resíduos são os erros, a diferença entre o valor medido e o valor estimado na observação, como demonstrado acima \(Resíduo_1 = \hat y_1 - y_1\). Portanto como queremos futuramente mensurar a eficácia da regressão linear do nosso exemplo, teremos de obter a soma dos erros de todas as observações, fomando um somatório \(SQRes = \sum_{i=1}^{n}(y_i - \hat y_i)²\) que será desenvolvido manualmente abaixo:
7.2.1 Desenvolvendo o somatório \(SQRes\) manualmente sem ajuda o R:
Para fazer a soma dos quadrados dos resíduos das 10 observações, basta executar a soma das linhas (observações) da coluna quadrados do Resíduo na planilha abaixo executando, portanto o seguinte somatório:
\[SQRes = \sum_{i=1}^{n=10} (y_i - \hat y_i)^2\]
Restaurante | População | Vendas Trimestre | Vendas Estimadas | Residuo | Quadrado do Residuo |
---|---|---|---|---|---|
\(i\) | \(x_i\) | \(y_i\) | \(\hat y_i = 60 + 5*(x_i)\) | \(y_i - \hat y_i\) | \((y_i - \hat y_i)^2\) |
—————- | ————— | ———————- | ———————- | ————- | ———————— |
1 | 2 | 58 | \(70 = 60 +5*(2)\) | \((58-70)=-12\) | \((58 - 70)^2=144\) |
2 | 6 | 105 | \(90 = 60 + 5*(6)\) | \((105-90)=15\) | \((105-90)^2=225\) |
3 | 8 | 88 | \(100 = 60 + 5*(8)\) | \((88-100)=-12\) | \((88-100)^2=144\) |
4 | 8 | 118 | \(100 = 60 + 5*(8)\) | \((118-100)=18\) | \((118-100)²=324\) |
5 | 12 | 117 | \(120 = 60 + 5*(12)\) | \((117-120)=-3\) | \((117-120)^2=9\) |
6 | 16 | 137 | \(140 = 60 + 5*(16)\) | \((137-140)=-3\) | \((137-140)²=9\) |
7 | 20 | 157 | \(160 = 60 + 5*(20)\) | \((157-160)=-3\) | \((157-160)²=9\) |
8 | 20 | 169 | \(160 = 60 + 5*(20)\) | \((169-160)=9\) | \((169-160)^2=81\) |
9 | 22 | 149 | \(170 = 60 + 5*(22)\) | \((149-170)=-21\) | \((149-170)²=441\) |
10 | 26 | 202 | \(190 = 60 + 5*(26)\) | \((202-190)=12\) | \((202-190)^2=144\) |
—————- | ————— | ———————- | ———————- | ————- | ———————— |
SQRes |
\(\sum_{i=1}^{n=10} (y_i - \hat y_i)^2\) 1.530 |
\[SQRes = {\sum_{i=1}^{n=10} (y_i - \hat y_i)^2} = ({144+225+144+324+9+9+9+81+441+144}) = 1.530\] Portanto \[SQRes = 1.530\] é o erro para se utilizar a equação de regressão estimada \(\hat y = 60 + 5*(x)\) para estimar vendas.
7.2.2 Desenvolvendo o somatório \(SQRes\) no o R:
Pare obter o valor da Soma dos Quadrados dos Resíduos \(SQRes\) no R
podemos fazer de 2 formas:
- Metodo 1: reproduzir \(\sum_{i=1}^{n=10} (y_i - \hat y_i)^2\) com
`r sum(resid(modelo_obtido)^2)`
- Metodo 2: Usar a função
`r deviance()`
# Plotando o gráfico dos pontos
plot(x=tabela_formatada$Populacao, y=tabela_formatada$Vendas, main = "Vendas Trimestrais da Rede de Pizzaria", xlab="População de Estudantes - milhares pessoas", ylab = "Vendas trimestrais - milhares R$")
# obtendo o modelo y= 60 + 5*(x)
modelo_obtido = lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada)
#Escrevendo a equação do modelo no topo do gráfico
coficientes <- round(coef(modelo_obtido), 3)
mtext(bquote(y == .(coficientes[2])*x + .(coficientes[1])), adj=1, padj=0)
# Trançando a reta da função y= 60 + 5*(x)
abline(lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada), col="blue")
## [1] 1530
## [1] 1530
7.3 Soma dos Quadrados Total \(SQTot\):
Também conhecida como Total Sum of Squares (TSS) nos diz quanto de variação existe na variável dependente, no caso, em Vendas Trimestrais.
7.3.1 Desenvolvendo o somatório \(SQTot\) manualmente sem ajuda o R:
Lembrando que o valor médio das vendas trimestrais \(\bar y\) é a média das vendas observadas: \[\bar y = {\sum_{i=1}^{n=10} y_i \over n }\] \[\bar y = {54+105+88+118+117+137+157+169+149+202\over 10} = {1.300\over 10}=130\] \(\bar y = 130\)
\[SQTot = \sum_{i=1}^{n=10} (y_i - \bar y)^2\]
Restaurante | População | Vendas Trimestre | Desvio | Desvio Elevado ao Quadrado |
---|---|---|---|---|
\(i\) | \(x_i\) | \(y_i\) | \(y_i - \bar y\) | \((y_i - \bar y)^2\) |
—————- | ————— | ———————- | —————- | ————————————- |
1 | 2 | 58 | \(-72=(58-130)\) | \(5.184=(58-130)^2\) |
2 | 6 | 105 | \(-25=(105-130)\) | \(625=(105-130)^2\) |
3 | 8 | 88 | \(-42=(88-130)\) | \(1.764=(88-130)\) |
4 | 8 | 118 | \(-12=(118-130)\) | \(144=(118-130)^2\) |
5 | 12 | 117 | \(-13=(117-130)\) | \(169=(117-130)²\) |
6 | 16 | 137 | \(7=(137-130)\) | \(49=(137-130)^2\) |
7 | 20 | 157 | \(27=(157-130)\) | \(729=(157-130)²\) |
8 | 20 | 169 | \(39=(169-130)\) | \(1.521=(169-130)²\) |
9 | 22 | 149 | \(19=(149-130)\) | \(361=(149-130)²\) |
10 | 26 | 202 | \(72=(202-130)\) | \(5.184=(202-130)²\) |
—————- | ————— | ———————- | —————– | ———————————— |
SQTot |
\(\sum_{i=1}^{n=10}(y_i - \bar y)^2\) 15.730 |
7.3.2 Desenvolvendo o somatório \(SQTot\) no o R:
- Metodo 1: reproduzir \(\sum_{i=1}^{n=10} (y_i - \bar y)^2\) com
`r sum((tabela_formatada$Vendas - mean(tabela_formatada$Vendas))^2)`
# Plotando o gráfico dos pontos
plot(x=tabela_formatada$Populacao, y=tabela_formatada$Vendas, main = "Vendas Trimestrais da Rede de Pizzaria", xlab="População de Estudantes - milhares pessoas", ylab = "Vendas trimestrais - milhares R$")
# obtendo o modelo y= 60 + 5*(x)
modelo_obtido = lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada)
#Escrevendo a equação do modelo no topo do gráfico
coficientes <- round(coef(modelo_obtido), 3)
mtext(bquote(y == .(coficientes[2])*x + .(coficientes[1])), adj=1, padj=0)
# Trançando a reta da função y= 60 + 5*(x)
abline(lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada), col="blue")
# metodo 1 - usando a função sum para fazer o somatório de (venda_observada - media_venda_observada)^2
sum((tabela_formatada$Vendas - mean(tabela_formatada$Vendas))^2)
## [1] 15730
7.4 Soma dos Quadrados da Regressão \(SQReg\):
7.4.1 Desenvolvendo o somatório \(SQReg\) manualmente sem ajuda o R:
\[SQReg = \sum_{i=1}^{n=10} (\hat y_i - \bar y)^2\]
O valor da venda média das 10 amostras é \(\bar y = \sum_{i=1}^{n}{(yi)\over n}\), então \[\bar y = {(58 + 105 + 88 + 118 + 117 + 137 + 157 + 169 + 149 + 202)\over 10 }\] \[\bar y = {(1.300)\over 10 }\] Portanto o valor de venda média nas 10 amostras é \[\bar y = 130 \] Tendo em mãos o valor de venda média \(\bar y = 130\), vamos desenvolver a soma dos quadrados da regressão:
Restaurante | População | Vendas Trimestre | Quadrado Venda estimada - Venda média |
---|---|---|---|
\(i\) | \(x_i\) | \(y_i\) | \((\hat y_i - \bar y)^2\) |
—————- | ————— | ———————- | ——————————– |
1 | 2 | 58 | \((70 - 130)^2=3.600\) |
2 | 6 | 105 | \((90 - 130)^2=1.600\) |
3 | 8 | 88 | \((100 - 130)^2=900\) |
4 | 8 | 118 | \((100 - 130)^2=900\) |
5 | 12 | 117 | \((120 - 130)^2=100\) |
6 | 16 | 137 | \((140 - 130)^2=100\) |
7 | 20 | 157 | \((160 - 130)^2=900\) |
8 | 20 | 169 | \((160 - 130)^2=900\) |
9 | 22 | 149 | \((170 - 130)^2=1.600\) |
10 | 26 | 202 | \((190 - 130)^2=3.600\) |
—————- | ————— | ———————- | —————– |
SQReg |
14.200 |
7.4.2 Desenvolvendo o somatório \(SQReg\) no o R:
- Metodo 1: reproduzir \(\sum_{i=1}^{n=10} (y_i - \hat y)^2\) com
`r sum((predict(modelo_obtido) - mean(tabela_formatada$Vendas))^2)`
# Plotando o gráfico dos pontos
plot(x=tabela_formatada$Populacao, y=tabela_formatada$Vendas, main = "Vendas Trimestrais da Rede de Pizzaria", xlab="População de Estudantes - milhares pessoas", ylab = "Vendas trimestrais - milhares R$")
# obtendo o modelo y= 60 + 5*(x)
modelo_obtido = lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada)
#Escrevendo a equação do modelo no topo do gráfico
coficientes <- round(coef(modelo_obtido), 3)
mtext(bquote(y == .(coficientes[2])*x + .(coficientes[1])), adj=1, padj=0)
# Trançando a reta da função y= 60 + 5*(x)
abline(lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada), col="blue")
# metodo 1 - usando a função sum para fazer o somatório de (venda_estimada - media_venda_observada)^2
sum((predict(modelo_obtido) - mean(tabela_formatada$Vendas))^2)
## [1] 14200
7.5 Soma dos Quadrados Total em função das Somas dos Quadrados de Regressão e Resíduo:
É possível obter um destes 3 coeficiêntes:
- \(SQTot\)
- \(SQReg\)
- \(SQRes\)
Sabendo o valor de pelo menos dois deles. A soma dos quadrados totais leva este nome porque ela é a união de 2 componentes: a soma dos quadrados da regressão e, a soma dos quadrados dos resíduos. Portanto \[SQTot = {SQReg + SQRes}\] \[ 15.730 = {14.200 + 1.530} \] A razão entre Soma dos Quadrados da Regressão* e Soma dos Quadrados Totais** nos dará uma métrica de desempenho do modelo de regressão, como veremos a seguir.
7.6 Chegando finalmente no Coeficiente de determinação \(r²\):
Podemos estabelecer uma razão de eficiência, gerando uma espécie de nota de 0 a 100, da nossa equação de regressão para estimar as vendas do restaurante. Essa razão é chamada de Coeficiênte de Determinação
representada por \(r²\).
\[ r^2 = {SQReg \over SQTot}\]
Quando geramos esta razão, ela pode ser interpretada como a soma dos quadrados totais que pode ser explicada usando a equação de regressão estimada.
### Desenvolvendo o coeficiênte de determinação \(r²\) manualmente sem ajuda o R:
No exemplo anterior
\[ r² = {SQReg \over SQTot} = { 14.200 \over 15.730 } = 0,9027 = 90,27\%\]
7.6.1 Desenvolvendo o coeficiênte de determinação \(r²\) no R com `r sum((predict(modelo_obtido) - mean(tabela_formatada$Vendas))^2)/sum((tabela_formatada$Vendas - mean(tabela_formatada$Vendas))^2)`
.
# Plotando o gráfico dos pontos
plot(x=tabela_formatada$Populacao, y=tabela_formatada$Vendas, main = "Vendas Trimestrais da Rede de Pizzaria", xlab="População de Estudantes - milhares pessoas", ylab = "Vendas trimestrais - milhares R$")
# obtendo o modelo y= 60 + 5*(x)
modelo_obtido = lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada)
#Escrevendo a equação do modelo no topo do gráfico
coficientes <- round(coef(modelo_obtido), 3)
mtext(bquote(y == .(coficientes[2])*x + .(coficientes[1])), adj=1, padj=0)
# Trançando a reta da função y= 60 + 5*(x)
abline(lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada), col="blue")
# Método 1 - Achando r² fazendo SQReg/SQTot
sum((predict(modelo_obtido) - mean(tabela_formatada$Vendas))^2)/sum((tabela_formatada$Vendas - mean(tabela_formatada$Vendas))^2)
## [1] 0.9027336
Isso quer dizer que a equação \(\hat y = 60 + 5*(x)\) consegue explicar \(90,27\%\) da variabilidade das vendas. Isso quer dizer que a equação linear tem um ajuste excelente ao problema.
Contudo, para que o modelo tenha significancia estatística, devemos considerar o tamanho da amostra e a distribuição amostral apropriada. Um grande valor de $r²$
apenas nos diz que as observações se agrupam mais estreitamente nas proximidade da reta.
8 Coeficiente de Correlação Amostral \(r_{xy}\):
Pode-se identificar a intensidade de associação entre as variáveis População Estudantil e Vendas Trimestrais , ou seja, a correlação entre as variáveis \(x\) e \(y\) através da equação:
\[r_{x,y} = { (sinal{b_1})* \sqrt{r²} }\] Onde:
- \(b_1\) é a inclinação da equação da reta.
- \(r_{x,y}\) pode varia de -1 a + 1.
8.0.1 Desenvolvendo o coeficiênte de correlação \(r_{x,y}\) manualmente sem ajuda o R:
Tomando nosso exemplo, a equação de regressão linear estimada encontrada \(\hat y = 60 + 5*(x)\) tem inclinação da reta positiva já que \(b_1\) vale \(+5\), temos:
\[
r_{x,y} = {sinal_{b1}*\sqrt{r²}}
\]
\[
r_{x,y} = +\sqrt{0,9027}
\]
\[
r_{x,y} = + 0,9501
\]
Portanto com \(r_{x,y} = +0,9501\) há uma forte correlação linear positiva entre a variável Vendas Trimestrais
e População Estudantil
.
8.0.2 Desenvolvendo o coeficiênte de correlação \(r_{x,y}\) no R:
- Método 1 - Encontrando a correlação entre as duas variáveis \(x\) e \(y\) usando
`r sqrt(sum((predict(modelo_obtido) - mean(tabela_formatada$Vendas))^2)/sum((tabela_formatada$Vendas - mean(tabela_formatada$Vendas))^2))`
- Método 2 - Encontrando a correlação entre as duas variáves \(x\) e \(y\) usando a função
`r cor()`
# Plotando o gráfico dos pontos
plot(x=tabela_formatada$Populacao, y=tabela_formatada$Vendas, main = "Vendas Trimestrais da Rede de Pizzaria", xlab="População de Estudantes - milhares pessoas", ylab = "Vendas trimestrais - milhares R$")
# obtendo o modelo y= 60 + 5*(x)
modelo_obtido = lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada)
#Escrevendo a equação do modelo no topo do gráfico
coficientes <- round(coef(modelo_obtido), 3)
mtext(bquote(y == .(coficientes[2])*x + .(coficientes[1])), adj=1, padj=0)
# Trançando a reta da função y= 60 + 5*(x)
abline(lm(tabela_formatada$Vendas ~ tabela_formatada$Populacao, data=tabela_formatada), col="blue")
# Método 1 - Achando r(x,y) fazendo raiz de SQReg/SQTot
sqrt(sum((predict(modelo_obtido) - mean(tabela_formatada$Vendas))^2)/sum((tabela_formatada$Vendas - mean(tabela_formatada$Vendas))^2))
## [1] 0.950123
# Método 2 - Achando r(x,y) usando a função cor()
cor(tabela_formatada$Vendas,predict(modelo_obtido))
## [1] 0.950123