Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para...

13
Guía4-i,“Coordenadas Discriminantes” Octavio M. Duarte library(tidyverse) library(knitr) set.seed(42) "Af,1.38,1.64 Af,1.40,1.70 Af,1.24,1.72 Af,1.36,1.74 Af,1.38,1.82 Af,1.48,1.82 Af,1.54,1.82 Af,1.38,1.90 Af,1.56,2.08 Apf,1.14,1.78 Apf,1.20,1.86 Apf,1.18,1.96 Apf,1.30,1.96 Apf,1.26,2.00 Apf,1.28,2.00" %>% read_csv( col_names = c( "especie", "x1", "x2" ) ) -> md4 md4 <- md4 %>% mutate( y1 = x1, y2 = x1 + x2 ) Enunciado especie x1 x2 y1 y2 Af 1.38 1.64 1.38 3.02 Af 1.40 1.70 1.40 3.10 Af 1.24 1.72 1.24 2.96 Af 1.36 1.74 1.36 3.10 Af 1.38 1.82 1.38 3.20 Af 1.48 1.82 1.48 3.30 Af 1.54 1.82 1.54 3.36 Af 1.38 1.90 1.38 3.28 Af 1.56 2.08 1.56 3.64 Apf 1.14 1.78 1.14 2.92 Apf 1.20 1.86 1.20 3.06 Apf 1.18 1.96 1.18 3.14 Apf 1.30 1.96 1.30 3.26 Apf 1.26 2.00 1.26 3.26 Apf 1.28 2.00 1.28 3.28 1

Transcript of Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para...

Page 1: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

Guía4-i,“Coordenadas Discriminantes”Octavio M. Duarte

library(tidyverse)library(knitr)set.seed(42)

"Af,1.38,1.64Af,1.40,1.70Af,1.24,1.72Af,1.36,1.74Af,1.38,1.82Af,1.48,1.82Af,1.54,1.82Af,1.38,1.90Af,1.56,2.08Apf,1.14,1.78Apf,1.20,1.86Apf,1.18,1.96Apf,1.30,1.96Apf,1.26,2.00Apf,1.28,2.00" %>% read_csv( col_names = c(

"especie","x1","x2"

)) -> md4

md4 <- md4 %>% mutate( y1 = x1, y2 = x1 + x2 )

Enunciado

especie x1 x2 y1 y2Af 1.38 1.64 1.38 3.02Af 1.40 1.70 1.40 3.10Af 1.24 1.72 1.24 2.96Af 1.36 1.74 1.36 3.10Af 1.38 1.82 1.38 3.20Af 1.48 1.82 1.48 3.30Af 1.54 1.82 1.54 3.36Af 1.38 1.90 1.38 3.28Af 1.56 2.08 1.56 3.64Apf 1.14 1.78 1.14 2.92Apf 1.20 1.86 1.20 3.06Apf 1.18 1.96 1.18 3.14Apf 1.30 1.96 1.30 3.26Apf 1.26 2.00 1.26 3.26Apf 1.28 2.00 1.28 3.28

1

Page 2: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

Prueba para la Igualdad de Matrices de Covarianza

Estamos en el caso H1 de la prueba sobre Σ para dos poblaciones.poblacion <- "especie"variables <- c('y1','y2')

obtenerQi <- function(marcoDeDatos,listVariables,poblacion,colPoblacion) {indices <- which( marcoDeDatos[,quo_name(colPoblacion)] == poblacion )cov(

marcoDeDatos[indices,variables]) * length(indices)

}

obtenerQ <- function(marcoDeDatos,listVariables) {cov(

marcoDeDatos[,variables]) * nrow(marcoDeDatos)

}

todosLosQ <- function(marcoDeDatos,listVariables,colPoblacion) {listaPoblaciones <- marcoDeDatos[,colPoblacion] %>% unique() %>% unlist()listaQ <- map( listaPoblaciones, ~obtenerQi(marcoDeDatos, listVariables,.x, colPoblacion ) )names(listaQ) <- listaPoblacionesreturn(

listaQ)

}

ques <- todosLosQ(md4,variables,"especie")ques

## $Af## y1 y2## y1 0.08820 0.16095## y2 0.16095 0.38560#### $Apf## y1 y2## y1 0.02368 0.04976## y2 0.04976 0.12256mediaUnaPoblacion <- function(marcoDeDatos,listVariables,colPoblacion,poblacion) {

