Regressão Polinomial Múltipla
 

# Vamos simular a produção de massa seca de uma forrageira em função de doses de nitrogênio e potássio

#  carregar conjunto de dados via web

dados<-read.table("https://19e31fa08e.cbaul-cdnwnd.com/fd58c287e8dcea635dc0088984f5a026/200000021-9e5459f4e9/regmult.txt",header=TRUE, sep="", dec=".")

# criar um modelo com dois termos lineares, dois quadráticos e duas interações

modelo1=lm(prod~N+K+I(N^2)+I(K^2)+N*K+I(N^2)*I(K^2), data=dados)

 

# para visualizar os coeficientes

modelo1

 

# para observar a significância dos coeficientes estimados e o coeficiente de determinação

summary(modelo1)

anova(modelo1)

 

# pode-se retirar os efeitos não significativos do modelo ou utilizar o procedimento de stepwise para selecionar o melhor modelo

step(modelo1)

 

# criar um novo modelo sugerido pelo procedimento de stepwise

modelo2=lm(prod~N+K+I(N^2)*I(K^2), data=dados)

modelo2

 

# note que ainda existem coeficientes não significativos

summary(modelo2)

anova(modelo2)

 

# se quiser utilizar o critério da significância dos coeficientes o modelo fica:

modelo3=lm(prod~N+K+I(N^2), data=dados)

modelo3

 

# note que todos os coeficientes são significativos

summary(modelo3)

anova(modelo3)

 

 

# comparando os dois modelos é difícil decidir qual a melhor opção

# pelo AIC o modelo 2 é melhor (menor AIC é melhor)

AIC(modelo2);AIC(modelo3)
 

# pelo BIC o modelo 3 é melhor (menor BIC é melhor)

BIC(modelo2);BIC(modelo3)
 

# pelo coeficiente de determinação ajustado o modelo 2 é melhor (maior é melhor)

summary(modelo2)[9];summary(modelo3)[9]
 
 

# considerando que o modelo 3 foi selecionado devido a sua maior simplicidade, vamos contruir um gráfico

 

# criando uma função a partir do modelo 3

c=coef(modelo3)
c
f=function(x,y){c[1]+c[2]*x+c[3]*y+c[4]*x^2}
 

# criar sequências do menor ao maior valor de N e K

n=seq(min(dados$N),max(dados$N), by=2)
k=seq(min(dados$K),max(dados$K), by=2)
 

# criar uma malha (rede) com as sequências e a função

rede=outer(n,k,f)
 

# utilizando a função persp() criamos o gráfico

persp(n,k,rede)
 

# fazendo alterações para melhorar a visualização gráfica

persp(n, k, rede, theta=295, phi=20, expand=0.9, col="light green", xlab = "Nitrogênio", ylab = "Potássio", zlab = "Produção",shade = 0.2, ticktype = "detailed", font.lab=2, cex.axis=0.8, main="Gráfico 3D")


			

# abaixo o gráfico gerado pelo script acima