• Nenhum resultado encontrado

Arvores de Regress˜ ´ ao

No documento Faculdade de Economia (páginas 41-44)

2.2 Elaborar modelos a partir de dados

2.2.2 Arvores de Regress˜ ´ ao

As ´arvores de regress˜ao s˜ao em tudo idˆenticas `as ´arvores de decis˜ao analisadas na Sec¸c˜ao O que ´e uma ´arvore de regress˜ao

2.2.1. A diferen¸ca principal reside no facto de as folhas das primeiras conterem previs˜oes num´ericas e n˜ao decis˜oes.

A obten¸c˜ao de ´arvores de regress˜ao usando o R ´e conseguida usando exactamente a mesma fun¸c˜ao usada para as ´arvores de decis˜ao. De facto, a fun¸c˜ao rpart vai obter uma ´

arvore de regress˜ao ou de decis˜ao consoante o tipo da vari´avel objectivo. Se esta for um factor, a fun¸c˜ao obt´em uma ´arvore de decis˜ao, se for uma vari´avel num´erica ´e obtida uma ´

arvore de regress˜ao. De resto toda a sintaxe ´e igual, embora a fun¸c˜ao possua parˆametros espec´ıficos para cada tipo de ´arvore.

Para ilustrar a cria¸c˜ao de ´arvores de regress˜ao vamos usar um dos muitos conjuntos de dados que vˆem com o pr´oprio R. O exemplo concreto que vamos usar reporta a um estudo demogr´afico levado a cabo na Su´ı¸ca em 1888. Para v´arias regi˜oes deste pa´ıs registaram-se uma s´erie de vari´aveis, como sejam, um ´ındice de fertilidade, a percentagem de popula¸c˜ao afecta `a agricultura, percentagem de militares que receberam a nota m´axima num teste do ex´ercito, percentagem de pessoas com mais do que a escola prim´aria, percentagem da popula¸c˜ao cat´olica, e percentagem de nascimentos que sobrevivem menos do que um ano

(´ındice de mortalidade infantil). Para “carregar” estes dados basta fazer, Carregar dados que vˆem com o R

Esta instru¸c˜ao cria um data frame com o nome swiss com os dados. Podemos obter

uma ideia das principais estat´ısticas descritivas destes dados fazendo, Estat´ısticas descritivas b´asicas

> summary(swiss)

Fertility Agriculture Examination Education Min. :35.00 Min. : 1.20 Min. : 3.00 Min. : 1.00 1st Qu.:64.70 1st Qu.:35.90 1st Qu.:12.00 1st Qu.: 6.00 Median :70.40 Median :54.10 Median :16.00 Median : 8.00 Mean :70.14 Mean :50.66 Mean :16.49 Mean :10.98 3rd Qu.:78.45 3rd Qu.:67.65 3rd Qu.:22.00 3rd Qu.:12.00 Max. :92.50 Max. :89.70 Max. :37.00 Max. :53.00

Catholic Infant.Mortality Min. : 2.150 Min. :10.80 1st Qu.: 5.195 1st Qu.:18.15 Median : 15.140 Median :20.00 Mean : 41.144 Mean :19.94 3rd Qu.: 93.125 3rd Qu.:21.70 Max. :100.000 Max. :26.60

A fun¸c˜ao summary mostra-nos o valor m´ınimo e m´aximo de cada vari´avel, os 1o e 3o quartis, e a m´edia e mediana. Se por acaso o data frame tivesse colunas que fossem

factores apareceria o n´umero de ocorrˆencias de cada valor (ao estilo do que se obt´em com a fun¸c˜ao table). Caso seja prefir´ıvel uma visualiza¸c˜ao mais gr´afica da distribui¸c˜ao dos valores de uma vari´avel em particular, podemos usar um histograma,

Histogramas

> hist(swiss$Infant.Mortality)

