Aporte R
Aporte R
Aporte R
1
Mario A. Morales R.
11 de diciembre de 2006
Cambios
Este documento contiene, lo que le mandé en la primera oportunidad mas:
frame=bottomline
frame=lines
frame=topline
frame=leftline
stem(tabla1_1$CI)
stem(tabla1_1$Peso)
stem(tabla1_1$Edad)
frame=single
stem(tabla1_1$CI)
stem(tabla1_1$Peso)
stem(tabla1_1$Edad)
frame=lines
stem(tabla1_1$CI)
stem(tabla1_1$Peso)
stem(tabla1_1$Edad)
frame=bottomline
stem(tabla1_1$CI)
stem(tabla1_1$Peso)
4
stem(tabla1_1$Edad)
frame=leftline
stem(tabla1_1$CI)
stem(tabla1_1$Peso)
stem(tabla1_1$Edad)
\usepackage{fancyvrb}
Conceptos preliminares
Observación
La lectura de los datos se hace con la función scan(), eso tiene el inconve-
niente que ocupa mucho espacio, otra alternativa es usar read.table() pero
tiene el inconveniente que los datos estarı́an en un archivo plano aparte y
el lector no tendrı́a acceso a ellos a menos que se coloquen en una página
web del libro y tiene el inconveniente que seria mas difı́cil para el lector no
familiarizado con R poner a correr el código, por lo del directorio de trabajo
y esas cosas más avanzadas de lectura de datos externos.
Como las estadı́sticas de resumen que están en el libro las calcula con la tabla
2.1, con estos datos hice lo mismo que con los de la tabla 1.1. Es decir hago
los gráficos y calculo las estadı́sticas.
5
6 CAPÍTULO 1. CONCEPTOS PRELIMINARES
A lo que vinimos
El siguiente código de R lee los datos de la tabla 1.1 y con ellos realiza los
diagramas de tallos y hojas que están inmediatamente debajo, el disperso-
grama de la figura 1.4, el box plot de la figura 1.5, los perfiles de la figura
1.3 y por último un gráfico de estrellas y los rostros de Chernoff.
datos2<-matrix(datos,ncol=3,byrow=TRUE)
tabla1_1<-data.frame(datos2)
colnames(tabla1_1)<-c("CI","Peso","Edad")
Los gráficos que se crean con este código corresponden a los de la sección 1.2
stem(tabla1_1$CI)
stem(tabla1_1$Peso)
stem(tabla1_1$Edad)
datos3<-stack(data.frame(scale(tabla1_1)) )
plot(datos3$ind,datos3$values)
library(lattice)
histogram(~values|ind,data=datos3, layout = c(3,1),
type = "density", panel = function(x, ...)
{panel.histogram(x, ...)
panel.mathdensity(dmath = dnorm, col = "black",
args = list(mean=mean(x),sd=sd(x)))
} )
# Gráfico de estrellas
stars(tabla1_1)
# Estadı́sticas de resumen
summary(tabla1_1)
# vector de medias
8 CAPÍTULO 1. CONCEPTOS PRELIMINARES
mean(tabla1_1)
cov(tabla1_1)
# Matriz de correlaciones
cor(tabla1_1)
sum(diag(cov(tabla1_1)))
det(cov(tabla1_1))
9
datos<-scan()
1.38 51 4.8 115
1.40 60 5.6 130
1.42 69 5.8 138
1.54 73 6.5 148
1.30 56 5.3 122
1.55 75 7.0 152
1.50 80 8.1 160
1.60 76 7.8 155
1.41 58 5.9 135
1.34 70 6.1 140
datos2<-matrix(datos,ncol=4,byrow=TRUE)
tabla1_2<-data.frame(datos2)
colnames(tabla1_2)<-c("X1","X2","X3","X4")
# termina la lectura de datos
datos3<-stack(data.frame(scale(tabla1_2)) )
plot(datos3$ind,datos3$values)
library(lattice)
histogram(~values|ind,data=datos3, layout = c(3,1),
type = "density", panel = function(x, ...)
{panel.histogram(x, ...)
panel.mathdensity(dmath = dnorm, col = "black",
args = list(mean=mean(x),sd=sd(x)))
} )
# Gráfico de estrellas
stars(tabla1_2)
# Estadı́sticas de resumen
summary(tabla1_2)
# vector de medias
round(mean(tabla1_2),2)
round(cov(tabla1_2),3)
# Matriz de correlaciones
round(cor(tabla1_2),3)
11
sum(diag(cov(tabla1_2)))
det(cov(tabla1_2))
S<-cov(tabla1_2)
mahalanobis(tabla1_2,center=mean(tabla1_2),cov=S)
sqrt( mahalanobis(tabla1_2,center=mean(tabla1_2),cov=S) )
I4<-diag(1,4)
sqrt(mahalanobis(tabla1_2,center=mean(tabla1_2),cov=I4) )
12 CAPÍTULO 1. CONCEPTOS PRELIMINARES
Capı́tulo 2
Distribuciones multivariantes
gmultinorm<-function(n,sigma=diag(1,n),mu=matrix(0,nrow=n),
semilla=NULL){
if(!is.null(semilla)){set.seed(semilla)}
# vector de medias
p<-nrow(sigma) # numero de variables
unos<-matrix(1,nrow=n) #
# repite el vector mu n veces por fila y una vez por columnas
M<-t(mu)%x%unos
G<-chol(sigma) # descomposición de cholesky
Z<-matrix(rnorm(p*n),ncol=p) # genera n vectores $N_p(0,Ip)
# genera n vectores $N_p(mu ,sigma)
Y<-Z%*%G+M
Y
}
# el llamado a la función
n<-20 # muestra de tama~ no n=20
# vector de medias
13
14 CAPÍTULO 2. DISTRIBUCIONES MULTIVARIANTES
media<-matrix(c(1,3,0))
# mat de covarianzas
S<-matrix(c(4,2,1,2,3,1,1,1,5),nrow=3,byrow=TRUE)
gmultinorm(20,mu=media,sigma=S,semilla=552154123)
library(MASS)
mvrnorm(n, media, S)
mardia.test<-function(Y){
n<-nrow(Y) # numero de filas de Y
p<-ncol(Y) # numero de columnas de Y
gl_chi<-p*(p+1)*(p+2)/6 # grados de libertad
Q<-diag(n)-(1/n)*matrix(1,n,n) # I_p-(1/n)1_n1’_n
S<-(1/n)*t(Y)%*%Q%*%Y # matriz de covarianzas muestral
# Matriz g_hi de la ecuación 2.12
G_MATRIZ<- Q%*%Y%*%solve(S)%*%t(Y)%*%Q
b_1<-sum(G_MATRIZ^3)/(n^2) # cálculo de la simetı́a
b_2<-sum(diag(G_MATRIZ^2))/n # calculo de la curtosis b_(2,p)
EST_b_1<-n*b_1/6 # calculo de la estadı́stica B1 ec. (2.13a)
15
Y1<-scan()
72 66 76 77 60 53 66 63 56 57 64 58 41 29 36 38 32 32 35 36
30 35 34 26 39 39 31 27 42 43 31 25 37 40 31 25 33 29 27 36
32 30 34 28 63 45 74 63 54 46 60 52 47 51 52 43 91 79 100
75 56 68 47 50 79 65 70 61 81 80 68 58 78 55 67 60 46 38
37 38 39 35 34 37 32 30 30 32 60 50 67 54 35 37 48 39 39
36 39 31 50 34 37 40 43 37 39 50 48 54 57 43
Y<-matrix(Y1,ncol=4,byrow=TRUE)
mardia.test(Y)
library(mvnormtest)
mshapiro.test(t(Y))
16 CAPÍTULO 2. DISTRIBUCIONES MULTIVARIANTES
Capı́tulo 3
17
18 CAPÍTULO 3. INFERENCIA SOBRE EL VECTOR DE MEDIAS
2 12 10 12 9 2 14 17 24 23 2 13 15 18 20
2 11 16 18 28 2 7 7 19 18 2 12 15 7 28
2 6 5 6 13
datos2<-matrix(datos,ncol=5,byrow=TRUE)
ejemp3_5<-data.frame(datos2)
colnames(ejemp3_5)<-c("sexo","X1","X2","X3","X4")
datos2<-matrix(datos,ncol=3,byrow=TRUE)
ejemp3_9<-data.frame(datos2)
colnames(ejemp3_9)<-c("metodo","matemat","escrit")
summary(ajuste,test="Pillai")
summary(ajuste ,test= "Hotelling-Lawley")
summary(ajuste ,test= "Roy")
# Las matrices E y H
M<-summary(ajuste)$SS
H<-M$metodo
E<-M$Residuals
Capı́tulo 4
sigma.test<-function(Sigma_0,S,n){
# numero de filas la matriz Sigma
p<-nrow(S)
gl<-(1/2)*p*(p+1) # grados de libertad
# producto entre S y la inversa de Sigma_0
Sisigma_0<-S%*%solve(Sigma_0)
#determinante de sigma_0
D_sigma_0<-det(Sigma_0)
#determinante de S
D_S<-det(S)
# estadı́stica lambda de Ecua 4.6
E_lambda<-(n-1)*(log(D_sigma_0)-log(D_S)+
sum(diag(Sisigma_0))-p)
# estadı́stica lambda de Ecua 4.7
E_lambda1<-(1-(1/(6*(n-1)))*(2*p+1-2/(p+1) ))* E_lambda
p_val<-pchisq(E_lambda1,gl) # pvalor
list(E_lambda1=E_lambda1, P_valor=p_val)
}
21
22CAPÍTULO 4. INFERENCIA SOBRE LA MATRIZ DE COVARIANZAS
# llamado de la función
Sigma_0<-matrix(c(4,3,2,3,6,5,2,5,10),nrow=3 )
S<-matrix(c(3.42,2.60,1.89,2.60,8,6.51,1.89,6.51,9.62),nrow=3)
sigma.test(Sigma_0,S,n=20)
var.igual<-function(datos,grupos){
# matriz de ceros para guardar la suma de v_i*S_i
St<-matrix(0,nrow=ncol(datos),ncol=ncol(datos))
# matrices de covarianzas.
Covs<-by(datos,grupos,cov)
# numero de obs en cada grupo
ni<-as.vector( by(datos,grupos,nrow ) )
vi<-ni-1
lev<-levels(grupos) # niveles del factor
# un vector para guardar los logaritmos de los determinantes.
LnSi<-numeric(1)
# este ciclo for calcula los logaritmos de los determinantes
# y la matriz para calcular Sp
for(i in 1:length(lev)){
Si<- Covs[[i]]
LnSi[i]<-log(det(Si))
St<-St+vi[i]*Si
}
# matriz Sp
Sp<- St/sum(vi)
# se implementa la ec 7.23 Rencher
LnM<-0.5*sum(vi* LnSi) - 0.5*sum(vi)*log(det(Sp))
23
p<-ncol(Sp)
k<-length(ni) # numero de grupos
# ec. 7.22 Rencher
c1<-(sum(1/vi)-1/sum(vi))*( (2*p^2+3*p-1)/(6*(p+1)*(k-1)) )
# ec. 7.24 Rencher
c2<-(sum(1/vi^2)-1/sum(vi)^2)*( (p-1)*(p+2)/( 6*(k-1) ) )
a1<-0.5*(k-1)*p*(p+1)
a2<-(a1+2)/(abs(c2-c1^2))
b1<-(1-c1-a1/a2)/a1
b2<- (1-c1-2/a2)/a2
# ec. 7.21
u<- -2*(1-c1)*LnM
if(c2>=c1^2){
F<- -2*b1*LnM # ec. 7.25 Rencher
pvalor<-pf(F,a1,a2,lower.tail=FALSE)
}else{
F<- -( a2*b2*LnM ) /(a1*(1+2*b2*LnM)) # ec. 7.26 Rencher
pvalor<-pf(F,a1,a2,lower.tail=FALSE)
}
Resp<-matrix(c(LnM,u,c1,c2,a1,a2,b1,b2,F,pvalor,-2*LnM),
nrow=1)
colnames(Resp)<-c("LnM","u","c1","c2","a1","a2","b1","b2","F",
"pvalor","-2*LnM")
print(Resp)
}
var.igual(Mdatos,ejemp3_9[,1] )
24CAPÍTULO 4. INFERENCIA SOBRE LA MATRIZ DE COVARIANZAS
Capı́tulo 5
Análisis de componentes
principales
datos2<-matrix(datos,ncol=5,byrow=TRUE)
ejemp5_1<-data.frame(datos2)
25
26 CAPÍTULO 5. ANÁLISIS DE COMPONENTES PRINCIPALES
#biplots
par(mfrow=c(2,2))
# primer plano factorial
biplot(acp)
#segundo plano factorial
biplot(acp,choices = c(1,3))
# tercer plano factorial
biplot(acp,choices = c(2,3))
27
28 CAPÍTULO 6. ANÁLISIS DE FACTORES COMUNES Y ÚNICOS
# varianza especı́fica
1-comun
# Rotación varimax
varimax(f)
library(GPArotation)
TV <- GPFoblq(f, method="quartimax", normalize=TRUE)
print(TV)
summary(TV)
fac<-factanal(factors=2, covmat=R,rotation="none")
# los pesos se obtienen ası́:
fac$loadings
# Varianza especı́fica
fac$uniquenesses
# Comunalidades
1-fac$uniquenesses
# Matriz de correlaciones usada
fac$correlation
# Análisis de factores con rotación varimax
fac<-factanal(factors=2, covmat=R,rotation="varimax")
# Como "varimax" es la opción por defecto para rotation,
# el siguiente comando produce el mismo resultado.
fac<-factanal(factors=2, covmat=R)
Capı́tulo 7
Análisis de conglomerados
x<-matrix(c(0,3,7,11,10,
3,0,6,10,9,
7,6,0,5,6,
11,10,5,0,4,
10,9,6,4,0),ncol=5 )
dimnames(x)<-list(paste("O",1:5,sep=""),
paste("O",1:5,sep="") )
y<-as.dist(x)
29
30 CAPÍTULO 7. ANÁLISIS DE CONGLOMERADOS
cl<-hclust(y, method="average")
plot(cl,hang = -1)
abline(h=4.5,lty=2)
# método de ward
cl<-hclust(y, method="ward")
plot(cl,hang = -1)
abline(h=4.5,lty=2)
x<-c(1,2,4,5,3,3)
y<-c(2,1,1,4,5,3)
datos<-data.frame(x=x,y=y,row.names=LETTERS[1:length(x)])
# distancia máxima entre dos componentes de X y Y
dd<-dist(datos,method="maximum")
# distancia de manhattan
dd<-dist(datos,method="manhattan")
# distancia de canberra
dd<-dist(datos,method="canberra")
# distancia de minkowski
dd<-dist(datos,method="minkowski")
# distancia euclidiana
dd<-dist(datos)
# distancia euclidiana
dd<-dist(datos,method="euclidean")
Análisis discriminate
Se presenta el ejemplo 8.2, como son muchos datos (172 filas) la lectura se
hace desde un archivo externo usando la función (read.table())
# tabla de clasificación
addmargins(table(ejemp8_2$GRP,clasif))
31
32 CAPÍTULO 8. ANÁLISIS DISCRIMINATE
nuevo<-data.frame(DOWN_A=54.36,DOWN_P=220.07,DOWN_L=90.08,
DOWN_B=44.84,RIGHT_A=53.86,RIGHT_P=220.17,
RIGHT_L=90.27,RIGHT_B=43.53)
predict(z,nuevo)$class
A partir de ese código se puede escribir una función que lo haga para cualquier
situación
Capı́tulo 9
# lectura de datos
datosY<-scan()
500 43 98 17 800 20 92 32 570 28 98 26 550 28 98 26
550 28 98 26 380 15 99 28 930 21 99 28 650 10 101 27
600 10 101 27 1500 19 99 23 1750 22 101 27 2000
58 100 18 2500 34 102 16 2000 21 105 20 7850 42 84 5
10500 50 81 -12
datosY<-matrix(datos,ncol=4,byrow=TRUE)
colnames(datosY)<-paste("Y",1:4,sep="")
datosX<-scan()
0 3 22 57 17 1 0 16 20 38 13 13 0 6 28 46
17 3 0 4 19 47 27 3 0 1 8 50 35 6 0 2 19
44 32 3 0 0 15 50 27 8 10 21 40 25 4 0 14
26 32 28 0 0 0 1 6 80 12 1 1 4 34 33 22
6 0 7 14 66 13 0 0 9 15 47 21 8 3 7 17
32 27 14 0 5 7 84 4 0 0 3 1 94 4 0
datosX<-matrix(datosX,ncol=6,byrow=TRUE)
colnames(datosX)<-paste("X",1:6,sep="")
33
34 CAPÍTULO 9. ANÁLISIS DE CORRELACIÓN CANÓNICA
ejemp9_2<-data.frame(cbind(datosX,datosY))
Escalamiento multidimensional
35
36 CAPÍTULO 10. ESCALAMIENTO MULTIDIMENSIONAL
Capı́tulo 11
Análisis de correspondencia
37
38 CAPÍTULO 11. ANÁLISIS DE CORRESPONDENCIA
Apéndice
39
40 CAPÍTULO 11. ANÁLISIS DE CORRESPONDENCIA
data(women)
W <- as.matrix(women)
0 1
3 1 2 4
H<-cbind(A,B); Dispone la matriz B al lado de la matriz A , H = .
2 5 0 1
6 12 2 4
0 3 0 1
K<-A%x%B; Producto directo (Kronecker) entre A y B , K = 4 8 10 20 .
0 2 0 5
0,67 4,00
L<-B/A; Divide cada elemento de B por el respectivo de A , L = .
0,00 0,20
m<-6:10; Genera el vector m con valores enteros entre 6 y 10, m = 6 7 8 9 10 .
n<-8:5; Genera el vector n con valores enteros entre 8 y 5, m = 8 7 6 5 .
library(Matrix);
O<-as.matrix(bdiag(A,B));
Matriz en bloques; A y B en la diagonal O =
3 1 0 0
2 5 0 0
0 0 2 4 .
0 0 0 1
Det_A<-det(A); Determinante de A , Det_A = 13.
diag(A); Vector
de tipo numérico cuyas componentes son la diagonal de A,
d= 3 5 .
DG_A<-diag(diag(A));
Transforma la matriz A en una matriz diagonal,
3 0
DG_A = .
0 5
0,3846 −0,0769
Inv_A<-solve(A); Inversa de la matriz A, Inv_A = .
−0,1538
0,2308
3 2
T_A<-t(A); Produce la transpuesta de A, T _A = .
1 5
Vap_C<-eigen(C)$values Obtiene los valores propios de C,
V ap_C = 7,470 1,399 −2,870
Vep_C<-eigen(C)$vectors Obtiene los vectores propios de C,
42 CAPÍTULO 11. ANÁLISIS DE CORRESPONDENCIA
−0,61 −0,04 0,79
V ep_C = −0,45 −0,80 −0,39
−0,65 0,60 −0,47
Filas_C<-nrow(C); Cuenta el numero de filas de C , F ilas_C = 3.
Colum_C<-ncol(C); Cuenta el numero de columnas de C , Colum_C = 3.
Tra_C<-sum(diag(C)); Calcula la traza de la matriz C , T ra_C = 6.
b<-matrix(c(3,2),ncol=1)
X<-solve(A,b)
3x1 + x2 = 3 3 1 3
resuelve el sistema con A = y b = .
2x 1 + 5x 2 = 2 2 5 2
1
Solución X =
0
svd(A)$u
svd(A)$v
diag(svd(A)$d)
Encuentra
la descompocición
singular de la matriz
A (A2.29)
esta es: U
=
−0,416 −0,909 −0,526 −0,851 5,834 0,000
,V = y∆=
−0,909 0,416 −0,851 0,526 0,000 2,228