Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DE LAS PRACTICAS
GUION
CON R
1.
Introducci
on al programa R
El programa R funciona con una ventana donde se escriben los comandos
m
as una ventana donde aparecen los graficos que se van creando. Podemos
empezar por dar un comando que haga aparecer la ventana de los graficos:
> plot(rnorm(1000))
Con este comando aparecera un grafico con mil muestras de una variable
aleatoria con distribuci
on normal. El comando rnorm(1000) crea la muestra
(r andom normal, o sea, normal aleatoria), mientras que el comando plot()
crea el gr
afico en la ventana propia (mas tarde veremos como guardar graficos en archivos).
1.1.
Una calculadora
El programa R puede funcionar simplemente como una potente calculadora. Dispone de todas las funciones matematicas usuales:
> 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 respuesta. En el caso de plot() no hay respuesta en la ventana de comandos. En los
1
u
ltimos 3 comandos obtenemos una respuesta numerica. Los dos primeros
son n
umeros reales, el [1] inicial indica que es un vector con una componente (o sea, un n
umero). El u
ltimo nos da un vector de 8 componentes. En
la primera lnea de la respuesta, el [1] indica que el primer n
umero de esa
lnea es la componente 1 del vector; en la segunda lnea, el [6] indica que el
primer n
umero es la componente 6 del vector (las dos u
ltimas componentes
no caben en la primera lnea, por esa razon R las desplaza a la segunda;
esto puede ser diferente dependiendo del tama
no de la ventana de R que se
tenga).
1.2.
Variables
1.3.
Vectores
La mayora de los objetos con los que trabajaremos en R son vectores, los
n
umeros son interpretados como vectores de una componente, como hemos
visto. Una forma sencilla de construir un vector es con el operador de concatenaci
on c(...):
> peso <- c(60, 72, 84, 65, 43, 87, 90, 56)
> peso
[1] 60 72 84 65 43 87 90 56
Estos n
umeros son un ejemplo, pero podran representar el peso de un conjunto de personas. Veremos un poco mas adelante como obtener datos de
un fichero. El comando length() nos da la longitud de un vector:
> length(peso)
[1] 8
Los elementos de los vectores tambien se pueden acceder individualmente
con el ndice de orden:
> peso[4]
[1] 65
Se pueden hacer c
alculos con vectores de la misma longitud. Imagnense que
disponemos tambien de los datos de las alturas de las mismas personas y
que queremos calcular el ndice de masa corporal (imc) para cada persona,
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
Se deben notar dos detalles. El primero es que en el vector de alturas, las
partes decimales est
an separadas de la parte entera por un punto . y no
por una coma ,. El otro es que la division de dos vectores se efect
ua componente a componente (siempre que los vectores tengan la misma longitud),
o sea, la primera componente de imc es 60/1,592 . Cuando se efect
ua una
operaci
on entre un n
umero (un vector de longitud 1) y otro vector, el resultado es un vector en el cual cada componente es el resultado de la operacion
entre dicho n
umero y cada componente del vector original, por ejemplo:
> 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
La funci
on sum() da la suma de todos los elementos de un vector:
> sum(peso)
[1] 557
Podemos calcular la media de una muestra de esta forma
> sum(peso)/length(peso)
[1] 69.625
Usando la f
ormula vx =
1
n
Pn
)
i=1 (xi x
> sd(peso)
[1] 16.63849
> sqrt(var(peso))
[1] 16.63849
Si queremos calcular nuestra version de la desviacion tpica, podemos escribir
> sqrt( var(peso) * (length(peso)-1)/length(peso))
[1] 15.56388
> sqrt(sum((peso-peso.bar)^2)/length(peso))
[1] 15.56388
La function summary() nos da un resumen de la distribuicion de los datos
de peso
5
> summary(peso)
Min. 1st Qu.
43.00
59.00
Median
68.50
84.75
Max.
90.00
00
36
13
01
44
20
02
40
20
03
46
20
04
46
20
05
40
28
06
49
21
07
41
22
08
40
31
1.4.
Directorio de trabajo
No suele ser conveniente trabajar en el directorio base del usuario. Podemos cambiar el directorio de trabajo desde la lnea de comandos de R. El
comando getwd() nos dice cual es el actual directorio de trabajo (del ingles
get working directory). Por ejemplo, en una sesion en Windows, sin haber
cambiado de directorio de trabajo, se podra obtener lo siguiente:
> getwd()
[1] "C:/Documents and Settings/Usuario"
Si tenemos un directorio dentro de Usuario llamado trabajo R podemos
cambiar el directorio de trabajo a este de la siguiente forma:
> setwd("trabajo R")
> getwd()
[1] "C:/Documents and Settings/Usuario/trabajo R"
Si queremos volver al directorio que se encuentra en el nivel inmediatamente
superior al actual podemos hacer setwd(".."):
> setwd("..")
> getwd()
[1] "C:/Documents and Settings/Usuario"
Es importante notar que el separador de subdirectorio es / y no \, aun
trabajando en Windows. Otro comando u
til es dir(), que nos da un listado
8
1.5.
Gr
aficos
Vimos ya como crear un grafico con el comando plot(). Podemos igualmente crear histogramas (diagramas de barras) y diagramas de caja y bigotes:
> hist(peso)
> boxplot(altura)
En el diagrama de caja y bigotes, los bigotes (las lneas horizontales conectadas a la caja por un trazo discontinuo) no marcan el maximo y el mnimo
de la muestra sino el mayor y menor de los datos que quedan a una distancia de la mediana menor o igual que 1.5 veces el tama
no de la caja (que
es Q3 Q1). Si hay datos fuera de estos valores se consideran atpicos y se
se
nalan con un crculo. Para ver este efecto pruebe lo siguiente:
> 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 gr
afico que estaba antes desaparece y aparece uno nuevo con los datos
(peso, altura) marcados por crculos. Se pueden controlar todos los aspectos
del gr
afico: ejes, leyendas, etc. Vamos simplemente a indicar como cambiar
algunos detalles. Para cambiar la forma de como se presentan los puntos
9
10
1.6.
"imc"
"peso"
"peso.bar"
"imc"
"peso"
"peso.bar"
[5] "una.Variable"
Area
Habit
Edad
Cal.cent
01
52.00
830
6.2
no
02
54.75
710
7.5
no
03
57.50
1000
4.2
no
12
04
57.50
690
8.8
no
05
59.75
900
1.9
si
52.00
830
6.2
no
02
54.75
710
7.5
no
03
57.50 1000
4.2
no
04
57.50
690
8.8
no
05
59.75
900
1.9
si
> ls()
[1] "altura"
"casas"
"imc"
[5] "peso.bar"
"una.Variable"
"peso"
Area
Habit
Edad
Cal.cent
52.00
830
6.2
no
54.75
710
7.5
no
57.50
1000
4.2
no
57.50
690
8.8
no
59.75
900
1.9
si
Si el archivo s
olo tiene datos (sin encabezamiento), por supuesto no se usa
esta opci
on.
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 manipular 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
may
usculas!):
> 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
N
otese que tenemos que usar dos [[. . . ]], y no uno como para los vectores.
Cuando los datos provienen de un archivo sin encabezamiento es u
til usar
esta forma de acceder a los datos. Hay otra forma de acceder a los datos
14
15