Beruflich Dokumente
Kultur Dokumente
1.
Introducci
on
Rick Becker, John Chambers y Allan Wilks desarrollaron en los AT&T Bell Labo-
2.
Operaciones b
asicas
2.1.
C
omo obtener ayuda
2.2.
2.3.
Vectores y matrices
Si queremos, por ejemplo, que el objeto x contenga el vector (2, 1, 3.6, 5), debemos
usar el comando c (que alude a combinar) para hacer la siguiente asignacion:
x <- c(2,1,3.6,5).
Una sucesion regular de n
umeros se puede obtener de la siguiente forma:
x <- 1:10
x
1 2 3 4 5 6 7 8 9 10
Si queremos cambiar el incremento:
x <- seq(1,10,2)
3
x
1 3 5 7 9
En el comando seq el primer argumento indica el punto inicial de la sucesion, el segundo
el punto final, y el tercero el incremento.
Es muy facil generar con R sucesiones de n
umeros aleatorios. El programa utiliza
funciones de la forma rdistribucion(n,lista de argumentos) para generar n observaciones de una larga lista de distribuciones. Por ejemplo, si queremos obtener 1000
observaciones de una distribucion normal de media 3 y desviacion tpica 2 y guardarlas
en el vector x basta escribir
x <- rnorm(1000,mean=3,sd=2)
Para R, una matriz no es mas que un vector con un atributo adicional que contiene
el n
umero de filas y columnas. Por lo tanto una matriz se puede crear a partir de un
vector, a
nadiendo informacion sobre el n
umero de filas y columnas de la matriz. Por
ejemplo, el siguiente comando puede utilizarse para generar aleatoriamente 1000 datos
con distribucion normal estandar que, a su vez, forman una matriz x con dimension
10 100:
x <- matrix(rnorm(1000),nrow=10,ncol=100)
Este comando puede ser u
til si en un ejercicio de simulacion queremos simular 100 muestras aleatorias simples de tama
no 10 de una poblacion normal. Para entender mejor el
funcionamiento de matrix os sugiero los ejemplos siguientes: matrix(1,nrow=3,ncol=3)
y matrix(1:2,nrow=3,ncol=4).
Si creamos una matriz x y queremos extraer alguno de sus elementos, podemos usar
x[i,j], donde (i, j) son la fila y la columna del elemento. Para extraer la tercera fila de
la matriz y guardarla en el vector y se escribe y <- x[3,], es decir si no especificamos la
columna, R entiende que las queremos todas. Estos comandos admiten tambien valores
negativos de manera que si escribimos y <- x[,-1], entonces y es la matriz x donde
se ha eliminado la columna 1. Se pueden usar tambien condiciones logicas para extraer
los elementos de la matriz que nos convenga. Por ejemplo, y <- x[x>=11] genera un
vector y con todos los elementos de x mayores o iguales que 11. Otro comando u
til es
4
Operaci
on
Expresi
on de R
Producto matricial
A %* %B
A*B
Calcular la traspuesta de A
t(A)
Resolver el sistema Ax = b
solve(A,b)
Calcular la inversa de A
solve(A)
eigen(A)
sum(A)
colMeans(A)
Con el fin de comprender el criterio de R a la hora de operar con vectores y matrices, es aconsejable pedirle que haga algunas operaciones en las que las matrices no
tengan dimensiones compatibles. Por ejemplo, supongamos que x<-matrix(1:4,2,2).
Que responde el programa si hacemos x+1? Y si hacemos x*diag(x) y x + x[2,]?
Trata de encontrar una explicacion logica de los resultados.
2.4.
Listas
Las listas son conjuntos heterogeneos de objetos, a los que por alguna razon conviene tener juntos y darles un nombre. Las salidas de muchas funciones que llevan
a cabo procedimientos estadsticos son listas, ya que incluyen resultados numericos,
graficos, etc. Para crear una lista llamada resultados que contenga los objetos x1,
x2,... basta utilizar
resultados <- list(x1,x2,...)
3.
Ficheros de datos
3.1.
Para leer un fichero de texto fichero.txt en el que se encuentran los datos con
los que queremos trabajar se usa el comando
datos <- read.table(c:\\camino\\fichero.txt,header=T)
Este comando genera un fichero de datos (un objeto del tipo data frame) con el nombre
elegido. Cuidado con las barras del camino que han de ser dobles. El argumento header
se utiliza para indicar si la primera fila contiene (T) o no (F) los nombres de las variables.
Por ejemplo, distintas variables relacionadas con el nivel de vida y grado de desarrollo de 91 pases del mundo se encuentran en el fichero de texto paises.txt. Supongamos
que el fichero lo tenemos en la carpeta datos de c:. Entonces, para leer el fichero y
almacenarlo en un data frame que tambien llamamos paises, usamos
paises <- read.table(c:\\datos\\paises.txt,header=T)
Si ahora tecleamos names(paises) obtenemos
nat mort mortinf esph espm pnb grupo nombre
que son los nombres de las variables del fichero (correspondientes a la natalidad, mortalidad, mortalidad infantil, esperanza de vida de los hombres y de las mujeres, producto
nacional bruto per capita, grupo geoeconomico al que pertenece el pas y nombre del
pas). Con el comando fix(paises) se abre una hoja de calculo rudimentaria en la
que podemos a
nadir mas datos al fichero o modificar los ya existentes.
Si escribimos el nombre de una de las variables, por ejemplo nat, observaremos que
el programa no la reconoce. Ello se debe a que las variables se nombran anteponiendo
el nombre del fichero y el signo $, es decir, paises$nat. Sin embargo, se puede utilizar
attach(paises) para poder trabajar directamente con los nombres de las variables
del fichero.
6
Otro fichero de datos que vamos a utilizar en los ejemplos es el de los resultados
de todos los partidos de la liga espa
nola de f
utbol de primera division de la temporada
2003-04. Los resultados se encuentran en el fichero de texto liga03-04.txt. Podemos
crear el correspondiente fichero de R mediante:
liga <- read.table(liga03-04.txt,header=T).
El comando names(liga) da como resultado en este caso casa y fuera ya que el
fichero tiene dos variables correspondientes a los goles conseguidos por el equipo local
y el visitante.
3.2.
Supongamos que creamos una variable de datos x <- c(34,20,19) y otra que contiene nombres de pases paises <- c(Espa~
na,Italia,Alemania). Podemos
crear un fichero de datos que incluye ambas variables si utilizamos el comando
fichero <- data.frame(x,paises)
Observad que la letra ~
n da algunos problemas.
4.
C
omo guardar los resultados
Podemos guardar los objetos x1,x2,... en un fichero llamado fichero.RData medi-
ante:
fichero.Rdata <-save(x1,x2,...,file=fichero.RData)
El fichero se guarda en el directorio de trabajo. Para saber cual es el directorio de
trabajo hay que usar getwd(). Para cambiarlo setwd(camino del nuevo directorio).
Los objetos que guardamos en un fichero pueden ser tanto datos como resultados de
nuestros analisis. Para recuperar en otra sesion de R esta informacion basta utilizar
load(fichero.RData). La funcion save.image(file=fichero.RData) guarda
en fichero.RData todos los objetos que se encuentran en ese momento en la memoria
de trabajo de R.
7
5.
Tablas de frecuencias
Queremos obtener en este apartado la tabla de frecuencias de los goles conseguidos
74 104
83
50
25
15
tabla.esph
(38.1,41.8](41.8,45.6](45.6,49.4](49.4,53.2](53.2,57](57,60.8]
4
11
(60.8,64.6](64.6,68.4](68.4,72.2](72.2,75.9]
13
18
13
11
El intervalo que contiene mas pases es (64.6,68.4]. Como ejercicio, puedes repetir este
procedimiento dividiendo los datos en solo 5 variables en lugar de 10.
6.
Pictograma
La u
nica variable cualitativa del fichero paises es grupo. Para dibujar el corre-
spondiente pictograma, tenemos que etiquetar primero los diferentes valores que toma
la variable:
etiquetas <- c(E.Este,SudAm,E.Occ,O.Prox,Asia,Africa)
Despues calculamos las frecuencias y dibujamos el grafico con
pie(table(paises$grupo),labels=etiquetas)
El resultado aparece en la siguiente figura
E.Occ
SudAm
E.Este
O.Prox
Asia
Africa
7.
Gr
afico de barras
0.25
0.00
0.05
0.10
0.15
0.20
Frecuencias
Probabilidades
Se observa que los datos se ajustan muy bien al modelo de Poisson. La siguiente es la
secuencia de comandos de R que se ha utilizado para producir el grafico anterior:
probs <- dpois(0:9,2.67)
freqs <- table(liga$total)/380
matriz <- rbind(probs,freqs)
rownames(matriz)<-c(Frecuencias,Probabilidades)
barplot(matriz,beside=T,names.arg=c(0:9),legend.text=T)
La primera lnea se utiliza para calcular las probabilidades que asigna una distribucion
de Poisson de parametro = 2,67 a los valores k = 0, 1, . . . , 9. La segunda se utiliza
10
para calcular las frecuencias relativas, que queremos comparar con las probabilidades
teoricas. La tercera lnea se utiliza para pegar los dos vectores y formar una matriz con dos filas que contienen respectivamente las frecuencias y las probabilidades
calculadas previamente. El comando rownames permite asignar nombres a las filas de
matriz. Finalmente, el comando barplot se usa para representar el grafico de barras.
Cuando el primer argumento es una matriz representa dos barras para cada columna
de la matriz. Si el argumento beside toma el valor T sit
ua una barra al lado de la otra.
Si beside=F, sit
ua una sobre la otra. Los nombres para cada par de barras se asignan
mediante names.arg (en este caso, simplemente el n
umero de goles) y la leyenda se
genera mediante legend.text=T siempre que las filas de matriz tengan un nombre
asignado.
8.
Histograma
0.00008
0.00000
0.00004
Proporciones
0.00012
5000
10000
15000
20000
25000
30000
35000
PNB
9.
Diagrama de cajas
PNB por grupos
20000
30000
5000 10000
E.Este
Samer
E.Occ
O.Prox
Asia
Africa
10.
El comando summary(nombre de fichero) calcula el mnimo, primer cuartil, mediana, media, tercer cuartil y maximo de todas las variables de un fichero de datos. Por
ejemplo, si escribimos summary(paises), obtenemos
nat
mort
mortinf
Min. : 4.50
esph
Min. : 9.70
Min. : 2.20
1st Qu.:14.70
1st Qu.:55.40
Median :29.00
Median :63.40
Mean :29.46
Mean :10.73
Mean :61.38
3rd Qu.:42.55
3rd Qu.:68.50
Max. :52.20
Max. :25.00
Max. :181.60
Max. :75.90
espm
pnb
grupo
nombre
Min. :41.20
Min. : 80
Min. :1.000
Afghanistan: 1
1st Qu.:56.75
1st Qu.:3.000
Albania : 1
Median :67.60
Algeria : 1
Mean :66.03
Mean : 5741
Angola : 1
3rd Qu.:75.45
Argentina : 1
Max. :81.80
Max. :34064
Austria : 1
Mean : 55.28
Mean :3.978
Max. :6.000
Min. :38.10
calcular la desviacion tpica de, por ejemplo, el PNB per capita de los pases se utiliza sd(paises$pnb). Una alternativa mas robusta es la mediana de desviaciones
absolutas (meda). Si M = med{x1 , . . . , xn } es la mediana de los datos, entonces
meda = medi |{|xi M |}. Para calular la meda: mad(paises$pnb). Otra medida de
dispersion robusta es el rango intercuartlico, que se calcula mediante IQR(paises$pnb)
(el nombre de este comando se debe escribir con may
usculas).
11.
11.1.
Diagrama de dispersi
on y recta de mnimos cuadrados
Diagramas de dispersi
on
Para estudiar el tipo de relacion entre dos variables, lo mas conveniente es usar un
diagrama de dispersion. Por ejemplo, veamos cual es el que corresponde a las variables
pnb y esph. Para obtenerlo, basta teclear
plot(esph ~ pnb,data=paises,pch=16)
(se han omitido los argumentos main, xlab, ylab, cuyo uso ya se ha explicado anteriormente). El argumento pch=16 es el que se usa para que en el grafico aparezcan
puntos negros en lugar de otro smbolo. El resultado se ha representado en la figura
siguiente:
70
60
40
Esperanza de vida
50
5000
10000
15000
20000
PNB
14
25000
30000
35000
25
25
20
mort
30
40
50
mortinf
50
150
20
100
10
15
10
11.2.
20
nat
10
50
15
40
10
30
50
100
150
En el grafico de dispersion entre las variables espm y pnb se observa que la relacion
entre ambas no es lineal. La solucion para obtener una relacion lineal es transformar
alguna de ellas. La figura siguiente muestra el diagrama de dispersion entre esph y
log(pnb):
15
70
60
50
Esperanza de vida
40
10
1Q
Median
3Q
Max
25.4726
2.8387
8.973
4.27e-14 ***
log(pnb)
4.7804
0.3693
12.946
<2e-16 ***
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Residual standard error: 5.761 on 89 degrees of freedom
Multiple R-Squared: 0.6532, Adjusted R-squared: 0.6493
F-statistic: 167.6 on 1 and 89 DF, p-value: <2.2e-16
16
70
60
50
Esperanza de vida
40
10
Referencias
R Development Core Team (2004). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Viena, Austria. ISBN 3-90005107-0, URL http://www.R-project.org.
17