Estadı́stica II Curso 2010/2011 Licenciatura en Matemáticas Práctica 4: Distribución normal multivariante con R 1. Simulación de datos normales multivariantes Para generar una muestra de datos con distribución normal multivariante, se utiliza el comando mvrnorm de la librerı́a MASS. Para obtener ayuda sobre cómo usar el comando: library(MASS) help(mvrnorm) Los tres principales argumentos son n (el número de puntos que queremos generar), mu (el vector de medias) y Sigma (la matriz de covarianzas). Por ejemplo, para generar y representar 5000 puntos con distribución normal bidimensional con vector de medias µ = (0, 0)0 y matriz de covarianzas Σ= 1 0,8 0,8 1 podemos ejecutar los comandos siguientes: n = 5000 mu = c(0,0) sigma = matrix(c(1,0.8,0.8,1),2) datos = mvrnorm(n,mu,sigma) plot(datos,pch=’.’) 2. Estimación del vector de medias y de la matriz de covarianzas Si queremos estimar los parámetros del modelo y la matriz de covarianzas con los datos que hemos generado, podemos utilizar los comandos muest = colMeans(datos) sigmaest = cov(datos) respectivamente. Compara los estimadores obtenidos con los valores poblacionales. Dado que el tamaño muestral es muy grande, deben parecerse bastante. 1 3. Distancia de Mahalanobis La distancia de Mahalanobis se calcula con el comando mahalanobis(x,center,cov), donde center es el centro con respecto al que se calcula la distancia en cada punto y cov es la matriz de covarianzas de los datos (o la verdadera si es conocida). Si utilizamos como centro y matriz de covarianzas los valores estimados anteriormente, las distancias se calculan mediante: distancias = mahalanobis(datos,muest,sigmaest) Calcula las principales medidas numéricas (media y desviación tı́pica) y representa los principales gráficos (histograma y diagrama de cajas) para describir el vector de distancias. Compara los resultados con lo esperado bajo el modelo normal. Con los siguientes comandos se representan los puntos en distinto color según su distancia esté por debajo o por encima del valor medio (que en este caso es p = 2): plot(datos,pch=’.’) points(datos[distancias>2,],pch=’.’,col=’red’) 4. Datos de la liga española de fútbol El fichero liga0506.RData contiene los partidos ganados, perdidos, los goles a favor y en contra de todos los equipos de la primera división de la liga española de fútbol en el año 2005-06. Primero cargamos los datos y los representamos gráficamente mediante una matriz de diagramas de dispersión: load(’liga0506.RData’) datos = liga[,-1] pairs(datos) A continuación calculamos el vector de medias estimado y las matrices de covarianzas y de correlaciones estimadas: > media = colMeans(datos) > media G P GF GC 13.75 13.75 46.80 46.80 > matcov = cov(datos) > matcov G G P GF P GF 29.14474 -19.64474 -19.64474 GC 55.05263 -41.78947 20.09211 -42.26316 38.42105 55.05263 -42.26316 147.64211 -68.41053 GC -41.78947 38.42105 -68.41053 95.22105 > cor(datos) G P GF GC 2 G P GF 1.0000000 -0.8118082 -0.8118082 0.8392530 -0.7759685 GC -0.7932687 0.8392530 -0.7932687 1.0000000 -0.7759685 0.8783954 1.0000000 -0.5769675 0.8783954 -0.5769675 1.0000000 Finalmente, calculamos las distancias de Mahalanobis de cada equipo al centro (vector de medias): > distancias = mahalanobis(datos,media,matcov) > cbind(liga,distancias) Equipo G P GF GC distancias 1 Barcelona 25 6 80 35 2 RMadrid 20 8 70 40 4.3250602 3 Valencia 19 7 58 33 2.5605537 4 Osasuna 21 12 49 43 8.5391593 5 Sevilla 20 10 54 39 2.3336157 6 7 7.9230077 Celta 20 14 45 33 10.8985437 9 50 39 3.0846647 8 Villarreal 14 Deportivo 15 13 47 45 0.2219241 9 Getafe 15 14 54 49 1.0385855 10 AtMadrid 13 12 45 37 4.5680108 11 Zaragoza 10 12 46 51 4.6487016 12 AthBilbao 11 15 40 46 1.1426150 13 Mallorca 10 15 37 51 1.5673134 14 Betis 10 16 34 51 1.7069574 15 Espanyol 10 17 36 56 2.3322552 16 RSociedad 11 20 48 65 6.3463350 17 Racing 9 16 36 49 18 Alaves 9 17 35 54 1.1905433 19 Cadiz 8 18 36 52 2.3793869 20 Malaga 5 24 36 68 7.7716763 5. 1.4210906 Regresión simple cuando la variable regresora es aleatoria En clase hemos considerado el modelo de regresión simple con diseño fijo, es decir, la varia- ble regresora no es aleatoria sino que es fijada por el experimentador. Sin embargo, en muchas aplicaciones la variable regresora no es fija sino aleatoria. Aprovechando que sabemos generar vectores aleatorios normales, vamos a hacer un experimento de simulación para conocer las propiedades del estimador de la pendiente es el caso de diseño aleatorio. El siguiente programa genera 1000 nubes de puntos normales de tamaño 20, ajusta las correspondientes rectas por mı́nimos cuadrados, guarda en beta0 y beta1 los estimadores obtenidos y los representa gráficamente: mu = c(0,0) # Media poblacional sigma = matrix(c(1,0.5,0.5,1),2) # Matriz de covarianzas poblacional B = 1000 n = 20 # Numero de muestras # Numero de datos en cada muestra 3 beta1 = numeric(B) # Definicion del vector de pendientes beta0 = numeric(B) # Definicion del vector de terminos indeps. for (i in 1:B){ x = mvrnorm(n,mu,sigma) # Genera la muestra reg = lm(x[,2]~x[,1]) # Ajusta el modelo beta0[i] = coef(reg)[1] # Guarda el termino independiente beta1[i] = coef(reg)[2] # Guarda la pendiente estimada } plot(beta0,beta1,pch=16,cex=0.4,bty=’l’) El gráfico que se ha obtenido es: ● ● ● ● ● 1.0 ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ●● ● ●● ● ● ● ●●● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ●●● ● ● ● ●● ●● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ●●●● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ●● ● ●●●● ● ● ● ● ● ● ● ● ●● ● ● ●● ●● ● ● ● ●● ● ● ● ●●● ●● ● ● ●● ●● ● ●● ● ● ●● ● ● ●●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ●● ●● ● ● ● ● ●●● ●● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●●● ● ●●●● ● ● ●● ●●● ●●● ● ●●● ●● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●● ●● ● ● ●●●● ● ●● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ●● ● ● ●●● ●● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ●●● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●●● ● ●● ● ● ● ●●●● ● ● ●● ● ● ● ● ● ● ● ●●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ●● ●● ●● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ●● ● ●● ● ● ● ●● ● ● ●● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● 0.5 beta1 ● ● ● 0.0 ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● −0.6 −0.4 −0.2 0.0 0.2 0.4 0.6 0.8 beta0 Ejercicios 1. Describe gráfica y numéricamente los vectores beta0 y beta1 obtenidos en la simulación anterior. 2. Genera 1000 puntos normales bidimensionales con vector de medias µ = (0, 0)0 y matriz de covarianzas Σ= 10 3 3 1 . Representa la nube de puntos generados. 3. Estima a partir de los datos generados los parámetros µ y Σ. Para estos estimadores calcula la distancia de Mahalanobis. Aplica a las distancias obtenidas un test de bondad de ajuste de Kolmogorov-Smirnov para contrastar si las distancias tienen distribución χ22 . 4 4. Calcula una distancia d tal que el 10 % de los puntos dista del centro más que d. (Indicación: usa el comando quantile) 5. Representa la nube de puntos marcando de color rojo el 10 % de puntos más distantes del centro. 6. Añade a los puntos generados un dato atı́pico. Por ejemplo, x0 = (−15, 1). Repite los ejercicios anteriores para la nueva muestra comparando los resultados obtenidos en ambos casos. 5