indices <- which( md4[,colPoblacion] == poblacion )return(

colMeans( md4[indices,variables] ))

}

mediaUnaPoblacion(md4,variables,"especie","Af")

## y1 y2## 1.413333 3.217778

2

Page 3: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

mediaGeneral <- function(marcoDeDatos,listVariables) {return( colMeans( md4[,variables] ) )

}

obtenerNi <- function(marcoDeDatos,colPoblacion) {listaPoblaciones <- marcoDeDatos[,colPoblacion] %>% unique() %>% unlist()listaN <- map_dbl( listaPoblaciones,

~length( which( marcoDeDatos[,colPoblacion] == .x ) ))

names(listaN) <- listaPoblacionesreturn( listaN )

}

nies <- obtenerNi(md4,"especie")nies

## Af Apf## 9 6obtenerH <- function(marcoDeDatos,listVariables,colPoblacion) {

listaPoblaciones <- marcoDeDatos[,colPoblacion] %>% unique() %>% unlist()listaMedias <- map( listaPoblaciones, ~mediaUnaPoblacion(marcoDeDatos,listVariables,colPoblacion,.x) )names(listaMedias) <- listaPoblacionesmediaGeneral <- mediaGeneral(marcoDeDatos,variables)listaN <- obtenerNi(marcoDeDatos,colPoblacion)listaASumar <- map2( listaMedias, listaN, ~(( .x - mediaGeneral ) %*% t( .x - mediaGeneral )) * .y )matrizH <- listaASumar %>% reduce(`+`)return(matrizH)

}

matrizHP <- obtenerH( md4, variables, "especie" )matrizHP

## y1 y2## [1,] 0.12544000 0.04330667## [2,] 0.04330667 0.01495111gammaEstrella1 <- function(marcoDeDatos,listVariables,colPoblacion) {

listaPoblaciones <- marcoDeDatos[,colPoblacion] %>% unique() %>% unlist()listaQ <- todosLosQ(marcoDeDatos,listVariables,colPoblacion)listaN <- obtenerNi(marcoDeDatos,colPoblacion)

numerador <- map2_dbl(listaQ,listaN,~(det(.x/.y))^(.y/2)

) %>% reduce(`*`)

nTotal <- nrow(marcoDeDatos)denominador <- ( det( reduce( listaQ, `+` ) / nTotal ) )^(nTotal/2)return( numerador / denominador )

}

estadistico <- gammaEstrella1( md4,variables,"especie" )

3

Page 4: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

indicesNu <- function(listVariables,colPoblacion) {n <- length(colPoblacion)p <- length(listVariables)k <- colPoblacion %>% unique() %>% length()nu <- p*k+(p*(p+1)*k)/2nu1 <- p*k+(p*(p+1))/2nu2 <- p+(p*(p+1))/2return(

list("nu" = nu,"nu1" = nu1,"nu2" = nu2

))

}

indices <- indicesNu(variables,md4$especie)indices

## $nu## [1] 10#### $nu1## [1] 7#### $nu2## [1] 5pruebaSigmaEnPoblaciones <- function(marcoDeDatos,listVariables,colPoblacion,alfa) {

estadistico <- gammaEstrella1(marcoDeDatos,listVariables,colPoblacion)indices <- indicesNu(listVariables,marcoDeDatos[[colPoblacion]])percentil <- qchisq( p = 1 - alfa, df = indices[["nu"]] - indices[["nu1"]] )gradLib1 <- indices[["nu"]] - indices[["nu1"]]return(

tibble(rechazo = -2*log(estadistico) > percentil,pValor = pchisq( df = gradLib1, q = -2 * log(estadistico) ),estadistico = estadistico,percentil = qchisq( df = gradLib1, p = 1- alfa )

))

}

Evalue si las poblaciones tienen igual matriz de covarianza. Tome α = 0, 01. Enbase al resultado decida si es razonable hacer un gráfico de la primera coordenadadiscriminante.Gráfico preliminar y pueba

md4 %>% ggplot() +aes(x=y1, y=y2,color=especie) +geom_point()

4

Page 5: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

2.9

3.1

3.3

3.5

1.2 1.3 1.4 1.5

y1

y2

especie

Af

Apf

Prueba de Hipótesis

