Práctica 4: Distribución normal multivariante con R

Anuncio
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
Descargar