Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
programación “R”.
Morelia, Michoacán, agosto 2015.
Docentes:
Rodrigo Macip (ENES Morelia)
Ernesto Vicente Vega Peña (IIES,UNAM)
INTRODUCCIÓN AL LENGUAJE “R”
Contenido
I. Generalidades: ¿Qué es el proyecto “R”?
I.1. Menú Archivo: cambiar de directorios.
I.2. Menú paquetes (1): Cargar paquetes.
Menú paquetes (2): Seleccionar espejos CRAN.
Menú paquetes (3): Instalar paquetes.
I.3. Menú Ayuda (1): Funciones R (texto).
Menú Ayuda (2): Ayuda html.
Menú Ayuda (3): Manuales en PDF: “ An Introduction
to ‘R’ ”.
Menú Ayuda (4): Manuales en PDF: “ ‘R Reference
Manual´”.
Contenido (cont).
* Funciones R (texto)
I.4. Ayuda!!!
* Ayuda html
I.4. Más Ayuda!!! Ayuda
Manuales (en PDF)
An Introduction to R
I.4. Otra vez más Ayuda!!! Ayuda
Manuales (en PDF)
R Reference Manual
Sitios y ligas pertinentes para obtener manuales y
ayuda espiritual:
http://www.rseek.org/
http://crisol.uc3m.es/index.php/gnur
http://www.statmethods.net/index.html
http://addictedtor.free.fr/graphiques/thumbs.php
http://rgm2.lab.nig.ac.jp/RGM2/images.php?
show=all&pageID=499
http://rgm2.lab.nig.ac.jp/RGM2/images.php?show=all&pageID=406
II.1. Scripts en “R”.
* Nuevo script
* Abrir script
<-
( signos “<“ y “-” )
Los objetos tienen propiedades, como los objetos en estado sólido. Y tienen
partes o componentes.
numeric,
complex,
logical,
character
raw (almacenar bytes silvestres así nomás),
II.2. y II.3.
attributes(object)
II.2. y II.3.
Cápsula erudita:
Hay dos grandes sistemas de objetos en “R”. Esto significa que
hay dos grandes maneras de construir objetos. Estos sistemas
se conocen como “clases”.
objetos
métodos clase
Los conceptos de clase y métodos son fundamentales para
cualquier lenguaje orientado a objetos.
Methods are basically functions that are Los métodos son funciones especializadas
specialized to carry out specific para ejecutar cálculos específicos en
calculations on objects, usually of a objetos, usualmente d una clase particular.
specific class. This is what makes the Esto es lo que hace al R un lenguaje
language object oriented. orientado a objetos.
Another feature of most object-oriented Una característica fundamental de la mayoría de
languages is the concept of inheritance. los lenguajes orientados a objetos es el concepto
de herencia.
If a class inherits from another class then Si una clase es heredera de otra clase, entonces
generally it gets all the slots in the parent class generalmente recibe todas las propiedades de la
and can extend it by adding new slots. clase parental, y la clase heredera puede
aumentar sus propiedades.
The entities that R creates and manipulates T Las entidades que el lenguaje R crea y
are known as objects. manipula se conocen como objetos.
These may be variables, arrays of numbers, Estos pueden ser variables, arreglos de números,
character strings, functions, or more general cadenas de caracteres, funciones o estructuras
structures built from such components. más generales construidas a partir de los objetos
antes mencionados.
By the mode of an object we mean the basic A hablar del modo de un objeto se hace
type of its fundamental constituents. referencia al tipo básico de sus componentes
fundamentales.
Examples are vectors of numeric (real) or Un ejemplo son los vectores de valores
complex values, vectors of logical values and numéricos (reales) o complejos, vectores de
vectors of character strings. These are known valores lógicos y vectores de cadenas de
as “atomic” structures since their components caracteres. Estos son conocidos como
are all of the same type, or mode, estructuras “atómicas”, ya que sus componentes
namely numeric, complex, logical, character a son todos del mismo tipo o modo, es decir
nd raw. numéricos, complejos, lógicos, de carácter y raw.
Vectors must have their values all of the Los vectores deben tener todos sus valores en
same mode. Thus any given vector must be el mismo modo. Pro tanto, un vector dado debe
unambiguously ser inambiguamente lógico, numérico complejo,
either logical, numeric, complex, character or r de carácter o raw.
aw.
R also operates on objects El lenguaje R también trabaja con
called lists, which are of mode list. objetos llamados listas, que son del
modo lista.
asignación
-> <-
Indexar listas
$
Palabras reservadas
(no utilizarlas para nombres de objetos):
B I R
break if repeat
in
Inf
E
else W
N while
NA
F NaN
FALSE next
for NA_character_
T
function NA_complex_ TRUE
NA_integer_
NA_real_ Y los
NULL números
II.2. y II.3.
#
Que significa: ignora olímpicamente todo lo que esté a
la derecha del símbolo.
read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", row.names,
col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA,
nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#",
allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(), encoding = "unknown")
Argumentos:
Función que Instrucciones para “matizar”
se realiza o “modular” la función
read.table( )
Así están construidas TODAS las funciones en “R”
II.4. Anatomía de una función ya diseñada (2/4).
read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", row.names,
col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA,
nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#",
allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(), encoding = "unknown")
Llenar los
Qué hacer si espacios
aparece un renglón vacíos con NA
en blanco (F/T)
II.4. Anatomía de una función ya diseñada (3/4).
NombrePoderoso<-function () {
NombrePoderoso<-function (InformacionExterna) {
resultado…
return(list(NombreResultado=resultado))
}
NomPod NombrePoderoso(InformacionExterna)
ResX NomPod$NombreResultado
v0<- c(67,12,1,-99,0.444,333.22)
v1<- c(“chivas”,”tuzos”,”monarcas”,”xolos”)
v2<- c(TRUE,TRUE,FALSE,FALSE,TRUE)
E0<- v0[5]
E3<- v1[3]
E4<- V2[4]
Y también se puede:
E26<-v0[2:6]
Ex<-v1[c(1,3,5)]
II.5.2. La función “c”.
v0<- c(67,12,1,-99,0.444,333.22,0.003)
v1<- c(“chivas”,”tuzos”,”monarcas”,”xolos”,”tecos”)
v2<- c(TRUE,TRUE,FALSE,FALSE,TRUE)
Ejemplos:
II.6. Lectura de datos (cont.).
Ejercicios:
library(xlsx)
read.xlsx( ) archivos de excel
library(jpeg)
readJPEG( )
library(tiff)
II.7. Manejo elemental de datos.
summary(…
tapply(…mean, var, length)
ftable(tapply(…
unique(…
length(…
NombreArchivo$NombreColumna.
II.7. Manejo elemental de datos (cont).
NombreArchivo[renglon,columna]
Ejercicios:
o<-read.table("Spred3.txt",header=T)
names(o)
#[1] "Species" "tcum" "tint" "remaining" "taken"
unique(o$Species)
#[1] abz cd cor dio mmu pol psd uva
SpUVA<-o[o$Species==“uva”,]
II.7. Manejo elemental de datos (cont).
Función subset:
o<-read.table("Spred3.txt",header=TRUE)
names(o)
#[1] "Species" "tcum" "tint" "remaining" "taken"
unique(o$Species)
unique(o$tint)
unique(o$taken)
o1<-subset(o,Species=="uva")
o4<-subset(o,Species=="uva" | Species=="abz")
o5<-subset(o,Species=="uva" | Species=="abz",select="remaining")
x<-seq(1,5,1)
prom<-mean(x)
print(prom)
sdev<-sd(x)
print(sdev)
II.7. Manejo elemental de datos (cont).
x<-runif(10,0,1)
y<-runif(10,0,1)
z1<-rbind(x,y)
print(z)
z2<-rbind(x,y)
print(z2)
II.7. Manejo elemental de datos (cont).
x<-seq(1,5,1)
s1<-sum(x)
print(s1)
sc<-cumsum(x)
print(sc)
sp<-cumprod(x)
print(sp)
II.7. Manejo elemental de datos (cont).
* En columnas en data.frames.
II.7. Manejo elemental de datos (cont).
Función “apply”:
Funciones “lapply”:
Matriz de
Qué se va a
datos
calcular:
mean
var
II.7. Manejo elemental de datos (cont).
Función “tapply”:
CuadroProms<-tapply(Y_Var,factor,mean)
Variable de
Qué se va a
respuesta
Factor para calcular:
agrupar la mean
Variable de var
respuesta
II.7. Manejo elemental de datos (cont).
Función aggregate:
dataXaggregate(x=MatrizDatos,by=grupos,FUN,data=…)
dataXaggregate(formula,by,FUN,data)
II.7. Manejo elemental de datos (cont).
Función by:
Datos
En formato Lo que se va a
data.frame Un factor o una calcular para cada
lista de factores nivel de cada factor
cada uno con los
mismos renglones
que data.
II.7. Manejo elemental de datos (cont).
oXouter(x,y,FUN)
Lo que se va a
Vectores calcular para cada
xyy combinación de
xi y yi
II.7. Manejo elemental de datos (cont).
Función merge:
Nombre de la Nombre de la
Columna en el Columna en el
Dataframe X Dataframe Y
II.7. Manejo elemental de datos (cont).
Función plot().
o<-read.table("igpe_adquim_5g_spp.txt",header=T)
print(o)
plot(o)
II.7. Manejo elemental de datos (cont).
Álgebra matricial.
m1<-matrix(DatMat,4,4,byrow=T)
II.7. Manejo elemental de datos (cont).
Álgebra matricial. Matriz transpuesta.
TranspA<-t(m1)
print("Transpuesta:")
print(TranspA)
[1] "Transpuesta:"
[,1] [,2] [,3] [,4]
V1 0.0 0.7 0.0 0.0
V2 0.1 0.0 0.5 0.0
V3 1.1 0.0 0.0 0.2
V4 0.5 0.0 0.0 0.0
II.7. Manejo elemental de datos (cont).
Álgebra matricial. Determinante de una matriz.
deterA<-det(m1)
print("determinante")
print(deterA)
[1]
"determinante"
[1] -0.035
II.7. Manejo elemental de datos (cont).
Álgebra matricial. Valores y vectores propios.
props<-eigen(m1)
print(props)
$values
[1] 0.78543527+0.0000000i -0.34658326+0.6023545i -0.34658326-0.6023545i
[4] -0.09226874+0.0000000i
$vectors
[,1] [,2] [,3] [,4]
[1,] 0.6840602+0i -0.3102905+0.5392785i -0.3102905-0.5392785i -0.01015893+0i
[2,] 0.6096519+0i 0.6266989+0.0000000i 0.6266989+0.0000000i 0.07707110+0i
[3,] 0.3880981+0i -0.2248710-0.3908212i -0.2248710+0.3908212i -0.41764470+0i
[4,] 0.0988237+0i -0.0652142+0.1121870i -0.0652142-0.1121870i 0.90527882+0i
II.7. Manejo elemental de datos (cont).
Álgebra matricial. Matriz inversa.
invA<-solve(m1)
print("inversa m1")
print(invA)
library(MASS)
invA<-ginv(m1)
print("inversa m1")
print(invA)
MatSensib<-function(){
m1<-as.matrix(read.table("matrizDem.txt",header=F))
props<-eigen(m1)
vD<-props$vectors[,1]
mt<-t(m1)
props2<-eigen(mt)
vI<-props2$vectors[,1]
vIt<-t(vI)
ProdEscalar<-as.numeric(vIt%*%vD)
print(ProdEscalar)
mS1<- vD%*%vIt
print(mS1)
MatSens<- mS1/ProdEscalar
print(MatSens)
}
II.7. Manejo elemental de datos (cont).
Álgebra matricial. Análisis de sensibilidad de la tasa de
crecimiento de un modelo demográfico.
Matriz de proyección:
V1 V2 V3 V4
[1,] 0.0 0.1 1.1 0.5
[2,] 0.7 0.0 0.0 0.0
[3,] 0.0 0.5 0.0 0.0
[4,] 0.0 0.0 0.2 0.0
x <- seq(0,1,0.1)
y<-x^0.5
plot(x,y,type=“l”)
y<-x
lines(x,y,type=“b”)
y<-x^2
lines(x,y,type=“p”)
y<-x^1/x
lines(x,y,type=“n”)
par(…
Abreviación de “parameter”.
o<-read.table("GradVolcTekila_DatMadera_8marzo2012.txt",header=T)
print(names(o))
plot(o$NumHojas,o$ArFolProm)
120
o$ArFolProm
80
Notar los nombres
de los ejes
40
0
o$NumHojas
Títulos
Símbolos
120
Ejes
o$ArFolProm
Texto en la gráfica
80
Tipo de caja
40
Aspecto
Y un abundante etc.
0
Dimensiones: Símbolos:
Antes:
titulazazo principal
120
120
100
o$ArFolProm
80
ejezote Y
80
60
40
40
20
0
o$NumHojas ejezote X
titulazo secundario
Guardar en archivo las gráficas (1):
Metafile bmp
Postcript TIFF
Guardar como:
Pdf jpg
png
Guardar en archivo las gráficas (2):
png(“NombreChido.png”,res=200,height=600,width=600)
plot(grafica)
dev.off()
75avo percentil
25avo percentil
II.9. Gráficas. Diagramas de caja y bigotes
(box and whiskers).
Sin valores Con valores
atípicos (outliers) atípicos (outliers)
o<-read.table("GradVolcTekila_DatMadera_8marzo2012.txt",header=T)
50
Frequency
30
0 10
o$ArFolProm
II.9. Gráficas. Histogramas (cont).
maximo<-max(o$ArFolProm)
minimo<-min(o$ArFolProm)
rango<-maximo-minimo
nucates<-12 Notar:
tampaso<-rango/nucates
intervalos<-seq(minimo,maximo,tampaso) 1) cómo se
hist(o$ArFolProm,breaks=intervalos,col="gray") construyen
los intervalos
Histogram of o$ArFolProm
2) Cómo se
incluyen en la
función
30
Frequency
20
10
0
0 20 40 60 80 100 120
o$ArFolProm
II.10. Funciones de probabilidad.
Prefijos para usar con
cada función:
d: densidad
p: probabilidad acumulada
q: distribución de cuantiles
r: números aleatorios
Ejemplo:
dnorm( )
pnorm( )
qnorm( )
rnorm( )
1
1 − [ ( x−μ )/σ ]2
2
Y= ⋅e
σ √2 π
promedio<-5
desvest<-1
tam<-10
tit<-as.character(tam)
xdat<-runif(tam,0,10)
ydat<-dnorm(xdat,promedio,desvest)
plot(xdat,ydat,pch=20,cex=1,main=tit,bty="l")
20 40 80 160
0.4
0.4
0.4
0.4
0.3
0.3
0.3
0.3
0.2
ydat
0.2
ydat
0.2
ydat
ydat
0.2
0.1
0.1
0.1
0.1
0.0
0.0
0.0
0.0
0 2 4 6 8 10 0 2 4 6 8 10 0 2 4 6 8 10 0 2 4 6 8 10
xdat xdat xdat xdat
II. 10. Funciones de probabilidad. Curva normal (cont).
Histogramas observados y su correspondiente curva normal:
o<-read.table("GradVolcTekila_DatMadera_8marzo2012.txt",header=T)
maximo<-max(o$ArFolProm)
minimo<-min(o$ArFolProm)
rango<-maximo-minimo
nucates<-12
tampaso<-rango/nucates
intervalos<-seq(minimo,maximo,tampaso)
h0<-hist(o$ArFolProm,breaks=intervalos,col="gray",freq=T,ylim=c(0,50))
xdat<-h0$counts
medios<-h0$mids
ynorm<-dnorm(medios,mean(xdat),sd(xdat))
lines(medios,ynorm*1000,type="p",pch=19,cex=1.6)
ynorm<-dnorm(1:100,mean(xdat),sd(xdat))
lines(1:100,ynorm*1000,type="p",pch=19,col=“red”,cex=0.6)
II. 10. Funciones de probabilidad. Curva normal (cont).
Histogram of o$ArFolProm
50
h0<-hist(o$ArFolProm,breaks=intervalos,col="gray",freq=T,ylim=c(0,50))
40
ynorm<-dnorm(medios,mean(xdat),sd(xdat))
lines(medios,ynorm*1000,type="p",pch=19,cex=1.6)
30
Frequency
ynorm<-dnorm(1:100,mean(xdat),sd(xdat))
lines(1:100,ynorm*1000,type="p",pch=19,col=“red”,cex=0.6)
20
10
0
0 20 40 60 80 100 120
o$ArFolProm
II. 10. Funciones de probabilidad. Curva normal (cont).
Normal Q-Q Plot
120
100
EsNormal<-shapiro.test(o$ArFolProm)
Sample Quantiles
80
print(EsNormal)
60
qqnorm(o$ArFolProm)
qqline(o$ArFolProm,lty=2)
40
20
Shapiro-Wilk normality test
0
-2 -1 0 1 2
Theoretical Quantiles
data: o$ArFolProm
W = 0.8156, p-value = 7.701e-10
ejeX<-seq(1,4,1)
ejeY<-seq(1,4,1)
persp(ejeX,ejeY,msfin,theta=0,phi=0,col="gray",shade=0.1,
zlab="lambda",xlab="age cat",ylab="age cat.",
ticktype="detailed",nticks=4)
II.9. Gráficas. Funciones (cont).
theta=135, phi=40
theta=0, phi=0
0.4
0.4
lambda
0.2
0.2
1 1
4 2 2
3
2
3 3
1
1 2 3 4
age cat 4 4
II.9. Gráficas. Funciones (cont.).
Divide la pantalla Renglones Columnas
Se crean 4
split.screen(c(2,2))
split.screen(c(2,2)) Espacios para
screen(1) gráficas
x <- seq(0,1,0,01)
y<-x^0.5
plot(x,y)
screen(2)
secuencia desde hasta En incrementos de
y<-x
plot(x,y)
screen(3)
y<-x^2
x <- seq(0,1,0.01)
plot(x,y)
screen(4)
y<-x^1/x grafica eje Y
plot(x,y) eje X
plot(x,y)
Función pairs().
CE
0.6
0.0
HCO3
0.6
0.42
0.0001703
0.0
pHH2O
0.8
0.086 0.38
0.4575 0.0007718
0.5
MO
0.6
NTOTAL
0.8
0.0025 -0.15 -0.39 0.89
0.9831 0.1942 0.0003812 0
0.2
P
0.6
0.8
0.28 0.36 0.52 -0.077 0.02 0.46
0.01528 0.001321 1.602e-06 0.5037 0.8646 2.419e-05
0.2
Na
0.6
0.0 0.2 0.4 0.6 0.8 1.0 0.5 0.7 0.9 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0
Este es el el escrip:
o2<-read.table("igpe_adquim_5g_spp.txt",header=T)
o<-o2[,-1]
x<-o
y<-o
for ( cc in 1:ncol(o) ){
mx<-max(o[,cc])
o[,cc]<-o[,cc]/mx
}
pairs(o,upper.panel =panel.smooth,lower.panel=corre,diag.panel=histos)
corre<-function(x,y) {
par(usr=c(0,1,0,1))
c2<-cor.test(x,y)
c2es<-c2$estimate
c2value<-c2$p.value
c3<-as.character(format(c2es,digits=2))
text(0.5,0.5,c3)
c4<-as.character(format(c2value,digits=4))
text(0.5,0.2,c4)
}
pairs(o,upper.panel =panel.smooth,lower.panel=corre,diag.panel=histos)
histos<-function(o) {
par(usr=c(0,1,0,2))
hist(o,add=T,prob=T,col="gray",ylim=c(0,2))
}
Así se ve completo el escrip:
Los arcanos
mensajes
de error del R.
La interpretación de los errores puede ser
(frecuentemente lo es) un arte mayor.
¿Qué hacer? ¿Cómo proceder?
¿Quién podrá ayudarnos?
o<-read.table(" DatGLM_17may2011.txt",header=T)
o<-read.table("DatGLM_17may2011.txt",header=T)
m1<-glm(NsppExot~TipoVeg*Ubicacion*TamPueblo,data=o,poison)
m2<-glm(NsppExot ~ TipoVeg + Ubicacion + TamPueblo,data=o,poisson)
CompaMode<-anova(m1,m2,test="Chi")
print(CompaMode)
library(multcomp)
o<-read.table("DatGLM_17may2011.txt",header=T)
m1<-glm(NsppExot~TipoVeg*Ubicacion*TamPueblo,data=o,poisson)
m2<-glm(NsppExot ~ TipoVeg + Ubicacion + TamPueblo,data=o,poisson)
CompaMode<-anova(m1,m2,test="Chi")
print(CompaMode
o<-read.table("DatGLM_17may2011.txt",header=T)
ml<-glm(NsppExot~TipoVeg*Ubicacion*TamPueblo,data=o,poisson)
m2<-glm(NsppExot ~ TipoVeg + Ubicacion +
TamPueblo,data=o,poisson)
CompaMode<-anova(m1,m2,test="Chi")
print(CompaMode)
II.11. Pequeño bestiario de fórmulas para modelos
estadísticos univariados.
Variables
Variable explicativas y
De estructura del modelo (cómo se
Respuesta relacionan las variables)
TipoDeAnalisis(Yvar ~ Xvar1+Xvar2.Xvar3*Xvar4…etc.)
aov
lm
Infaltable tilde
que significa “=“ “+” : efecto principal
ó “función de”
glm
“.” : interacción
Lenguaje “R” “*” : modelo completo
(efecto principal e
interacción)
II.11. De los factores y sus niveles.
fx<-factor(rep(c(“EtiqNivel1”,”EtiqNivel2”),c(NumRepNivel1, NumRepNivel2)))
Genero<-factor(rep(c(“fem”,”masc”),c(10,10)))
II.12. Sintaxis general de modelos lineales
generalizados (glm).
Tipo de error:
Para indicar el (poisson, binomial,
glm normal,gamma)
modelo<-glm(yvar~fx1*fx2,poisson)
o<-read.table("Mate_I_QuercusCast_2sep09.txt",header=T)
#print(names(o))
#[1] "Papm" "Hm" "KgC" "KgD" "KgT"
10
8
plot(o$Papm,o$Hm)
o$Hm
m0<-lm(Hm~Papm,data=o)
6
print("*** Partes de m0: *****")
4
print(names(m0))
2
print("*** Este es m0: ******") 0.05 0.10 0.15 0.20 0.25
print(m0) o$Papm
ValCoef<- Sm0$coefficients
print("Coeficientes:")
print(ValCoef)
print(ValCoef[1])
print(ValCoef[2])
print("R2:")
ValR2<-Sm0$adj.r.squared
print(ValR2)
El valor de p no es parte de los atributos de la función
summary. Se calcula en el momento al usar summary,
por eso no se puede extraer de ahí.
pred<-predict(m0)
lines(sort(o$Papm),sort(pred),type="b",pch=19,cex=0.6)
10
8
o$Hm
6
4
2
o$Papm
Y los infaltables residuales:
Residuals vs Fitted Normal Q-Q
par(mfrow=c(2,2))
Standardized residuals
3
18 18
0 1 2
plot(m0)
Residuals
1
-1
-2
-3
70
99
99 70
4 6 8 10 -2 -1 0 1 2
Standardized residuals
18
1 2 3
99
1.5
70
1.0
0.5
-1
Cook's
44 distance
7099
0.0
-3
4 6 8 10 0.00 0.02 0.04 0.06
Sección de Sección de
efectos fijos efectos
aleatorios
modelo<-lme(yvar~modelo,random=~1 | f1 / f2…etc)
f2 está
anidado
dentro de f1
II.12. Sintaxis general de modelos mixtos con
factores fijos, aleatorios, anidados y demás (lmer).
Sección de
Sección de efectos
efectos fijos aleatorios
modelo<-lmer(yvar~Xvars+(1 | f1 / f2…etc) )
f2 está
anidado
dentro de f1
Comparaciones múltiples. Datos “normales”.
o<-read.table("igpe_adquim_5g_spp.txt",header=T)
m0<-aov(MO~grupo,data=o)
Sm0<-summary(m0)
print(Sm0[[1]])
print(Sm0[[1]][[2]]) ¿Y todo esto
print(Sm0[[1]][[2]][[1]])
print(Sm0[[1]][[5]])
para qué?
cmT<-TukeyHSD(m0)
print(cmT)
cmPW<-pairwise.t.test(o$MO,o$grupo)
print(cmPW)
Comparaciones múltiples. Datos No “normales” y GLMs.
library(multcomp)
o<-read.table("DatGLM_17may2011.txt",header=T)
mGLM<-glm(NsppExot~TipoVeg*Ubicacion*TamPueblo,data=o,poisson)
print(summary(mGLM))
CompMult<-glht(mGLM,linfct=mcp(TipoVeg="Tukey"))
print(summary(CompMult))
par(mfrow=c(2,2))
plot(mGLM)
II.12. Extracción de información y representaciones
varias de los modelos estadísticos.
1) Por nombre;
2) Por subscriptos;
3) Con el signo $.
print(names(npk.aov))
"coefficients" "residuals" "effects“ "rank" "fitted.values" "assign" "qr“
"df.residual" "contrasts" "xlevels" "call“ "terms" "model"
2) Así se usa:
print(coefficients(npk.aov))
(Intercept) block1 block2 block3 block4 block5
54.8750000 1.7125000 1.6791667 -1.8229167 -1.0137500 0.2950000
N1 P1 K1 N1:P1 N1:K1 P1:K1
2.8083333 -0.5916667 -1.9916667 -0.9416667 -1.1750000 0.1416667
II.12. Extracción de información y representaciones
varias de los modelos estadísticos.
Usando el signo “$”.
npk.aov aov(yield ~ block + N*P*K, npk)
print(names(npk.aov))
"coefficients" "residuals" "effects“ "rank" "fitted.values" "assign" "qr“
"df.residual" "contrasts" "xlevels" "call“ "terms" "model"
1) print(npk.aov$coefficients)
(Intercept) block1 block2 block3 block4 block5
54.8750000 1.7125000 1.6791667 -1.8229167 -1.0137500 0.2950000
N1 P1 K1 N1:P1 N1:K1 P1:K1
2.8083333 -0.5916667 -1.9916667 -0.9416667 -1.1750000 0.1416667
N1:P1:K1
NA
2) print(npk.aov$coefficients[4])
block3
-1.822917
II.12. Extracción de información y representaciones
varias de los modelos estadísticos.
Usando los subscriptos.
1) print(npk.aov[1])
$coefficients
(Intercept) block1 block2 block3 block4 block5
54.8750000 1.7125000 1.6791667 -1.8229167 -1.0137500 0.2950000
N1 P1 K1 N1:P1 N1:K1 P1:K1
2.8083333 -0.5916667 -1.9916667 -0.9416667 -1.1750000 0.1416667
N1:P1:K1
NA
2) print(SUMMnpk.aov[[1]][[3]])
68.6590000 189.2816667 8.4016667 95.2016667 21.2816667 33.1350000
0.4816667 15.4405556
2
2 2
1
La función plot utilizada con
2
0
als
ls
0
sidua
ardizedresidu
un modelo estadístico
e
-2
R
-1
nd
-4
Sta
3 5
-6
5
-2
50 55 60 65 -2 -1 0 1 2
2
3 5
residuales.
2 2
Standardized residuals
1.2
1
0.8
0
ardizedresiduals
-1
0.4
Stand
3
-2
5
0.0
block :
50 55 60 65 4 5 1 6 2 3
Función plot.design().
plot.design(yvar~xvar1*xvar2, etc)
II.12. Extracción de información y representaciones
varias de los modelos estadísticos.
o<-read.table("DatosAnovaDosVias.txt",header=T)
print(names(o))
# genero tipocomida consumo
par(mfrow=c(1,3),cex=1.5)
plot.design(consumo~genero,data=o)
plot.design(consumo~tipocomida,data=o)
plot.design(consumo~genero*tipocomida,data=o)
660
660
m ean of consum o
m ean of consum o
m ean of consum o
610
620
620
masc
600
580
580
fem
590
540
540
580
Función interaction.plot().
La variable de
respuesta va
interaction.plot(xvar1,xvar2,yvar) al final
II.12. Extracción de información y representaciones
varias de los modelos estadísticos.
o<-read.table("DatosAnovaDosVias.txt",header=T)
print(names(o))
# genero tipocomida consumo
interaction.plot(o$genero,o$tipocomida,o$consumo)
700
o$tipocomida
fresca
650
rancia
mean of o$consumo
600
550
fem masc
o$genero
II.12. Extracción de información y representaciones
varias de los modelos estadísticos.
Función coplot().
coplot(yvar~xvar1 | xvar2)
Modelo Factor
estadístico condicionante
del modelo
II.12. Extracción de información y representaciones
varias de los modelos estadísticos.
o<-read.table("DatosAnovaDosVias.txt",header=T)
print(names(o))
# genero tipocomida consumo
coplot(o$consumo~o$genero|o$tipocomida)
Given : o$tipocomida
rancia
fresca
fem masc
700
650
o$consumo
600
550
500
fem masc
o$genero
II.12. Para simplificar un modelo.
library(multcomp)
o<-read.table("DatGLM_17may2011.txt",header=T)
m1<-glm(NsppExot~TipoVeg*Ubicacion*TamPueblo,data=o,poisson)
MejorModelo <-step(m1)
print(summary(MejorModelo))
II.12. Para comparar dos modelos.
AICm1m2AIC(modelo1,modelo2)
ANOVAm1m2<-anova(m1,m2)
II.12. Para comparar dos modelos.
library(multcomp)
o<-read.table("DatGLM_17may2011.txt",header=T)
m1<-glm(NsppExot~TipoVeg*Ubicacion*TamPueblo,data=o,poisson)
CompaMode<-anova(m1,m2,test="Chi")
print(CompaMode)
¿Qué pretenden los
métodos
multivariados?
Gradientes Grupos
(variación continua) (variación discreta)
I) ¿Hay patrones?
II) ¿Existen variables que “expliquen” o estén
“relacionadas” con los patrones?
Dos grandes
familias de
métodos
multivariados.
*CCorA
Valores y *PCA
*CCA
Vectores *CA
*CCA
propios *DA
parciales
Métodos
Matriz de *Dendro-
*NMDS
distancia gramas
*Adonis
(o alguna medida *NMDS
de similitud)
Propósitos
Ejemplo de análisis de componentes principales
o<-read.table("datos_ej_pca.txt",header=T)
odf<-data.frame(o)
# matrices de covarianza
x<-odf
mcov<-cov(x,y=x)
print(mcov)
# matrices de correlación
mcor<-cor(x=odf,y=x)
print(mcor)
print(names(pcaq))
biplot(pcaq)
Ejemplo de análisis de NMDS:
Nonmetric Multi Dimensional Scaling
library(MASS)
plot(sol, type="t")
Ejemplos de análisis de discriminantes.
I.
o<-read.table("kuitzeoplus.txt",header=TRUE)
oad3<-lda(odf3$Veget~odf3$alt.m+odf3$Cob.m2+odf3$AB.cm2,data=odf3,
method="moment")
plot(oad3,pch=".",abbrev=2,dimen=2,cex=0.5)
II.
o3<-read.table("igpe_adquim_5g_spp.txt",header=T)
odf3<-data.frame(o3)
oad3<-lda(odf3$grupo~.,data=odf3,method="moment")
print(oad3)
pairs(oad3)
Ejemplo de análisis de correspondencia canónica.
o1<-read.table("igpedat_cca_sittotspp.txt",header=TRUE)
o2<-read.table("igpedat_cca_sitamb.txt",header=TRUE)
odfsitspp<-data.frame(o1)
odfsitamb<-data.frame(o2)
objcca<-cca(odfsitspp,odfsitamb,scannf=FALSE,nf=2)
plot(objcca)
II.8. Rudimentos de
programación
Para que un problema (proceso) se pueda programar, debe
cumplir con lo siguiente:
Lo general
Lo particular
Rudimentos de programación.
Las “runas” de la programación:
Dirección de
Flujo del
Estos símbolos muestran los
algoritmo procesos que ocurren en
prácticamente cualquier
Inicio o
Término algoritmo.
Disyuntiva
Es decir, para que un problema
Hacer un
sea traducido a un lenguaje de
proceso programación, debería ser
posible representarlo con
Salida o estos procesos.
Entrada
Conector
Ejemplo 1: Ejemplo 2:
Como algunas cosas en la vida, el aprendizaje es un proceso
dialéctico de triunfo-fracaso-triunfo-fracaso-fracaso-fracaso-
fracaso-fracaso-fracaso-fracaso-triunfo-fracaso-fracaso-
fracaso-fracaso-fracaso-fracaso, etc…
for ( j in 1:nuloc ) {
instrucciones diversas
}
Estructuras de control. El operador “while”
instrucciones diversas
}
Estructuras de control. El condicional if-else.
I. Versión simple:
IDEAS
ALGORITMOS
PROPÓSITOS
Es un triángulo interactivo.
4
z
2
para
1
0.5
0
0.0
graficación
-0.5
-1.0
-2
-1.0 -0.5 0.0 0.5 1.0
en “R”.
x
Principales sistemas de gráficos en R:
{graphics} o estándar
{lattice} o trellis
{ggplot2}
{scatterplot3d}
vcd
plotrix
gplots
grid
par(mfrow=c(2,2))
ó también:
par(mfcol=c(2,2))
II.9. Gráficas. Funciones (cont).
La instrucción completa:
par(mfrow=c(2,2))
makeframebyrow =c(2,2)
Argumento fig:
Vector numérico de la forma c(x1,x2,y1,y2) que da las
coordenadas (en formato NDC) de la figura dentro de
la región de visualización.
NDC (Normalized Device Coordinates): van desde cero (0) hasta uno (1).
Argumento mar:
Vector numérico de la forma c(abajo,izquierda,arriba,derecha)
que especifica el número de líneas de margen en cada lado de
la figura. Los valores automáticos son c(5,4,4,2).
{graphics} par
o<-read.table("HuracanesMexico_14marzo2011.txt",header=T)
print(names(o))
# "anio" "pacifico" "atlantico"
par(fig=c(0,1,0.5,1),mar=c(0,5,2,2),cex=1.5)
plot(o$anio,o$atlantico,type="l",xlab="",xaxt="n")
par(fig=c(0,1,0,0.5),mar=c(5,5,0,2),cex=1.5,new=T)
plot(o$anio,o$pacifico,type="l")
60 1 2 3 4 5 6 7
o$atlantico
o$pacifico
4
2
0
Argumento mat:
Las gráficas se colocarán dentro de un arreglo
rectangular. Cada gráfica se identificará con un número
entero consecutivo. Si alguna celda de la matriz no
llevará gráfica, se pondrá un cero (0) en esa celda.
{graphics} layout
layout(mat, widths =anchos, heights =largos)
{graphics} layout
El número de la gráfica se pone en cada celda:
1 4 6
¿Qué significa el 0 en
2 0 7 esa posición?
3 5 8
Para transformar este arreglo de gráficas en una matriz:
ngrafs<-c(1,2,3,4,0,5,6,7,8)
matriz<-matrix(ngrafs,3,3,byrow=T)
{graphics} layout
Para tener una vista preliminar del arreglo de gráficos:
layout.show(nf)
Una vez que la forma y dimensiones de la rejilla están como uno quiere, se
dibuja cada gráfica de manera individual:
#grafico 1
par(mar=c(4,4,4,4))
interaction.plot(o1$Genero,o1$LongPie,o1$Estatura)
#grafico 2
par(mar=c(5,5,5,5))
plot(o2$edad,o2$largo)
#grafico 3...etc.
{graphics} layout
Así se ve el arreglo del ejemplo anterior:
1.5 1.6 1.7 1.8 1.9
mean of o1$Estatura
o1$LongPie
3.0
0.3
o3$Grupo
o2$largo
0 2 4 6 8
0.29
2.0
0.27
0.265
1.0
0.26
0.25 5 10 15 20 50 60 70 80
f m
0.28
o2$edad o3$valor
o1$Genero 0.22
0.225
Histogram of o4$pacifico 0.23
0.235
0.24
5
0.245
0 2 4 6 8
Frequency
o5$grupo
4
0.255
3
2
1
0 2 4 6 0 10 20 30
o4$pacifico o5$CE
Histogram of o4$atlantico
mean of o7$consumo
fresca 4.0
660
20
Frequency
o8$tratam
3.0
masc
600
5 10
fem
2.0
540
1.0
rancia
0
o7$genero
0 2 4 6 340 360 380
{graphics} split.screen
Lo primero es saber que las dimensiones de toda la
zona de graficación se miden en unidades NDC
(Normalized Device Coordinates), que van desde cero
(0) hasta uno (1).
El cero corresponde a la zona (1,1)
inferior izquierda.
{graphics} split.screen
Como de costumbre, lo primero es diseñar el gráfico completo:
1) Cuántas gráficas;
2) De que dimensiones;
3) Ubicaciones en el espacio de graficación.
(0,0)
{graphics} split.screen
Por tanto, las dimensiones (y posiciones) de las gráficas se
pueden almacenar en una matriz.
Un arreglo de figuras 1 2 3 4
como este:
6
5 8
7
Tiene la siguiente
representación matricial:
{graphics} split.screen
Traducido a lenguaje R:
MatCoord<-c(0.10, 0.30, 0.7, 0.95,
0.35, 0.65, 0.7, 0.95,
0.75, 0.85, 0.6, 0.95,
0.88, 0.98, 0.6, 0.95,
0.10, 0.35, 0.10, 0.55,
0.40, 0.67, 0.15, 0.35,
0.40, 0.67, 0.40, 0.65,
0.80, 0.98, 0.10, 0.50)
MC<-matrix(MatCoord,8,4,byrow=T)
split.screen(MC)
{graphics} split.screen
Y luego se construyen la graficas de manera individual:
screen(1)
par(mar=c(1,1,1,1))
plot(o1$LongPie,o1$Estatura)
screen(2)
par(mar=c(1,1,1,1))
plot(o2$edad,o2$largo)
screen(3)
par(mar=c(1,1,1,1.5))
interaction.plot(o3$Grupo,o3$Subgrupo,o3$
valor,cex=0.5)
…etc
{graphics} split.screen
Queda algo como esto:
Histogram of log(o6$AreaKm2)
1.9
o3$Subgrupo
250
80
8
o2$largo
mean of o3$valor
1.7
Frequency
70
4
150
1.5
60
50
0.22 0.24 0.26 0.28 0.30 5 10 15 20
50
0
Histogram of o4$atlantico
o1$LongPie o2$edad
H L M 2 6
Frequency
15
o3$Grupo log(o6$AreaKm2)
5
380
0
0 1 2 3 4 5 6 7
0.5
370
Histogram of o4$pacifico
o4$atlantico
360
Frequency
8
0.3
350
4
0
0.1
340
0 1 2 3 4 5 6
0 2 4 6 8 10 12 o4$pacifico a b c d
o5$MO
{graphics} split.screen
Sistema de
graficación basado
en enrejados
(trellis):
{lattice}
Tipos de gráfica:
{lattice}
Tipos de gráfica:
{lattice}
Sintáxis genérica de una gráfica en lattice:
Variables Variables
primarias condicionantes
“Fórmula”
Símbolo de
del gráfico condicionamiento:
Tal que.
{lattice}
Nivel I: hacer gráficas a partir de una sola función (o
fórmula).
Argumentos “principales” de una gráfica diseñada en trellis:
{lattice}
Nivel I: hacer gráficas a partir de una sola función (o
fórmula).
Ejemplos:
g1<-xyplot(CE~pHH2O|factor(grupo),data=o,aspect=(1/1))
g0<-densityplot(~pHH2O,groups=grupo,data=o,ref=T,
auto.key=list(columns=2),xlab="Tremendee")
{lattice}
Nivel II: hacer gráficas combinando dos o más
fórmulas.
{lattice}
Nivel II: hacer gráficas combinando dos o más
fórmulas.
split=c(x,y,nx,ny)
{lattice}
Nivel II: hacer gráficas combinando dos o más
fórmulas.
{lattice}
Nivel II: hacer gráficas combinando dos o más
fórmulas.
"cm“: centímetros.
plot(g0,split=c(1,1,2,1),panel.width=list(4,"cm"),
panel.height=list(4,"cm"),more=T)
plot(g1,split=c(2,1,2,1),more=F)
{lattice}
Nivel II: hacer gráficas combinando dos o más
fórmulas.
{lattice}
Sistema de
graficación con el
paquete
{ggplot2}:
La Gramática
De las
Gráficas.
Hadley
Wickham
(sí, es quién inventó
este paquete;
nótese el parecido
de los pelos)
Este paquete está basado en la “Grammar of graphics”(1).
Como el nombre sugiere, existen un conjunto de elementos y
reglas de interacción entre ellos que tienen como finalidad
desarrollar gráficos complicados de manera fácil y rápida.
(1)
{ggplot2}
Todo empieza con la pregunta inicial:
data: datos
geoms: las entidades usadas para representación (puntos,
líneas, polígonos, etc.)
stats: transformaciones estadísticas útiles para la
visualización
scales: dimensiones de la gráfica apropiadas para
la visualización
coord: sistema de coordenadas de la gráfica
facet: agrupación de los datos en subconjuntos para
su visualización
{ggplot2}
geoms
datos (puntos)
(x,y)
sistema de Transformación
Escala estadística
coordenadas
facet
agrupación de
datos
Manejo básico de la función qplot (quick plot)
Principales argumentos:
Principales argumentos:
{ggplot2}
Manejo básico de la función qplot (quick plot)
Un súper argumento:
El argumento geom.
{ggplot2}
Manejo básico de la función qplot (quick plot)
El argumento geom.
geom=“point” gráficos de x vs y
“smooth” agrega una línea “suavizante”
“boxplot” gráfico de caja y bigotes
“ path” dibuja líneas que conectan puntos
“line” dibuja líneas que conectan puntos
{ggplot2}
Manejo básico de la función qplot (quick plot)
El argumento geom.
Ejemplo:
qp<-qplot(carat,price, data=dsmall,geom=c("point","smooth"))
El argumento de
geom es un vector
con uno o dos
componentes
{ggplot2}
Manejo básico de la función qplot (quick plot)
El argumento method.
qp<-qplot(carat,price, data=dsmall,geom=c("point","smooth"),span=0.5)
{ggplot2}
Manejo básico de la función qplot (quick plot)
El argumento method.
{ggplot2}
Manejo básico de la función qplot (quick plot)
El argumento method.
{ggplot2}
Manejo básico de la función qplot (quick plot)
El argumento method.
{ggplot2}
Manejo básico de la función qplot (quick plot)
El argumento method.
Ejemplos:
qp<-qplot(carat,price, data=dsmall,geom=c("point","smooth"),
method=“lm”,formula=y~poly(x,2) )
{ggplot2}
Manejo básico de la función qplot (quick plot)
qp<-qplot(carat, data=dsmall,facets=cut~color,
geom="histogram",binwidth=0.1, xlim=c(0,3))
{ggplot2}
Según lo propuesto por esta “gramática”, cualquier gráfico
está compuesto por los siguientes elementos:
4) Un sistema de coordenadas;
b) transformación estadística;
c) un objeto geométrico;
d) un ajuste de posición;
{ggplot2}
La función qplot() y sus argumentos agregan las
capas de la gráfica de una sola vez.
{ggplot2}
Ejemplo.
p<-ggplot(diamonds, aes(carat,price,colour=cut))
{ggplot2}
Ejemplo.
p<-ggplot(diamonds, aes(carat,price,colour=cut))
p<-p + layer(geom="point“)
{ggplot2}