pruebaEj4a <- pruebaSigmaEnPoblaciones(md4,variables,"especie",0.01)pruebaEj4a %>% kable()

rechazo pValor estadistico percentilFALSE 0.7304125 0.1404498 11.34487

La prueba donde H0 : Σ1 = Σ2 y H1 : Σ1 6= Σ2 nos da un pvalor de 0.7304125 y por lo tanto indica que esrazonable asumir que las matrices de covarianza son iguales para ambas poblaciones. Esta es la hipótesis quenos habilita a buscar coordenadas discriminantes.

• Dado que no rechazamos la hipótesis, es razonable hacerlo.

Obtención de las coordenadas disciminantes

estimarSigmaDentro <- function(marcoDeDatos,listaVariables,colPoblacion) {listaQ <- todosLosQ(marcoDeDatos,listVariables,colPoblacion)n <- nrow(marcoDeDatos)sDentro <- reduce(listaQ,`+`) /nreturn(sDentro)

}

sDentroP <- estimarSigmaDentro( md4, variables, "especie" )sDentroP

5

Page 6: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

## y1 y2## y1 0.007458667 0.01404733## y2 0.014047333 0.03387733estimarSigmaEntre <- function(marcoDeDatos,listaVariables,colPoblacion) {

n <- nrow(marcoDeDatos)matrizH <- obtenerH(marcoDeDatos,listaVariables,colPoblacion) / nreturn( matrizH )

}

coordenadasDiscriminantes <- function(marcoDeDatos, listaVariables, colPoblacion) {sEntre <- estimarSigmaEntre(marcoDeDatos,listaVariables,colPoblacion)sDentro<- estimarSigmaDentro(marcoDeDatos,listaVariables,colPoblacion)matrizC <- chol(sDentro)inversaC <- solve(matrizC)matrizB <- t(inversaC) %*% sEntre %*% inversaCdescompB <- eigen(matrizB)## indicesNoNulas <- which( descompB$values != 0 )## listaVec <- map( indicesNoNulas, ~ inversaC %*% (descompB$vectors)[,.x] )listaVectores <- map( seq(1,length(descompB$values)), ~descompB$vectors[,.x] )listaDirecciones <- map( listaVectores, ~ inversaC %*% .x )columnasProyecciones <- map(listaDirecciones, ~ (marcoDeDatos[,listaVariables] %>% as.matrix()) %*% .x )return(

list(proyecciones = columnasProyecciones,direcciones = listaDirecciones)

)}

coordenadasDiscriP <- coordenadasDiscriminantes(md4,variables,"especie")coordenadasDiscriP

## $proyecciones## $proyecciones[[1]]## [,1]## [1,] -4.5943182## [2,] -4.3080252## [3,] -1.7286619## [4,] -3.3223048## [5,] -2.8412235## [6,] -4.3315828## [7,] -5.2257984## [8,] -2.0620703## [9,] -2.9916224## [10,] 0.3460623## [11,] 0.2309999## [12,] 1.5030133## [13,] -0.2854179## [14,] 0.7003024## [15,] 0.4022305#### $proyecciones[[2]]## [,1]## [1,] -16.06545## [2,] -16.52713

6

Page 7: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

## [3,] -15.99176## [4,] -16.61435## [5,] -17.20235## [6,] -17.61590## [7,] -17.86404## [8,] -17.70764## [9,] -19.58893## [10,] -15.95718## [11,] -16.71060## [12,] -17.25950## [13,] -17.75576## [14,] -17.84298## [15,] -17.92569###### $direcciones## $direcciones[[1]]## [,1]## y1 -24.643008## y2 9.739415#### $direcciones[[2]]## [,1]## y1 2.180558## y2 -6.316100proyeccionesP <- coordenadasDiscriP$proyeccionesdireccionesP <- coordenadasDiscriP$direcciones

sEntreP <- estimarSigmaEntre(md4,variables,"especie")sEntreP

## y1 y2## [1,] 0.008362667 0.0028871111## [2,] 0.002887111 0.0009967407matrizC <- chol(sDentroP)matrizC

## y1 y2## y1 0.08636357 0.16265345## y2 0.00000000 0.08614631inversaC <- solve(matrizC)

matrizB <- t(inversaC) %*% sEntreP %*% inversaCmatrizB

## y1 y2## y1 1.121201 -1.728890## y2 -1.728890 2.665946descompB <- eigen(matrizB)dir1 <- ( inversaC %*% (descompB$vectors)[,1] )dir1

