Diferenças de R2 entre regressões lineares com e sem intercepto

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

x<-runif(30) y<-rnorm(30,2*x) plot(y~x) mod.com.int<-lm(y~x) mod.sem.int<-lm(y~0+x) summary(mod.com.int) summary(mod.sem.int) Me parece razoavel isso acontecer, mas depende de que tipo de dados você coletou e qual o seu objetivo não. Isso realmente pode acontecer? Em 13 de novembro de 2012 09:11, marcelo claro de souza < marcelo.claro.souza@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@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.
-- Grato Augusto C. A. Ribas Site Pessoal: http://recologia.wordpress.com/<http://augustoribas.heliohost.org> Lattes: http://lattes.cnpq.br/7355685961127056

O revisor está correto pois a definição de R² que ele possivelmente está usando é de R² corrido para a média ou R² com relação o modelo nulo. Veja no exemplo abaixo como calcular o mencionado R². R² só faz sentido, ou melhor, só é o ajustado para a média, se o teu modelo puder se reduzir ao modelo de intercepto através de uma restrição paramétrica. É por esse motivo que para alguns modelos não lineares o valor calculado de R² é tão otimista, porque assim como o teu modelo sem intercepto, alguns modelos não lineares também não possuem intercepto. Em todas as situações, para evitar problemas, considere o R² ajustado/relativo ao modelo nulo. x <- runif(30) y <- rnorm(30,3*x, sd=0.1) plot(y~x) mod.com.int <- lm(y~x) mod.sem.int <- lm(y~0+x) summary(mod.com.int) summary(mod.sem.int) mod.null <- lm(y~1) # R² ajustados para a média 1-deviance(mod.com.int)/deviance(mod.null) 1-deviance(mod.sem.int)/deviance(mod.null) À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

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@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@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.

E a utilização do R2 ajustado, seria uma alternativa ou ideal seria eliminar o modelo sem intercepto e trabalhar apenas com o modelo linear geral? Obrigado Em 14 de novembro de 2012 10:29, Robert Iquiapaza <rbali@ufmg.br> escreveu:
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@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@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.

O R2 ajustado depende do R2, nao tendo um vc nao tem o outro. Em 14/11/2012 12:41, "marcelo claro de souza" < marcelo.claro.souza@gmail.com> escreveu:
E a utilização do R2 ajustado, seria uma alternativa ou ideal seria eliminar o modelo sem intercepto e trabalhar apenas com o modelo linear geral? Obrigado
Em 14 de novembro de 2012 10:29, Robert Iquiapaza <rbali@ufmg.br>escreveu:
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@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@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.
participantes (4)
-
Augusto Ribas
-
marcelo claro de souza
-
Robert Iquiapaza
-
Walmes Zeviani