[R-br] Diferenças de R2 entre regressões lineares com e sem intercepto

Robert Iquiapaza rbali em ufmg.br
Quarta Novembro 14 10:29:16 BRST 2012


Concordo, aparentemente o revisor está usando a fórmula "correta" no
contexto de modelos lineares, "mais variáveis explicativas maior R2". Só
que no caso do modelo linear sem intercepto o R2 não tem uma definição
clara, se usar a formula usual R2= 1 - SQE/SQT pode até ser negativo.
A fórmula utilizada em vários softwares incluído o R, para modelo linear
sem intercepto, não é interpretável, faça o teste de hipótese e se tiver
mesmo que apresentar o modelo sem intercepto eu não reportaria o R2.

########
intercepto=5  #depois pode mudar esse valor para verificar a influência
x<-runif(30)
y<-intercepto-rnorm(30,2*x)

summary(lm(y~x)) #mod.com.int
summary(lm(y~0+x)) #mod.sem.int

# A formula do usada no R e alguns outros softwares é
# ilustrada usando a soma dos quadrados da regressão (SQR)
# e dos erros do modelo (SQE)  R2= SQR/(SQR+SQE)
# usando uma função para as somas dos quadrados
sq=function(z,m="mz")sum((z-ifelse(m=="mz",mean(z),m))^2)
#R2 mod.com.int
sq(fitted(lm(y~x)),mean(y))/(sq(fitted(lm(y~x)),mean(y))+sq(y-fitted(lm(y~x))))
#R2 mod.sem.int
sq(fitted(lm(y~0+x)),0)/(sq(fitted(lm(y~0+x)),0)+sq(y-fitted(lm(y~0+x)),0))
sq(fitted(lm(y~0+x)),mean(y))/(sq(fitted(lm(y~0+x)),mean(y))+sq(y-fitted(lm(y~0+x))))
#sem forçar a passar pelo zero

# Só que essa fórmula é válida somente para o modelo linear com intercepto
# onde SQT = SQR + SQE
# Se usar a fórmula tradicional de R2 = 1 - SQE/SQT no modelo linear sem
intercepto,
# normalmente, dependendo do verdadeiro valor do intercepto vai dar um R2
menor ou negativo
#R2 mod.com.int
1-sq(y-fitted(lm(y~x)))/sq(y)
#R2 mod.sem.int
1-sq(y-fitted(lm(y~0+x)))/sq(y)

# o qual não tem sentido, assim como tem pouco sentido rodar um modelo sem
intercepto,
# quando o verdadeiro valor desse parâmetro é muito diferente de zero, como
# pode ver na figura
plot(y~x)
abline(lm(y~x),col=3) #mod.com.int
abline(lm(y~0+x),col=4)#mod.sem.int
legend("topright", legend = c("mod.com.int","mod.sem.int"), col=3:4, pch=1,
         lty=1, merge=TRUE)#, trace=TRUE)

#rode novamente com intercepto=0, agora a figura pode ter mais sentido,
# mas eu não falaria que o R2 aumentou, o problema está na definição de R2

##### fim

Sds,

Robert Iquiapaza
CEPEAD/FACE/UFMG


Em 13 de novembro de 2012 10:11, marcelo claro de souza <
marcelo.claro.souza em gmail.com> escreveu:

> Bom dia a todos.
> Rodei duas correlações lineares com e sem intercepto, utilizando o mesmo
> conjunto de dados, para a determinação de uma equação para determinação da
> área foliar de uma espécie arbórea.
> regressão com intercepto lm(y~x)
> regressão sem intercepto lm(y~0+x) ou lm(y~x-1)
>
> O R2 da equação sem intercepto foi maior que o R2 da regressão com
> intercepto, e o assessor de uma revista questionou que isso seria
> matematicamente improvável e solicitou que eu refizesse as análises. Refiz
> e obtive os mesmos resultados.
> É possível essa variação nos valores de R2 ou estou fazendo algo errado?
> Muito obrigado pela ajuda.
> Abraço
>
> Marcelo
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20121114/b73db71a/attachment.html>


Mais detalhes sobre a lista de discussão R-br