Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Introduccion al programa R
> plot(rnorm(1000))
Con este comando aparecera un grafico con mil muestras de una variable
aleatoria con distribucion normal. El comando rnorm(1000) crea la muestra
(r andom normal, o sea, normal aleatoria), mientras que el comando plot()
crea el grafico en la ventana propia (mas tarde veremos como guardar grafi-
cos en archivos).
> 2+2
[1] 4
> log(1+sin(pi/4))
[1] 0.5348
> rnorm(8)
[1] -0.99518798 -0.04388549 -2.15850920 1.81517190 0.78130990
[6] 0.56416476 0.45131008 0.14524045
Despues de cada uno de los comandos que damos, R nos presenta la respues-
ta. En el caso de plot() no hay respuesta en la ventana de comandos. En los
1
ultimos 3 comandos obtenemos una respuesta numerica. Los dos primeros
son numeros reales, el [1] inicial indica que es un vector con una compo-
nente (o sea, un numero). El ultimo nos da un vector de 8 componentes. En
la primera lnea de la respuesta, el [1] indica que el primer numero de esa
lnea es la componente 1 del vector; en la segunda lnea, el [6] indica que el
primer numero es la componente 6 del vector (las dos ultimas componentes
no caben en la primera lnea, por esa razon R las desplaza a la segunda;
esto puede ser diferente dependiendo del tamano de la ventana de R que se
tenga).
1.2. Variables
> x <- 5
2
para variables. El sistema es sensible al uso de mayusculas y minusculas:
1.3. Vectores
La mayora de los objetos con los que trabajaremos en R son vectores, los
numeros son interpretados como vectores de una componente, como hemos
visto. Una forma sencilla de construir un vector es con el operador de con-
catenacion c(...):
> peso <- c(60, 72, 84, 65, 43, 87, 90, 56)
> peso
[1] 60 72 84 65 43 87 90 56
> length(peso)
[1] 8
> peso[4]
[1] 65
3
dado por el cociente entre el peso (en Kg) y el cuadrado de la altura (en m):
> altura <- c(1.59, 1.75, 1.85, 1.60, 1.57, 1.90, 1.83, 1.73)
> imc <- peso/altura^2
> imc
[1] 23.73324 23.51020 24.54346 25.39062 17.44493 24.09972
[7] 26.87450 18.71095
> altura + 4
[1] 5.59 5.75 5.85 5.60 5.57 5.90 5.83 5.73
> peso * 3
[1] 180 216 252 195 129 261 270 168
> sum(peso)
[1] 557
> sum(peso)/length(peso)
[1] 69.625
1 Pn 2
Usando la formula vx = n i=1 (xi x) calculamos la varianza de los pesos:
4
> sum((peso - peso.bar)^2)/length(peso)
[1] 242.2344
> mean(peso)
[1] 69.625
> var(peso)
[1] 276.8393
Hay una diferencia entre el valor de la varianza que calculamos con la formula
usada en las clases, vx = n1 ni=1 (xi x)2 , y el valor dado por la funcion
P
1 Pn
var(). Esto se debe a que esta funcion calcula s2x = n1 2
i=1 (xi x) .
Analogamente, la desviacion tpica (standard deviation en ingles) se calcula
con sd(), pero esto nos da la version
v
u n
p u 1 X
s = s2x = t (xi x)2 ,
n1
i=1
> sd(peso)
[1] 16.63849
> sqrt(var(peso))
[1] 16.63849
5
> summary(peso)
Min. 1st Qu. Median Mean 3rd Qu. Max.
43.00 59.00 68.50 69.62 84.75 90.00
Hay que tener en cuenta como calcula R los cuartiles, que no es igual a como
lo hicimos en clase. Si la muestra ordenada tiene n datos, x1 , x2 , . . . , xn ,
entonces el primer dato, x1 , es el 0 (n 1)-til , x2 es el 1 (n 1)-til , etc.
xi es el (i 1) (n 1)-til , xn es el (n 1) (n 1)-til . Dicho de otra
forma, xi es la fracion (i 1)/(n 1) de la distribuicion. Veamos en el caso
de los pesos como se ordena la muestra:
> sort(peso)
[1] 43 56 60 65 72 84 87 90
> help(sort)
que nos da como respuesta la discripcion completa del comando sort(); son
varias paginas de informacion por las que se puede navegar con las teclas
u (up) o d (down); para salir de la ayuda se usa la tecla q (quit)).
Los comandos cov(x,y) y cor(x,y) calculan la covarianza y el coe-
ficiente de correlacion r entre x y y. Tambien se puede construir un di-
agrama de tallos y hojas con el comando stem() (Pruebe por ejemplo
stem(altura)!)
6
Ejercicio 1. Los datos de la siguiente tabla representan los goles de David
Villa en la liga y en la copa desde la temporada 2000-01:
Temporada 00 01 02 03 04 05 06 07 08
N de partidos 36 44 40 46 46 40 49 41 40
N de goles 13 20 20 20 20 28 21 22 31
> sink("resultados_sesion_R.txt")
> sink()
> savehistory("comandos_sesion_r.txt")
7
directorio raiz del usuario y en Windows el directorio Mis Documentos; en
Linux es el directorio desde donde se ha inciado la sesion). Cuando se inicia
una nueva sesion desde este mismo directorio la informacion guardada se
recupera (esta informacion queda guardada en dos ficheros distintos: .RData
y .Rhistory). Esta opcion es muy util cuando se tiene que cerrar el orde-
nador sin perder el trabajo efectuado. En MacOS y en Windows tambien se
puede guardar el workspace directamente desde los menus.
> getwd()
[1] "C:/Documents and Settings/Usuario"
> setwd("..")
> getwd()
[1] "C:/Documents and Settings/Usuario"
8
de los ficheros en el actual directorio de trabajo. Por ejemplo, en mi sesion
obtengo el siguiente resultado:
> dir()
[1] "R-practicas.aux" "R-practicas.dvi" "R-practicas.log"
[4] "R-practicas.tex"
1.5. Graficos
> hist(peso)
> boxplot(altura)
> x <- c(1, 7, 7.5, 8, 8.5, 9, 9.5, 10, 10.5, 11, 24, 25)
> boxplot(x)
Para crear un diagrama de dispersion entre los datos que tenemos de peso
y altura damos el comando
> plot(peso,altura)
El grafico que estaba antes desaparece y aparece uno nuevo con los datos
(peso, altura) marcados por crculos. Se pueden controlar todos los aspectos
del grafico: ejes, leyendas, etc. Vamos simplemente a indicar como cambiar
algunos detalles. Para cambiar la forma de como se presentan los puntos
9
en el grafico se usa el argumento pch=n donde n es un entero entre 1 y 26;
a cada numero corresponde un smbolo diferente, por ejemplo, con n=3 se
obtiene un +:
Notese que cuando cambiamos de lnea sin que el comando este terminado, R
espera que introduzcamos el resto del comando en la lnea siguiente (delante
del smbolo +). Finalmente, se puede cambiar la leyenda que aparece en
los ejes con xlab="..." y ylab="...",
> abline(v=80)
> abline(h=mean(altura))
10
Cuando estamos satisfechos con el resultado del grafico podemos guardalo
en un fichero. La forma de hacerlo es decir a R que en vez de enviar los
comandos que generan el grafico a la pantalla, los enve a un fichero. El
comando que se usa depende de que tipo de fichero queremos crear. El
comando
> jpeg("mi_grafico.jpeg")
> jpeg("mi_grafico.jpeg")
> plot(peso,altura, pch=3, xlab="Peso (en Kg)",
+ ylab="Altura (en m)",
+ main="El peso y la altura de los alumnos de CC.AA.")
> abline(1.4, 0.005)
> abline(v=80)
> abline(h=mean(altura))
> dev.off()
Ejercicio 2. Con los datos del Ejercicio 1 relativos a los goles de David Villa,
construya diagramas de barras y de caja y bigotes para los goles marcados y
partidos jugados. Calcule la covarianza y el coeficiente de correlacion entre
estos dos datos. Haga un grafico de dispersion entre los goles y el numero
de partidos jugados, marcando con una lnea vertical y otra horizontal las
medias. Marque tambien la recta de regresion lineal entre los datos. Guarde
todos los graficos en archivo.
11
1.6. Leer datos de un fichero
> ls()
[1] "altura" "imc" "peso" "peso.bar"
[5] "una.variable" "una.Variable"
> rm(una.variable)
> ls()
[1] "altura" "imc" "peso" "peso.bar"
[5] "una.Variable"
Volvamos a nuestro archivo de datos. Este debe estar escrito como un archivo
de texto normal (usualmente con la extension .txt, aunque esto no sea indis-
pensable). No debe ser un archivo creado por procesadores de texto como
OpenOffice o Word, si se usan estos programas hay que guardar el archivo
en formato de texto. Se puede usar Emacs, Vim, etc. en Linux, Notepad en
Windows o TextEdit en MacOS. El archivo casas-datos tiene la siguiente
estructura:
12
04 57.50 690 6 8.8 no
05 59.75 900 5 1.9 si
13
Si el archivo solo tiene datos (sin encabezamiento), por supuesto no se usa
esta opcion.
La variable casas es una estructura de datos (en R una data frame),
que es una lista de datos. El comando read.table("casas-datos") sabe
leer el archivo y convertir el texto en la estructura de datos, que nosotros
asignamos a la variable casas. Esta variable (que es una lista) se puede ma-
nipular de varias formas. Cada dato esta almacenado en una subvariable con
el nombre que tenemos en el archivo. Por ejemplo, para acceder a la primera
columna (de precios) despues del nombre de la variable principal, casas,
ponemos el smbolo $ y el nombre de la subvariable, Precio (atencion a las
mayusculas!):
> casas$Precio
[1] 52.00 54.75 57.50 57.50 59.75
> casas$Area
[1] 830 710 1000 690 900
Estos representan vectores normales, los cuales podemos manipular con las
funciones que ya conocemos:
> mean(casas$Precio)
[1] 56.3
> plot(casas$Precio,casas$Area)
Siendo casas una lista, estos vectores tambien se pueden acceder por ndice
de orden:
> casas[[1]]
[1] 52.00 54.75 57.50 57.50 59.75
Notese que tenemos que usar dos [[. . . ]], y no uno como para los vectores.
Cuando los datos provienen de un archivo sin encabezamiento es util usar
esta forma de acceder a los datos. Hay otra forma de acceder a los datos
14
que simplifica el uso de los nombres de las variables. Podemos adjuntar la
estructura de datos casas con el comando
> attach(casas)
> Precio
[1] 52.00 54.75 57.50 57.50 59.75
> Cal.cent
[1] no no no no si
Levels: no si
> plot(Precio,Area)
> detach(casas)
> Precio
Error: object Precio not found
15