Vous êtes sur la page 1sur 9

Apresentao do R com um exemplo de anlise de regresso no-linear

Eduardo Esteves 11 de Janeiro de 2011


Instituto Superior de Engenharia, Universidade do Algarve, Campus da Penha, 8005-139 Faro e Centro de Cincias do Mar, Laboratrio Associado, Campus de Gambelas, 8005-139 Faro; E-mail: eesteves@ualg.pt; URL: http://w3.ualg.pt/eesteves

Resumo
No seguimento dum artigo anterior acerca da anlise de regresso no-linear (simples) utilizando a ferramenta Solver sentao do

R,

do Excel

(Esteves, 2010) prope-se neste artigo a apre-

uma linguagem de programao e um ambiente para computao estatstica

e grca, atravs da sua aplicao na  descrio de relaes estatsticas (no-lineares) entre variveis. Palavras-chave:

R,

Regresso no-linear.

Introduo
O

R (R Development Core Team, 2007) ao mesmo tempo uma linguagem de programao e um am-

biente para computao estatstica e grca. Trata-se de uma linguagem de programao especializada em computao com dados. Uma das suas principais caractersticas o seu carcter gratuito e a sua disponibilidade para uma gama bastante variada de sistemas operativos (vd. http://www.rproject.org). Apesar do seu carcter gratuito, o

uma ferramenta bastante poderosa com boas

capacidades ao nvel da programao e um conjunto bastante vasto (e em constante crescimento) de packages que acrescentam bastantes potencialidades j poderosa verso base do Contudo, o termo  ambiente pretende caracterizar o

R (Torgo, 2006).

como um sistema completo e coerente ao

invs dum conjunto de ferramentas muito especcas e relativamente inexveis (Venables et al., 2006). O

R pode ser entendido como uma implementao da linguagem S desenvolvida por Rick Becker,

John Chambers e Allan Wilks nos Bell Laboratories (E.U.A.), que tambm constitui a base do software S-Plus

(Insightful Corp.). A evoluo da linguagem

S est descrita em quatro livros de

John Chambers e colaboradores. As  distribuies do

incluem um bom conjunto de manuais

(vd. http://cran.r-project.org/manuals.html) e existem, actualmente, vrios livros que descrevem a utilizao do books.html), para anlise estatstica de dados (vd. http://www.r-project.org/doc/bib/R-

e.g. Dalgaard (2002) ou Crawley (2007). Na preparao deste artigo usei a verso
Esteves, E. (2010) Apresentao do R com um exemplo de anlise de regresso de Engenharia Superior da Universidade do Algarve, Faro, 10 p. [disponvel em

Citao recomendada:
no-linear. Instituto

http://w3.ualg.pt/eesteves, consultado em

data ]

2.5.0 (embora tenha sido disponibilizada recentemente a verso 2.11.1 do stalao (R-X.XX.X-win32.exe) para Microsoft Windows

R).

O cheiro de in-

pode ser obtido em http://cran.at.r-

project.org/bin/windows/base/ e o processo de instalao simples. Tambm existem  verses para Mac OS e Unix/Linux, e 64-bit para Windows. O stio electrnico do projecto constitui a principal referncia do

e funciona como ponto de partida para explorar mais este sistema.

Boa parte das pessoas utiliza o

como um sistema para anlise estatstica de dados, uma vez

que a maioria das  estatsticas clssicas e muitas das metodologias mais recentes esto disponveis, embora os promotores preram  pensar o implementadas (Venables et al., 2006).

como um ambiente no qual essas tcnicas tm sido conjuntos de funes) fazem

Cerca de 25 pacotes (i.e.

parte do sistema bsico (os  recommended packages), mas muitos outros esto disponveis atravs do CRAN (via http://CRAN.R-project.org) para instalao. Uma importante diferena entre a linguagem SAS

(e o

R)

e outros sistemas (e.g.

SPSS

ou

) reside na (muito) menor quantidade de resultados apresentados para uma qualquer anlise

estatstica, embora os resultados sejam guardados em objectos para posterior consulta ou utilizao pelo noutras funes (Venables et al., 2006).

Neste artigo, pretende-se apresentar (muito sucintamente) o

R, uma linguagem de programao


No se pretende discutir aqui os

especializada em computao com dados, utilizando-a para analisar problemas cujo objectivo  descrever relaes estatsticas (no-lineares) entre variveis. aspectos estatsticos dos resultados obtidos, apenas o cada).

modus operandi (ainda que de forma simpli-

Regresso no-linear (simples)


Os vrios aspectos relacionados com a regresso no-linear (simples) que servem de base a este artigo foram abordados, ainda que de forma informal e possivelmente incompleta, num artigo anterior ( ). Em vrios domnios do conhecimento, e.g. biologia, fsica, qumica, engenharia, etc., so usados modelos matemticos para descrever um conjunto de dados empricos, genericamente

y = f (x) +
em que

y a varivel dependente, x a varivel  independente  por vezes, controlada pelo f(x) uma funo que pode incluir um ou mais parmetros

investigador  e

so os erros

aleatrios, independentes e com distribuio normal. Outra formulao, equivalente, (em que

y = f ( x)
f(x)

se l valor esperado, ou estimado, de

y ). Quanto melhor f(x) se ajustar aos dados,

mais  rigorosamente descrever aquela relao (Brown, 2001). Pretende-se ajustar a funo aos dados empricos de forma a minimizar os erros o(s) parmetro(s) da funo

= (yi y ).

De facto, o objectivo estimar

f(x) de modo a minimizar a soma dos quadrados dos erros, SQE 

mtodo dos mnimos quadrados. No caso de funes (ou modelos) no-lineares, e.g.

y = aexp(bx),

no possvel obter as estimativas dos parmetros num nico passo, como no caso de regresses lineares, pelo que a SQE minimizada atravs dum processo iterativo (cclico) utilizando um algoritmo apropriado que necessita dos valores iniciais dos parmetros

(Bowen and Jerman,

1995). Tradicionalmente, transformam-se as variveis de alguns modelos no-lineares de forma a linearizar a relao e a permitir a sua anlise atravs da regresso linear. Contudo, esta abordagem vlida se a(s) varivel(is) transformadas se vericam os pressupostos da anlise de regreso linear.

Figura 1: Aspecto da janela

R Console.

Exemplo
A utilizao do

ferramenta Solver

com um exemplo concreto (entretanto abordado por Esteves, 2008, usando a do Microsoft Excel

) permitir mostrar o funcionamento e demonstrar as

capacidades do software. apresenta. O aspecto do

Como se imagina, as funcionalidades no se esgotam no que aqui se

R ao iniciar uma sesso de trabalho em ambiente Windows

ilustra-se na Figura

1. Para alm da barra de ferramentas no topo (que permite realizar as tarefas comuns: abrir/gravar cheiros, cortar/colar texto, instalar pacotes,  gerir as janelas, etc.) surge uma janela (R na qual se introduzem os comandos, a seguir ao sinal >. Admita-se que os dados que se pretendem analisar esto num cheiro do Excel lugar, ser necessrio guardar uma verso (*.txt

Console )

1 ou *.csv) desse cheiro utilizvel pelo

. Em primeiro

R (devem

usar-se pontos, em vez de vrgulas, como separadores decimais). Na consola do

escrever (fazendo

Enter

no m),

> dados<-read.table(file="G:/MyArticles/ArtigosRegressaoNaoLinearExcel/Regre ssaoNaoLinear.txt",header=T,sep="\t")


para  carregar a informao contida no cheiro (atente-se na notao

<-).

Os parmetros

RegressaoNaoLinear.txt para o objecto dados. header e sep permitem considerar os rtulos dos dados R
atravs de

e o tipo de cheiro de texto (neste caso separado por tabulaes), respectivamente. Por sinal, a quantidade de dados envolvida poderia muito bem ser introduzida directamente no

> CO2<-c(141,172,181,227,309,414,641, 936) > Prop<-c(0.25,0.34,0.34,0.68,0.85,0.99,0.98,0.99)


em que

c(...)

permite concatenar um conjunto de dados num objecto (neste caso,

CO2

Prop)

Podemos visualizar a informao usando a funo

plot

1 A extenso txt diz respeito a cheiros de texto separado por tabulaes enquanto a extenso csv est relacionada
com cheiros de texto separados por vrgulas.

> plot(Prop~CO2, las=1,xlim=c(0,1000),ylim=c(0,1),pch=16,cex= 1.5, xlab="CO2 (ppm)", ylab="Proporo de respostas correctas")


em que de

Prop~CO2

descreve o  modelo que se pretende representar (neste caso

Prop

em funo

CO2)

e cujos restantes parmetros especicam as vrias caractersticas do grco (las para

orientao dos rtulos do eixo dos denir o smbolo usado,

yy, xlim e ylim para determinar os limites dos eixos, pch para cex para aumentar o tamanho relativo dos caracteres, e xlab e ylab para

 legendar os eixos) (Figura 2a). Para mais informaes acerca desta (ou qualquer outra) funo pode fazer-se

> ?plot
(ou ento procurar com

>help.search(termo)

ou,

ainda,

usar

opo

Help>

Apropos...).

Usando o boto direito do rato sobre o grco, possvel copiar a gura (como

metacheiro Windows

por exemplo) para incluso num cheiro do Microsoft Word

Admita-se (por razes cientcas) que um modelo  dose-resposta (logstico modicado)

P =
em que

1 3

+ exp(B (T log (x)) 1 + exp(T log (x))


i,

Pi

a proporo de respostas positivas do provador

log (x)

o logaritmo do valor do

estmulo

x, B o "declive" e T o limiar para o provador i (em

log (x)), adequado para descrever

os dados. Para ajustar o modelo basta fazer

> ajuste<-nls(Prop~(1/3+exp(B*(T-log10(CO2))))/(1+exp(B*(T-log10(CO2)))), data=data.frame(CO2=CO2,Prop=Prop),start=list(B=-10,T=2.5))


em que o objecto

ajuste incluir os resultados duma regresso no-linear (atravs da funo nls)2 3 do modelo Prop~(1/3+exp(B*(T-log10(CO2))))/(1+exp(B*(T-log10(CO2))) considerando os 4 dados (indicados para o parmetro data sob a forma de uma data.frame ) e as estimativas iniciais dos parmetros do modelo descritas em start (atravs duma list). Os resultados do ajuste > summary(ajuste)
possvel ilustrar o

(Figura 3) podem ser consultados fazendo

ajuste,

obtendo primeiro as estimativas da varivel

Prop

(atravs da

funo

predict)

e  desenhando-as , em seguida, sobre o grco entretanto obtido (Figura 2a vs

Figura 2b) usando a funo

lines,

ou seja

> PropEsp<-predict(ajuste,newdata=list(CO2=seq(0,1000,length=100)),se.fit=T) > lines(PropEsp~seq(0,1000,length=100),lwd=2,col=6)


A informao contida no objecto

ajuste permite obter as estimativas para 100 valores de CO2 entre 0 e 1000 (da o parmetro seq(1,1000,length=100) no comando acima) assim como os respectivos erros-padro (se.fit=T) que sero guardadas no objecto designado PropEsp. A adio duma linha espessa e magenta (lwd=2 e col=6) Figura 2a relativamente fcil (Figura 2b).
2 Outras
funes (muito) usadas so

lm

aov

para regresso linear (i.e. modelos lineares) e anlise de varincia,

respectivamente.

3 A denio dos modelos em S est minuciosamente descrita em Chambers and Hastie (1992). 4 Neste caso, considerou-se que o utilizador introduziu directamente no sistema os dados ao invs

cheiro dos dados (sendo que bastaria apenas indicar

data=dados,
4

de  carregar o

no comando).

Figura 2: Diagramas de disperso da proporo de respostas vs. concentrao de CO2: dados originais (a); modelo dose-resposta (logstico modicado) (b); modelo dose-resposta com intervalos de 95% de conana (c); e modelo logstico (ver texto principal) (d).

Figura 3: Aspecto da execuo de comandos e respectivos resultados na janela

R Console.

Podem, ainda, obter-se e  desenhar-se os intervalos de conana (upIC e atravs de

loIC) que se calculam

y t se(Y ),

recorrendo s funes

qt

(para obter os valores  tericos de t-Student

e cujos parmetros so de e

1 /2, neste caso 0.975, e os graus de liberdade do erro, que se obtm summary(ajuste)$df[2]), summary(ajuste)$sigma para obter o erro-padro das estimativas lines, respectivamente (Figura 2c).

> > > >

upIC<-PropEsp+qt(.975,summary(ajuste)$df[2])*summary(ajuste)$sigma loIC<-PropEsp-qt(.975,summary(ajuste)$df[2])*summary(ajuste)$sigma lines(upIC~seq(0,1000,length=100),col=4) lines(loIC~seq(0,1000,length=100),col=4)

O modo mais simples de  testar a bondade do ajuste representar gracamente os dados e o modelo ajustado (bem como os respectivos intervalos de conana), de modo a vericar (visualmente) se os parmetros obtidos numericamente descrevem, de facto, a relao entre variveis (Figura 2c). Por outro lado, a anlise grca dos resduos, e.g. resduos

vs. valores observados de X, permite

 vericar se o modelo adequado (os resduos representam apenas o erro experimental se no apresentam tendncias ou padres). Sendo assim, obter os resduos atravs de

> residuos<-summary(ajuste)$resid
e, em seguida, representar esse grco em conjunto com o (Figura 4)

normal probability plot dos resduos

> op<-par(mfrow=c(2,1),pty="s",las=1) > plot(residuos~predict(ajuste),pch=16,col=3,xlab="E{Proporo de respostas correctas}",ylab="Resduos") > abline(h=0) > qqnorm(residuos,pch=16,col=2,xlab= "Quantis da Distribuio Normal", ylab="Quantis Amostrais",main="") > qqline(residuos) > par(op) par permite estabelecer o  esquema da gura, neste caso, os grcos cam  arranjados em 2 linhas por 1 coluna  mfrow=c(2,1) , assim como denir a respectiva forma (quadrada, atravs de pty="s" - s de square). Ao grco dos resduos vs. valores esperados de Prop (atravs de plot) acrescentmos uma linha horizontal ao nvel de zero (atravs de abline) e, por m, desenhamos o normal probability plot dos resduos (com qqnorm e qqline).
O comando possvel testar se os resduos se distribuem normalmente atravs, por exemplo, de

> shapiro.test(residuos)
O resultado deste comando

Shapiro-Wilk normality test data: residuos W = 0.936, p-value = 0.5719


O teste de sequncias (ou  runs test nos manuais anglfonos) permite testar, de forma simples e robusta, se os pontos (dados) diferem sistematicamente da curva ajustada (modelo) complementando a informao do diagrama dos resduos

vs valores observados de X. Conover (1999)

Figura 4: Anlise grca de resduos: resduos

vs. valores esperados (esq.); e normal probability

plot dos resduos (dir.).

alerta para a reduzia potncia estatstica do testes baseados em sequncias. No carregar alguns pacotes,

R,

ser necessrio

tseries, quadprog

zoo

(previamente instalados, atravs da barra

de ferramentas, a partir dos cheiros *.zip disponveis para o Windows project.org/bin/windows/contrib/) fazendo e.g.

em http://cran.at.r-

> library(tseries)
Depois basta fazer

> runs.test(factor(sign(residuos)))
para se obter o seguinte resultado

Runs Test data: factor(sign(residuos)) Standard Normal = 0.5774, p-value = 0.5637 alternative hypothesis: two.sided
Pode comparar-se o ajuste de dois modelos distintos a um dado conjunto de dados confrontando as SQE dos modelos ajustados atravs do teste de F. Sendo assim, depois de ajustar um modelo logstico,

y = C/[1 + Aexp(Bx)] (Figura 2d)5

, de formulao mais generalizada do que o modelo

5 Esta

gura foi obtida atravs de

> plot(Prop~CO2,las=1,xlim=c(0,1000), ylim=c(0,1),pch=16,cex=1.5, xlab="CO2 (ppm)",ylab="Propor o de respostas correctas") > PropEsper<-predict(ajustes,newdata= list(CO2=seq(0,1000,length=100)),se.fit=T) > lines(PropEsper~seq(0,1000,length= 100),lwd=2,col=6) > uppIC<-PropEsper+qt(.975,summary( ajustes)$df[2])*summary(ajustes)$sigm > lowIC<-PropEsper-qt(.975,summary( ajustes)$df[2])*summary(ajustes)$sigm > lines(uppIC~seq(0,1000,length=100), col=4) > lines(lowIC~seq(0,1000,length=100), col=4)

Figura 5: Aspecto duma sesso de trabalho no

R.

 dose-resposta anterior, atravs de

> ajustes<-nls(Prop~C/(1+A*exp(-B*CO2 )),data=data.frame(CO2=CO2,Prop=Prop), start=list(A=10,B=.0025,C=1)) > summary(ajustes)


os resultados do teste de F obtm-se facilmente atravs de

> anova(ajuste,ajustes)
Os passos descritos anteriormente, i.e. uma sesso de trabalho (Figura 5), podem (e, na minha opinio, devem) ser  guardados . Para isso, criar um cheiro de

script (atravs de

File>New

script),

de facto um cheiro texto, onde so  guardados os comandos.

Este cheiro pode ser e as anlises e grcos

carregado noutra sesso de trabalho (atravs de podem ser repetidos n-vezes (janela no stio electrnico do autor.

File>Open script...)

R Editor ). O script do exemplo descrito aqui pode ser obtido

Para terminar uma sesso de trabalho, primeiro  limpar da memria os objectos criados (com a funo

rm)

e, depois, encerrar o programa (geralmente no guardo uma  imagem do ambiente

de trabalho):

> rm(list=ls()) ; q()

Consideraes nais
ferramenta Solver

As  diculdades estatsticas relacionadas com a utilizao do Excel

) para anlise de regresso no-linear (vd.

?)

da Microsoft (e da respectiva

limitam a sua utilizao aos casos

 mais simples ou para efeitos pedaggicos. dedicado, por exemplo SPSS

Em situaes  prossionais deve usar-se software

ou

R.

Embora as caractersticas do

tornem (mais) difcil a aprendizagem, o seu carcter gratu-

ito, o facto de ser uma ferramenta bastante poderosa com boas capacidades ao nvel da programao e um conjunto bastante vasto (e em constante crescimento) de

packages que acrescentam

bastantes potencialidades estatsticas e grcas, o crescente interesse de utilizadores das mais variadas formaes (que se renem anualmente desde 2004 nas conferncias useR!  em 2011 a useR!2011 decorrer no Reino-Unido,

cf. http://www.warwick.ac.uk/statsdept/useR-2011/) e a

disponibilidade dos promotores (R Development Core Team) e da  comunidade de utilizadores, mais ou menos avanados, ajudam (e muito) esse processo. Os vrios manuais (http://cran.r-

project.org/manuals.html), a pgina wiki (http://wiki.r-project.org/) e a

mailing list de ajuda

(http://stat.ethz.ch/mailman/listinfo/r-help) permitem ultrapassar a (esmagadora) maioria das diculdades surgidas durante a utilizao do

R.

Agradecimentos
Este artigo muito beneciou dos comentrios, correces e sugestes dos colegas e leitores.

Referncias
Bowen, W., Jerman, J., 1995. Nonlinear regression using spreadsheets. Trends in Pharmacological Sciences 16, 413417. Brown, A. M., 2001. A step-by-step guide to non-linear regression analysis of experimental data using a microsoft excel spreadsheet. Computer methods and Programs in Biomedicine 65, 191 200. Chambers, J. M., Hastie, T. J., 1992. Statistical models in S. Chapman & Hall, London. Conover, W., 1999. Practical nonparametric statistics. John Wiley & Sons. Inc., New York. Crawley, M., 2007. The R book. Wiley, NY. URL

http://www.google.com/books?id=8D4HVx0apZQC

Dalgaard, P., 2002. Introductory statistics with R. Springer-Verlag New York Inc., New York. Esteves, E., 2010. Regresso no-linear utilizando a ferramenta solver

do microsoft excel

Instituto Superior de Engenharia, Universidade do Algarve, Faro, Portugal [disponvel em http://w3.ualg.pt/ eesteves.]. URL

http://w3.ualg.pt/~eesteves.

R Development Core Team, 2007. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria, ISBN 3-900051-07-0. URL

http://www.R-project.org

Torgo, L., 2006. Introduo programao em R. Faculdade de Economia da Universidade do Porto, Porto. Venables, W. N., Smith, D. M., Team, R. D. C., 2006. An Introduction to R (Notes on R: A Programming Environment for Data Analysis and Graphics). The R Foundation for Statistical Computing, Vienna, Austria. URL

http://cran.r-project.org/doc/manuals/R-intro.pdf
9

Vous aimerez peut-être aussi