Regressão Polinomial. Este procedimento ajusta até 10 diferentes modelos de regressão para duas variáveis, sendo uma dependente e uma independente. A variável independente é expandida num polinômio até o décimo grau com geração de novas variáveis.Vou dar dois exemplos de como utilizar a Regressão Polimonial no R

1 Leitura da base de dados

library(readr)
data <- read_delim("Bases/poly.csv", ";", 
                   escape_double = FALSE, col_types = cols(Area = col_number(), 
                                                           Price = col_number()), trim_ws = TRUE)

1.0.1 Renomeando as variaveis

x = data $ Area
y = data $ Price

2 Ajustando a Regressão Linear

Para comparar os resultados da regressão linear e polinomial, primeiramente ajustamos a regressão linear

model1 = lm (y ~ x)
model1 $ fit
##        1        2        3        4        5        6        7        8 
## 169.0995 178.9081 188.7167 218.1424 223.0467 266.6949 291.7068 296.6111 
##        9       10 
## 316.2282 335.8454
model1 $ coeff
##  (Intercept)            x 
## 120.05663769   0.09808581

3 Dataframe

Criando um dataframe onde a nova variável é x e x square.

new_x = cbind (x, x ^ 2)
new_x
##          x        
##  [1,]  500  250000
##  [2,]  600  360000
##  [3,]  700  490000
##  [4,] 1000 1000000
##  [5,] 1050 1102500
##  [6,] 1495 2235025
##  [7,] 1750 3062500
##  [8,] 1800 3240000
##  [9,] 2000 4000000
## [10,] 2200 4840000

3.1 Agora ajustamos o OLS usual aos novos dados

model2 = lm (y ~ new_x)
model2 $ fit
##        1        2        3        4        5        6        7        8 
## 122.5388 153.9997 182.6550 251.7872 260.8543 310.6514 314.1467 312.6928 
##        9       10 
## 299.8631 275.8110
model2 $ coeff
##   (Intercept)        new_xx         new_x 
## -7.684980e+01  4.689175e-01 -1.402805e-04

4 Plot Comparação

Usando o pacote ggplot2, criei um gráfico para comparar as curvas por regressão linear e polinomial.

library (ggplot2)

ggplot (dados = data) +  geom_point(aes(x = data $ Area, y = data $ Price),size = 3)+
  (aes (x = data $ Area, y = data$Price)) +
  geom_line (aes (x = data $ Area, y = model1 $ fit), color = "red") +
  geom_line (aes (x = data $ Area, y = model2 $ fit), color = "blue")

5 EXEMPLO 2

Criei uma base de dados aleatória, para o novo exemplo

tratamentos=rep(c(0,2,4,8,16,32,64,128,256),e=4)
resposta=c(0,1,2,4,
           8,7,9,10,
           15,17,18,20,
           25,26,24,28,
           36,39,38,40,
           60,68,65,70,
           100,110,104,107,
           150,155,156,159,
           120,130,126,124)

6 Média e Desvio-padrão

Dose=c(0,2,4,8,16,32,64,128,256)
media=tapply(resposta,tratamentos, mean)
desvio=tapply(resposta,tratamentos,sd)

7 Edição do Gráfico

Comando basico para graficos de regressão

plot(media~Dose)

7.1 Gráfico Editado

Simples edição do gráfico de regressão

plot(media~Dose, 
     las=1,
     ylab="Resposta",
     xlab="Dose")

8 Desvio padrão

Colocando o desvio padrão em cada dado

reg=plot(media~Dose, 
         las=1,
         ylab="Resposta",
         xlab="Dose")
arrows(Dose,media+desvio,Dose,media-desvio,length = 0.02,angle=90,code=3)

9 Curva de Tendência

modelo=lm(media~Dose+I(Dose^2))
summary(modelo)
## 
## Call:
## lm(formula = media ~ Dose + I(Dose^2))
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.0101 -2.3298  0.5233  2.3045  3.4953 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  7.7601301  1.7653406   4.396  0.00459 ** 
## Dose         1.8811023  0.0566083  33.230 4.94e-08 ***
## I(Dose^2)   -0.0055671  0.0002241 -24.847 2.80e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.709 on 6 degrees of freedom
## Multiple R-squared:  0.9967, Adjusted R-squared:  0.9956 
## F-statistic: 899.4 on 2 and 6 DF,  p-value: 3.674e-08
plot(media~Dose, 
     las=1,ylim=c(0,200),col="black",pch=16,
     ylab="Resposta",
     xlab="Dose")

10 Identificando os pontos no gráfico

Para encontrar o ponto de máximo ou mínimo em uma equaçãoo quadrática, fazer derivada

Y=0
(x=-modelo$coefficients[2]/(2*modelo$coefficients[3]))
##     Dose 
## 168.9481

Fórmula de Bhaskara para encontrar o vértice

(y=modelo$coefficients[1]+modelo$coefficients[2]*x+modelo$coefficients[3]*x^2)
## (Intercept) 
##    166.6644
plot(media~Dose, 
     las=1,ylim=c(0,200),col="black",pch=16,
     ylab="Resposta",
     xlab="Dose")
arrows(Dose,media+desvio,Dose,media-desvio,length = 0.02,angle=90,code=3)
curve(modelo$coefficients[1]+modelo$coefficients[2]*x+modelo$coefficients[3]*x^2, add=T,col="blue")
abline(h=y,col="red",lty=2)
abline(v=x,col="red",lty=2)
points(x,y,pch=8,col="black")