## [,1]

7

Page 8: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

## y1 -24.643008## y2 9.739415dir2 <- ( inversaC %*% (descompB$vectors)[,2] )dir2

## [,1]## y1 2.180558## y2 -6.316100normaVector <- function(vector) {

norm( x = matrix( vector, ncol=1 ),type="2" )}

colProy <- (md4[,variables] %>% as.matrix()) %*% dir1

md42 <- md4md42$proyecciones1 <- proyeccionesP[[1]] %>% unlist()md42$proyecciones2 <- proyeccionesP[[2]] %>% unlist()

md42 %>% kable()

especie x1 x2 y1 y2 proyecciones1 proyecciones2Af 1.38 1.64 1.38 3.02 -4.5943182 -16.06545Af 1.40 1.70 1.40 3.10 -4.3080252 -16.52713Af 1.24 1.72 1.24 2.96 -1.7286619 -15.99176Af 1.36 1.74 1.36 3.10 -3.3223048 -16.61435Af 1.38 1.82 1.38 3.20 -2.8412235 -17.20235Af 1.48 1.82 1.48 3.30 -4.3315828 -17.61590Af 1.54 1.82 1.54 3.36 -5.2257984 -17.86404Af 1.38 1.90 1.38 3.28 -2.0620703 -17.70764Af 1.56 2.08 1.56 3.64 -2.9916224 -19.58893Apf 1.14 1.78 1.14 2.92 0.3460623 -15.95718Apf 1.20 1.86 1.20 3.06 0.2309999 -16.71060Apf 1.18 1.96 1.18 3.14 1.5030133 -17.25950Apf 1.30 1.96 1.30 3.26 -0.2854179 -17.75576Apf 1.26 2.00 1.26 3.26 0.7003024 -17.84298Apf 1.28 2.00 1.28 3.28 0.4022305 -17.92569

Haga un gráfico de las dos primeras coordenadas discriminantes,¿Qué observaen la segunda coordenada?Sabemos que la segunda coordenada corresponde al autovalor 0 y por lo tanto no aporta información.

Gráficamente esto se observa considerando que en este sistema de coordenadas los centroides de las respectivaspoblaciones están alineados para esta segunda coordenada.varsProy <- c('proyecciones1','proyecciones2')

centroidePAf <- md42[ which( md42$especie == 'Af' ) ,varsProy] %>% colMeans %>% enframe() %>% spread(name,value)centroidePApf <- md42[ which( md42$especie == 'Apf' ) ,varsProy] %>% colMeans %>% enframe() %>% spread(name,value)

centroides <- tibble(proyecciones1 = c(centroidePAf$proyecciones1, centroidePApf$proyecciones1),proyecciones2 = c(centroidePAf$proyecciones2, centroidePApf$proyecciones2),

8

Page 9: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

especie = c('Af','Apf'))

md42 %>% ggplot() +aes( x = proyecciones1, y = proyecciones2 , color = especie ) +geom_point() +geom_point(data = centroides, color = "blue", size = 5) +geom_hline( yintercept = centroides[[1,'proyecciones2']], linetype="dashed")

−19

−18

−17

−16

−4 −2 0

proyecciones1

proy

ecci

ones

2

especie

Af

Apf

Esto hace bien evidente la propiedad fundamental de las coordenadas discriminantes, son las que evidencianuna mejor separación entre los datos.

Proyección en Diversas Direcciones

A modo comparativo, realizamos una plasmación unidimensional sobre las dos coordenadas naturales, lacoordenada discriminante y su coordenada ortogonal.md42 %>% gather(y1,y2,proyecciones1,proyecciones2,key='variable',value='magnitud') %>%

ggplot() +aes( x = magnitud, y = 0, color = especie ) +geom_point() +facet_grid(.~variable, scales="free")

## Warning: attributes are not identical across measure variables;## they will be dropped

9

Page 10: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

proyecciones1 proyecciones2 y1 y2

−4 −2 0 −19 −18 −17 −16 1.2 1.3 1.4 1.5 2.9 3.1 3.3 3.5−0.050

−0.025

0.000

0.025

0.050

magnitud

0

especie

Af

Apf

Se puede observar:

