Introducci´n a modelos lineales generalizados (GLM) o en RIntroducci´n o En esta pr´ctica vamos a analizar los principales modelos de regresi´n (logit, probit, poisson, a o etc) usando el programa R. Para ello, se va a seguir el documento de Altham ”Introduction to statistical modelling in R”. En los ficheros adjuntos est´n los datos y los diferentes programas que usaremos para a esta practica. Cada una de las siguientes secciones expone un modelo distinto. En primer lugar veremos una regresi´n que con a˜adir un componente cuadr´tico podemos estimar correctao n a mente la regresi´n. o Regresi´n con un componente cuadr´tico o a En primer lugar cargamos los datos weldtable< − read.table(”weld”,header=F) Definimos las variables X e Y x< − weldtable[,1] y< −weldtable[,2] plot(x,y) teeny<-lm(y x) Este ultimo comando ajusta el siguiente modelo yi = α, βxi + i , 1 ≤ i ≤ n bajo el supuesto de que los errores i , 1 ≤ i ≤ n provienen de una distribuci´n normal (0,σ 2 ). Para o ver los resultados obtenidos summary(teeny) fv1< −teeny$fitted.values Ahora creamos dos gr´ficos, en el primero est´n las estimaciones para cada punto y en a a el segundo est´n los datos y la recta de regresi´n estimada. a o par(mfrow=c(2,1)) plot(x,fv1) plot(x,y) abline(teeny) Para dibujar los residuos de la regresi´n estimadas usamos o par(mfrow=c(1,1)) 1 y.log(y)) identify(log(x). Para ello introducimos los siguientes comandos a o xx<-x*x teeny2< −lm(y x+xx) summary(teeny2.Y<-cbind(y.species) Ahora usamos los logaritmos en ambas variables y repetimos la operaci´n o plot(log(x).fv1) matplot(x.Y.2)) plot(x.values plot(x.lm) 2 .y) lines(x. Para ello usaremos la base de datos que relaciona el peso del cerebro y el peso corporal para diferentes especies de mam´ ıferos.type=”pl”) res<-teeny$residuals plot(x.names(mammals) x<-body y<-brain plot(x.y) abline(species.lty=2) An´lisis de normalidad en los residuos a En este segundo an´lisis vamos a ver c´mo es necesario transformar las variables para a o conseguir normalidad en los residuos y evitar el efecto de observaciones influyentes.log(y).cor=T) Para observar el nuevo ajuste dibujamos los puntos y los valores ajustados por la recta de regresi´n o fv2<-teeny2$fitted.species) Estimamos la recta de regresi´n con las variables originales o species.lm<-lm(y x) summary(species.res) Como vemos que los puntos para valores peque˜os y grandes de x est´n por debajo n a de la linea de regresi´n estimada y el resto por encima es conveniente a˜adir un termino o n cuadr´tico a la regresi´n.lm) Ahora dibujamos los residuos y los valores ajustados par(mfrow(c(2.fv2. En primer lugar cargamos los datos library(MASS) data(mammals) attach(mammals) species<-row.y) Localizamos a las dos especies de elefantes (pinchar con el bot´n izquierdo del rat´n) o o identify(x. ylab=”Probabilidad estimada de fallo”) abline(v=25) abline(v=43) points(Load.l$coefficients[2] y<-alpha + beta*x Y<-1/(1+exp(-y)) plot(x.cll<-glm(p Load.l) summary(ex6.values qqnorm(r) qqline(r) Ahora hacemos el mismo an´lisis pero con las variables en logaritmos a lx<-log(x) ly<-log(y) species.Y. para el caso o de la regresi´n log´ o ıstica.ly) abline(species. logit.p) summary(ex6.lm$fitted.l<-glm(p Load.r< −species.cll) Para ver el ajuste del modelo logit realizamos el gr´fico de puntos y de la recta de a regresi´n estimada.llm$residuals fl<-species.weights=n.p) ex6.family=binomial(link=cloglog)) summary(ex6. En primer lugar vemos la ayuda que nos da el comando glm.values qqnorm(rl) qqline(rl) Regresi´n log´ o ıstica para la distribuci´n binomial o En esta secci´n vamos a ver varios ejemplos de modelos lineales generalizados.header=T) attach(data6) p< −r/n plot(Load.p) 3 .table(”alloyf.llm) plot(lx.txt”. Para ello usamos los comandos siguientes: o x<-15:55 alpha<-ex6. probit y log-log.llm) rl<-species.llm<-lm(ly lx) summary(species.weights=n.p<-glm(p Load.llm$fitted. Para ello introducimos help(glm) En este primer ejemplo se analizan cuantas piezas para un avion no pasaron el test que media la presi´n de ruptura.weights=n.type=”l”.l$coefficients[1] beta<-ex6. Para ello calculamos las tres funciones link posibles para este o conjunto de datos.xlab=Load.lm$residuals f<-species.family=binomial(link=logit)) ex6. data6<-read.family=binomial(link=probit)) ex6. 2.reg< −glm(y i.reg summary(aids.1).2.fv) 4 .1.7.header=T) attach(Resignations) plot(Res log(years).4.xlim=c(30.glm<-(Res Gov+log(years).ylim=c(0.19.type=”l”. a o Resignations<-read.fv.2.2.values points(i. y<-c(0.glm< −glm(Res log(years).3.12.weights=six) fv< −first.10.y) aids. Para ello six<-rep(6.2).5.pch=”*”) lines(i.6.title(”Ajuste de un modelo log´ ıstico”) En el siguiente ejemplo analizamos la influencia de la temperatura en la probabilidad de fallo en el conducto de trasmisi´n de combustible en lanzaderas espaciales.legend=c(”conservadores”.85).times=23) pfail<-nfail/six first.family=poisson) aids.2.0.glm<-glm(pfail temp.poisson) summary(last.glm) l<-(0:25)/10 fv<-exp(0.1.txt”.8.0.ylab=”probabilidad de fallo”) points(temp.3. En este ı ıa ejemplo los datos se ajustan m´s a una distribuci´n de Poisson que en el caso anterior.values plot(temp.pch=19.3.19) i=1:36 plot(i.1.col=c(4.fv) El siguiente ejemplo muestra el n´mero de dimisiones durante cada mandato.8.glm) last.fv.pch=19) first.9654*l) lines(l.reg$fitted.14.poisson) summary(next.”laboristas”)mcik=c(4.glm) next.20.table(”Resignations.binomial.txt”.header=T) attach(datos) Transformamos los datos para tener una variable binomial.15. En primer o lugar cargamos los datos: datos<-read.7.10.2.2)[Gov]) title(”Dimisiones ministeriales (a˜os en logaritmos)”) n legend(”topleft”.0.14. as´ como la ideolog´ del partido gobernante en el Reino Unido.glm< −glm(Res Gov+offset(log(years)).10.4.5.xlab=”temperatura”. la duraci´n u o de dicho mandato.table(”nasa.3168+0.pfail) title(”datos de fallos de lanzamientos y curva estimada de fallo”) Regresi´n de Poisson o En esta secci´n mostramos el uso de la distribuci´n de Poisson para estimar una regresi´n o o o log-lineal.4.poisson) summary(first.glm$fitted.reg) fv< − aids. a Al igual que en el caso anterior comentar brevemente los resultados obtenidos para los diferentes ejemplos usados para comentar este comando. que hay que cargar previamente. Pyears: Numero de personas en situaci´n de riesgo o 4. Age: Mediana de edad de detecci´n de la enfermedad o Estimaci´n bayesiana o En la primera parte de la pr´ctica hemos visto como se estiman los modelos lineales genera alizados desde el punto de vista cl´sico.r-project. En la nueva pantalla abrimos el fichero pdf que contiene la descripci´n del paquete. Inc: Incidencia media para cada 10000 personas 5.Hacer la regresi´n de Poisson para los datos del fichero ”autismo. Ahora vamos a ver varios comandos de R para la a estimaci´n desde el punto de vista bayesiano a trav´s de los ejemplos dentro de la librer´ o e ıa arm. En el caso de que tengamos variables categ´ricas en vez de continuas tenemos que o usar el comando ”bayespolr”. Para ver el funcionamiento de este comando analizamos los diferentes ejemplos de la p´gina 11 del documento. el primero corresponde al modelo que hemos visto en la primera parte de la clase. y el resto son modelos con distintas distribuciones a priori. t.txt”. Diag: a˜o de diagnostico n 2. o 5 .org/ Pinchamos en Packages y posteriormente en arm (que estar´ en la parte derecha de la a pantalla). Cases: casos detectados en ese a˜o n 3. Describir brevemente la influencia de las distintas distribuciones a priori. La definici´n de o o las variables es: 1. Cauchy). Observar que son datos simulados y que si se repite el procedimiento dos veces los resultados pueden variar. Tambi´n necesitamos abrir el documento de ayuda del paquete que esta disponible en e http://cran. Observar que en todos los ejemplos se usa el comando ”display(objeto)” para una mejor visualizaci´n de los resultados. o En la p´gina 4. En la p´gina 7 del documento a tenemos varios ejemplos. esta el comando ”bayesglm” el cual calcula un modelo lineal generalizado a para distintas distribuciones a priori (normal.