Aqui você vê as diferenças entre duas revisões dessa página.
Próxima revisão | Revisão anterior | ||
03_apostila:06-modelos [2020/08/12 06:04] 127.0.0.1 edição externa |
03_apostila:06-modelos [2020/08/20 16:10] adalardo |
||
---|---|---|---|
Linha 1: | Linha 1: | ||
<WRAP tabs> | <WRAP tabs> | ||
- | * [[bie5782:02_tutoriais:tutorial7:start|Tutorial]] | + | * [[02_tutoriais:tutorial7:start|Tutorial]] |
- | * [[bie5782:01_curso_atual:exercicios7| Exercícios]] | + | * [[01_curso_atual:exercicios7| Exercícios]] |
- | * [[bie5782:03_apostila:06-modelos| Apostila]] | + | * [[03_apostila:06-modelos| Apostila]] |
</WRAP> | </WRAP> | ||
====== 7. Modelos Lineares ====== | ====== 7. Modelos Lineares ====== | ||
Linha 33: | Linha 33: | ||
A função utilizada para construir modelos lineares de regressão é a função '''lm''' que tem os seguintes argumentos principais: | A função utilizada para construir modelos lineares de regressão é a função '''lm''' que tem os seguintes argumentos principais: | ||
- | <code> | + | <code rsplus> |
lm( formula, data, weights, subset, na.action ) | lm( formula, data, weights, subset, na.action ) | ||
</code> | </code> | ||
Linha 43: | Linha 43: | ||
Vejamos um exemplo simples: | Vejamos um exemplo simples: | ||
- | <code> | + | <code rsplus> |
> egr = read.csv("egrandis.csv",header=T) | > egr = read.csv("egrandis.csv",header=T) | ||
> egr[1,] | > egr[1,] | ||
Linha 114: | Linha 114: | ||
- coeficiente de determinação e coef. de det. ajustado; | - coeficiente de determinação e coef. de det. ajustado; | ||
- teste //F// geral do modelo. | - teste //F// geral do modelo. | ||
- | <code> | + | <code rsplus> |
> summary( hipso1 ) | > summary( hipso1 ) | ||
Linha 137: | Linha 137: | ||
* **anova:** a função '''anova''' apresenta a Tabela de análise de variância, tendo as variáveis preditoras como fatores: | * **anova:** a função '''anova''' apresenta a Tabela de análise de variância, tendo as variáveis preditoras como fatores: | ||
- | <code> | + | <code rsplus> |
> anova( hipso1 ) | > anova( hipso1 ) | ||
Analysis of Variance Table | Analysis of Variance Table | ||
Linha 161: | Linha 161: | ||
O valor default do argumento ''which'' é '''which = c(1:3, 5)'''. | O valor default do argumento ''which'' é '''which = c(1:3, 5)'''. | ||
- | <code> | + | <code rsplus> |
> plot( hipso1 ) | > plot( hipso1 ) | ||
Hit <Return> to see next plot: | Hit <Return> to see next plot: | ||
Linha 171: | Linha 171: | ||
* **coef:** a função '''coef''' retorna os coeficientes de regressão do modelo linear: | * **coef:** a função '''coef''' retorna os coeficientes de regressão do modelo linear: | ||
- | <code> | + | <code rsplus> |
> coef( hipso1 ) | > coef( hipso1 ) | ||
(Intercept) dap | (Intercept) dap | ||
Linha 180: | Linha 180: | ||
* **residuals:** a função '''residuals''' (também pode ser evocada por '''resid''') retorna os resíduos do modelo linear. | * **residuals:** a função '''residuals''' (também pode ser evocada por '''resid''') retorna os resíduos do modelo linear. | ||
* **fitted:** a função '''fitted''' (também pode ser evocada por '''fitted.values''') retorna os //valores ajustados// do modelo linear. | * **fitted:** a função '''fitted''' (também pode ser evocada por '''fitted.values''') retorna os //valores ajustados// do modelo linear. | ||
- | <code> | + | <code rsplus> |
> plot( resid( hipso1 ) ~ fitted( hipso1 ) ) | > plot( resid( hipso1 ) ~ fitted( hipso1 ) ) | ||
</code> | </code> | ||
* **predict:** a função '''predict''' retorna os valores //preditos// para novas observações: | * **predict:** a função '''predict''' retorna os valores //preditos// para novas observações: | ||
- | <code> | + | <code rsplus> |
> predict( hipso1, data.frame( dap=c(10,50,100) ) ) | > predict( hipso1, data.frame( dap=c(10,50,100) ) ) | ||
1 2 3 | 1 2 3 | ||
Linha 228: | Linha 228: | ||
Consideremos o exercício do modelo de equação de biomassa do tronco em função do diâmetro e altura. O modelo original apresenta claramente | Consideremos o exercício do modelo de equação de biomassa do tronco em função do diâmetro e altura. O modelo original apresenta claramente | ||
problemas com a pressuposição de homogeneidade de variâncias: | problemas com a pressuposição de homogeneidade de variâncias: | ||
- | <code> | + | <code rsplus> |
> esa = read.csv("esaligna.csv",header=T) | > esa = read.csv("esaligna.csv",header=T) | ||
> plot( lm( tronco ~ I(dap^2 * ht), data=esa ) , which=c(1,3) ) | > plot( lm( tronco ~ I(dap^2 * ht), data=esa ) , which=c(1,3) ) | ||
Linha 237: | Linha 237: | ||
Se o modelo for ponderado por uma potência do inverso da variável preditora ( ''1/(dap^2 * ht)'' ), talvez se torne um modelo com variância homogênea. | Se o modelo for ponderado por uma potência do inverso da variável preditora ( ''1/(dap^2 * ht)'' ), talvez se torne um modelo com variância homogênea. | ||
- | <code> | + | <code rsplus> |
> plot( lm( tronco ~ I(dap^2*ht), data=esa, weights=1/(dap^2*ht)^0.5 ), which=3 ) | > plot( lm( tronco ~ I(dap^2*ht), data=esa, weights=1/(dap^2*ht)^0.5 ), which=3 ) | ||
Linha 269: | Linha 269: | ||
Vejamos como exemplo os dados de inventário floresta em floresta plantada: | Vejamos como exemplo os dados de inventário floresta em floresta plantada: | ||
- | <code> | + | <code rsplus> |
> egr = read.csv("egrandis.csv",header=T) | > egr = read.csv("egrandis.csv",header=T) | ||
> | > | ||
Linha 293: | Linha 293: | ||
Nos **modelos lineares de regressão**, as variáveis '''factor''' podem ser assumidas automaticamente como variáveis indicadoras (variáveis dummy). | Nos **modelos lineares de regressão**, as variáveis '''factor''' podem ser assumidas automaticamente como variáveis indicadoras (variáveis dummy). | ||
- | <code> | + | <code rsplus> |
> hipso2 = lm( ht ~ dap + regiao, data=egr ) | > hipso2 = lm( ht ~ dap + regiao, data=egr ) | ||
> summary( hipso2 ) | > summary( hipso2 ) | ||
Linha 335: | Linha 335: | ||
A variável região tem três níveis (''levels'') | A variável região tem três níveis (''levels'') | ||
- | <code> | + | <code rsplus> |
> levels(egr$regiao) | > levels(egr$regiao) | ||
[1] "Bofete" "Botucatu" "Itatinga" | [1] "Bofete" "Botucatu" "Itatinga" | ||
Linha 349: | Linha 349: | ||
É possível ajustar um **modelo de interação completo** do diâmetro com a variável região, alterando o //intercepto// **e** a //inclinação// do modelo em cada regiões: | É possível ajustar um **modelo de interação completo** do diâmetro com a variável região, alterando o //intercepto// **e** a //inclinação// do modelo em cada regiões: | ||
- | <code> | + | <code rsplus> |
> | > | ||
> hipso3 = lm( ht ~ dap * regiao, data=egr ) | > hipso3 = lm( ht ~ dap * regiao, data=egr ) | ||
Linha 381: | Linha 381: | ||
Note que se quisermos usar uma variável como indicadora, mas ela foi codificada como variável numérica, teremos que **forçar** sua transformação em | Note que se quisermos usar uma variável como indicadora, mas ela foi codificada como variável numérica, teremos que **forçar** sua transformação em | ||
variável '''factor''': | variável '''factor''': | ||
- | <code> | + | <code rsplus> |
coef( lm( ht ~ dap * rot, data = egr ) ) | coef( lm( ht ~ dap * rot, data = egr ) ) | ||
(Intercept) dap rot dap:rot | (Intercept) dap rot dap:rot | ||
Linha 445: | Linha 445: | ||
Para visualizar esse experimento podemos ler os dados do arquivo {{:dados:altura-mudas.csv.pdf|altura-mudas.csv (apagar extensão .pdf)}}, através da função '''plot''': | Para visualizar esse experimento podemos ler os dados do arquivo {{:dados:altura-mudas.csv.pdf|altura-mudas.csv (apagar extensão .pdf)}}, através da função '''plot''': | ||
- | <code> | + | <code rsplus> |
> | > | ||
> mudas = read.csv("dados/altura-mudas.csv",header=T) | > mudas = read.csv("dados/altura-mudas.csv",header=T) | ||
Linha 475: | Linha 475: | ||
Para ajustar um modelo linear num experimento, podemos utilizar a função '''lm''' como no caso da regressão linear: | Para ajustar um modelo linear num experimento, podemos utilizar a função '''lm''' como no caso da regressão linear: | ||
- | <code> | + | <code rsplus> |
> muda.pai = lm( altura ~ as.factor(bloco) + as.factor(substrato), data=mudas, subset= especie=="paineira" ) | > muda.pai = lm( altura ~ as.factor(bloco) + as.factor(substrato), data=mudas, subset= especie=="paineira" ) | ||
> class(muda.pai) | > class(muda.pai) | ||
Linha 489: | Linha 489: | ||
Sendo um experimento, o interesse principal é verificar a importância dos **fatores**: os tratamentos ('''substrato''') e os blocos ('''bloco'''). Para isso utilizamos a função '''anova''': | Sendo um experimento, o interesse principal é verificar a importância dos **fatores**: os tratamentos ('''substrato''') e os blocos ('''bloco'''). Para isso utilizamos a função '''anova''': | ||
- | <code> | + | <code rsplus> |
> anova( muda.pai ) | > anova( muda.pai ) | ||
Analysis of Variance Table | Analysis of Variance Table | ||
Linha 532: | Linha 532: | ||
Nesse caso, o experimento se torna um **experimento fatorial 2 x 10**: | Nesse caso, o experimento se torna um **experimento fatorial 2 x 10**: | ||
- | <code> | + | <code rsplus> |
> | > | ||
> muda.sp = lm( altura ~ as.factor(bloco) + especie * as.factor(substrato), data=mudas ) | > muda.sp = lm( altura ~ as.factor(bloco) + especie * as.factor(substrato), data=mudas ) | ||
Linha 552: | Linha 552: | ||
No que a fórmula para o experimento é apresentada de modo diferente: | No que a fórmula para o experimento é apresentada de modo diferente: | ||
- | <code> | + | <code rsplus> |
altura ~ as.factor(bloco) + especie * as.factor(substrato) | altura ~ as.factor(bloco) + especie * as.factor(substrato) | ||
Linha 601: | Linha 601: | ||
Existe no R a função '''interaction.plot''' que permite construir gráficos de interação entre fatores que facilitam a interpretação dos resultados estatístico. Seus argumentos principais são: | Existe no R a função '''interaction.plot''' que permite construir gráficos de interação entre fatores que facilitam a interpretação dos resultados estatístico. Seus argumentos principais são: | ||
- | <code> | + | <code rsplus> |
function (x.factor, trace.factor, response, fun = mean ) | function (x.factor, trace.factor, response, fun = mean ) | ||
</code> | </code> | ||
Linha 610: | Linha 610: | ||
Vejamos a interação entre espécies e substrato no experimento do crescimento de mudas de espécies arbóreas: | Vejamos a interação entre espécies e substrato no experimento do crescimento de mudas de espécies arbóreas: | ||
- | <code> | + | <code rsplus> |
> interaction.plot( mudas$substrato, mudas$especie, mudas$altura , col=c("red","blue")) | > interaction.plot( mudas$substrato, mudas$especie, mudas$altura , col=c("red","blue")) | ||
Linha 667: | Linha 667: | ||
Embora esse seja um modelo muito problemático, ele serve para ilustrar o problema de seleção de modelos. Vejamos o que acontece utilizando os dados de árvores de //E. saligna// ([[dados:dados-esaligna]]): | Embora esse seja um modelo muito problemático, ele serve para ilustrar o problema de seleção de modelos. Vejamos o que acontece utilizando os dados de árvores de //E. saligna// ([[dados:dados-esaligna]]): | ||
- | <code> | + | <code rsplus> |
> biom = lm( total ~ dap + I(dap^2) + ht + I(dap * ht) + I(dap^2 * ht) + I(dap * ht^2), data=esa ) | > biom = lm( total ~ dap + I(dap^2) + ht + I(dap * ht) + I(dap^2 * ht) + I(dap * ht^2), data=esa ) | ||
> summary(biom) | > summary(biom) | ||
Linha 701: | Linha 701: | ||
Vejamos o que a função **"anova"** nos mostra: | Vejamos o que a função **"anova"** nos mostra: | ||
- | <code> | + | <code rsplus> |
> anova(biom) | > anova(biom) | ||
Analysis of Variance Table | Analysis of Variance Table | ||
Linha 744: | Linha 744: | ||
Podemos ajustar esses modelos e utilizar a função **anova** para testá-los numa seqüência: | Podemos ajustar esses modelos e utilizar a função **anova** para testá-los numa seqüência: | ||
- | <code> | + | <code rsplus> |
> m0 = lm( total ~ 1 , data=esa ) | > m0 = lm( total ~ 1 , data=esa ) | ||
> m1 = lm( total ~ dap , data=esa ) | > m1 = lm( total ~ dap , data=esa ) | ||
Linha 779: | Linha 779: | ||
É importante lembrar que a função **anova** realiza o teste **na ordem que os modelos são apresentados**, e que isso pode ter forte influência nos resultados obtidos. | É importante lembrar que a função **anova** realiza o teste **na ordem que os modelos são apresentados**, e que isso pode ter forte influência nos resultados obtidos. | ||
- | <code> | + | <code rsplus> |
> anova( m0, lm(total ~ I(dap^2*ht),data=esa), lm( total ~ I(dap^2*ht) + dap, data=esa) ) | > anova( m0, lm(total ~ I(dap^2*ht),data=esa), lm( total ~ I(dap^2*ht) + dap, data=esa) ) | ||
Analysis of Variance Table | Analysis of Variance Table | ||
Linha 813: | Linha 813: | ||
As funções '''add1''' e '''drop1''' permitem adicionar ou retirar **um-a-um** os termos dos modelos lineares: | As funções '''add1''' e '''drop1''' permitem adicionar ou retirar **um-a-um** os termos dos modelos lineares: | ||
- | <code> | + | <code rsplus> |
> add1( object = m1, scope = . ~ dap + ht + I(dap*ht) + I(dap^2*ht) , test="F" ) | > add1( object = m1, scope = . ~ dap + ht + I(dap*ht) + I(dap^2*ht) , test="F" ) | ||
Single term additions | Single term additions | ||
Linha 829: | Linha 829: | ||
</code> | </code> | ||
- | <code> | + | <code rsplus> |
> drop1( object = m6, scope = . ~ ., test="F" ) | > drop1( object = m6, scope = . ~ ., test="F" ) | ||
Single term deletions | Single term deletions | ||
Linha 867: | Linha 867: | ||
* **"step"** que realiza //regressão stepwise//; e | * **"step"** que realiza //regressão stepwise//; e | ||
* **"AIC"** que calcula o //Akaike Information Criterion//. | * **"AIC"** que calcula o //Akaike Information Criterion//. | ||
- | <code> | + | <code rsplus> |
> aic.tab = AIC( m0, m1, m2, m3, m4, m5, m6 ) | > aic.tab = AIC( m0, m1, m2, m3, m4, m5, m6 ) | ||
> aic.tab$AIC.d = abs( c(0, diff(aic.tab$AIC)) ) | > aic.tab$AIC.d = abs( c(0, diff(aic.tab$AIC)) ) |