• Proyectando sobre la coordenada discriminante las especies forman dos cúmulos separados.• Proyectando sobre la coodenada ortogonal a la discriminante, tenemos mínima distinción entre los

grupos.• Las otras dos coordenadas muestran grados de separación intermedios.

Realice un gráfico de los puntos en las coordenadas originales y grafique la rectaa ·

{x− x1−x2

2

}= 0.

Hallar los puntos de la curva implícita.

vector1 <- (dir1 / normaVector(dir1) ) %>% unlist() %>% c()vector2 <- c(1,1)proyeccion2en1 <- (vector1 / (normaVector(vector1))^2 ) * c( vector2 %*% vector1 )proyeccion2en1

## [1] 0.5230759 -0.2067302vectorResto <- vector2 - proyeccion2en1vectorParam <- vectorResto / vectorResto[[1]]

listaMediasP <- map( md4$especie %>% unique() %>% unlist() , ~mediaUnaPoblacion(md4,variables,"especie",.x) )mediaMedias <- ( reduce(listaMediasP,`+`) / 2 )

trazarRecta <- function(t) {punto <- c(t) * vectorParam + mediaMedias

10

Page 11: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

names(punto) <- c('y1','y2')return( punto )

}

puntosL <- seq(-0.5,0.5,length.out = 15)puntosRecta <- map(puntosL,trazarRecta)colP1 <- puntosRecta %>% map_dbl(~.x['y1'])colP2 <- puntosRecta %>% map_dbl(~.x['y2'])

coordenadasRecta <- tibble(y1 = colP1,y2 = colP2

)

md43 <- md42md43$P1 <- colP1md43$P2 <- colP2

Recta Discriminante

ggplot(data=md43) +aes( x = y1, y = y2, color = especie ) +geom_point() +geom_line( aes( x = P1, y = P2), colour = "purple" )

2.0

2.5

3.0

3.5

4.0

4.5

1.00 1.25 1.50 1.75

y1

y2

especie

Af

Apf

11

Page 12: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

Comprobar que la distancia euclídea entre los promedios de cada grupo ex-presados en la primer coordenada coincide con la distancia de Mahalanobisentre los promedios x1 y x2 expresados en las variables originales, es decir√

(x1 − x2)′ S−1 (x1 − x2).

difMedias <- listaMediasP %>% reduce(`-`)listaQP <- todosLosQ(md4,variables,"especie")

matrizS <- (1 / (nrow(md4) - length( unique(md4$especie) ) ) ) * reduce(listaQP, `+`)

(t(difMedias) %*% solve(sDentroP) %*% difMedias) %>% sqrt()

## [,1]## [1,] 3.972377mediaProyAf <- md43[which( md43$especie == "Af" ),"proyecciones1"] %>% colMeans()mediaProyApf <- md43[which( md43$especie == "Apf" ),"proyecciones1"] %>% colMeans()

difProms <- mediaProyApf - mediaProyAf

difProms

## proyecciones1## 3.972377

12

Page 13: Guía4-i, Coordenadas Discriminantescms.dm.uba.ar/academico/materias/2docuat2019/... · Prueba para la Igualdad de Matrices de Covarianza Estamos en el caso H 1 de la prueba sobre

1. Estadístico Usado

γ∗1 =

∏kj=1

∣∣∣Qi

ni

∣∣∣ni2

∣∣Un

∣∣n2

−2 ln (γ∗1 )D→ χ2

ν−ν1

2. Grafique los puntos originales y la recta a′[x− x1+x2

2

]= 0.

R : a′[x− x1 + x2

2

]= 0

a = S−1 · (x1 + x2)

Dado que estamos en el plano, el vector ortogonal a a′ es único y define larecta que queremos en forma explícita.Necesitamos además un punto que pertenezca a al misma, el más simple deobtener es x1+x2

2 .b/b · a = 0,

Sea u ∈ R2/u ∦ ab = a− Proya (u)(0; x1+x2

2

)∈ R

(x1;x2) = b · t+ x1 + x2

2

(x1;x2) = b · t+ o

R (t) =

{x1 (t) = b1t+ o1

x2 (t) = b2t+ o2

Podemos obtener una ecuación explícita:{x1−o1b1

= tx2−o2b2

= t

x2 − o2b2

=x1 − o1b1

x2 − o2 =b2b1x1 −

b2b1o1

R : x2 =b2b1x1 −

b2b1o1 + o2

1