O resultado da fun¸c˜ao hist pode ser visto na Figura 4. A fun¸c˜ao “parte” a gama de valores da vari´avel numa s´erie de intervalos e mostra-nos o n´umero de ocorrˆencias de cada intervalo. Isto permite-nos, por exemplo, observar que a maioria dos valores da mortalidade infantil se distribui `a volta do valor 20.

Figura 4: Um exemplo de um histograma.

Para obtermos uma ´arvore de regress˜ao que relacione a vari´avel Infant.Mortality

Obter uma ´arvore

de regress˜ao com as outras basta fazermos,

> arv.regr <- rpart(Infant.Mortality ~ ., swiss) > arv.regr

n= 47

node), split, n, deviance, yval * denotes terminal node 1) root 47 390.25490 19.94255 2) Fertility< 64.25 11 76.84727 17.35455 * 3) Fertility>=64.25 36 217.22000 20.73333 6) Agriculture>=72.8 7 20.56000 18.10000 * 7) Agriculture< 72.8 29 136.40210 21.36897 14) Catholic< 59.305 19 50.76421 20.73684 * 15) Catholic>=59.305 10 63.62100 22.57000 *

2.2 Elaborar modelos a partir de dados 43

A maneira como o R mostra a ´arvore ´e idˆentica `a das ´arvores de decis˜ao. No entanto, para cada n´o da ´arvore a informa¸c˜ao dada ´e ligeiramente diferente. Concretamente, al´em do teste no n´o, ´e indicado o n´umero de casos que satisfazem o teste, a variˆancia da vari´avel objectivo desses casos, e o valor m´edio desses exemplos na vari´avel objectivo.

´

E este valor m´edio que constitui a “decis˜ao” deste modelo em cada folha da ´arvore (assinaladas com “*”). Olhando para este modelo podemos observar que ele prevˆe valores mais baixos de mortalidade infantil para as regi˜oes com mais baixo ´ındice de fertilidade, sendo que a maior mortalidade ocorre em regi˜oes com alta fertilidade, maior percentagem de popula¸c˜ao agr´ıcola e maior percentagem de popula¸c˜ao cat´olica.

Vejamos agora como podemos usar as ´arvores de regress˜ao obtidas com a fun¸c˜ao

rpart para fazer previs˜oes. O processo que iremos usar ´e em tudo idˆentico ao usado na As previs˜oes de uma ´

arvore de regress˜ao

Sec¸c˜ao2.2.1, para as ´arvores de decis˜ao. Ou seja, vamos dividir os nossos dados numa amostra aleat´oria para obter a ´arvore de regress˜ao, e numa amostra de teste para avaliar a ´arvore obtida,

> amostra.modelo <- sample(1:nrow(swiss),as.integer(0.7*nrow(swiss))) > dados.modelo <- swiss[amostra.modelo,]

> dados.teste <- swiss[-amostra.modelo,]

> arv.regr <- rpart(Infant.Mortality ~ .,dados.modelo) > arv.regr

n= 32

node), split, n, deviance, yval * denotes terminal node 1) root 32 218.00220 19.61562 2) Fertility< 64.55 10 74.85600 17.22000 * 3) Fertility>=64.55 22 59.66955 20.70455 6) Examination< 13 8 10.68875 19.78750 * 7) Examination>=13 14 38.40857 21.22857 * > prev.arv <- predict(arv.regr,dados.teste) > prev.arv

Delemont Porrentruy Broye Sarine Veveyse Cossonay Morges 19.78750 19.78750 21.22857 21.22857 21.22857 17.22000 21.22857 Yverdon Conthey Herens Martigwy Sierre Sion Le Locle 21.22857 19.78750 19.78750 19.78750 19.78750 21.22857 21.22857 Neuchatel

17.22000

Atente-se que o processo ´e em tudo igual ao usado para as ´arvores de decis˜ao. Nomeadamente, a fun¸c˜ao usada para obter as previs˜oes do modelo ´e tamb´em a fun¸c˜ao predict. No entanto, as previs˜oes obtidas s˜ao num´ericas, o que seria de esperar tratando-

se de uma ´arvore de regress˜ao. Uma pequena nota relativamente aos nomes que aparecem Data frames com linhas com nomes

por cima de cada previs˜ao, quando se manda imprimir as mesmas. Assim, como ´e poss´ıvel dar nomes aos elementos de um vector (c.f. Sec¸c˜ao1.8, p´agina19), tamb´em ´e poss´ıvel dar nomes `as linhas de um data frame. O data frame swiss vem com nomes em cada linha (que s˜ao os nomes das regi˜oes da Su´ı¸ca a que os dados dizem respeito). Essa ´e a raz˜ao para aparecerem os nomes acima das previ˜oes.

Qual a valia destas previs˜oes? Podemos calcular algumas estat´ısticas que nos dˆem alguma informa¸c˜ao sobre isto. Uma poss´ıvel estat´ıstica para avaliar as previs˜oes da ´arvore ´

e o erro absoluto m´edio, isto ´e, em m´edia qual o erro absoluto das previs˜oes da ´arvore. Vejamos como o obter,

> (mad <- mean(abs(prev.arv-dados.teste$Infant.Mortality))) [1] 3.020429

Este n´umero significa que em m´edia a ´arvore de regress˜ao erra `a volta de 3% na previs˜ao do ´ındice de mortalidade infantil.

No documento Faculdade de Economia (páginas 41-44)

Documentos relacionados