Sei sulla pagina 1di 15

BASES DE ESTADISTICA

1 de CC. Ambientales, curso 20092010

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

Una de las caractersticas indispensables de R es el uso de variables. En


la mayora de las computaciones que hacemos, en alg
un momento necesitamos guardar valores en memoria para usarlos mas tarde en otras expresiones. Para este efecto creamos variables. Las variables tienen un nombre
que nosotros elegimos. Por ejemplo, el comando
> x <- 5
crea la variable x con el valor 5. Los nombres de las variables no pueden
empezar por un dgito ni por un punto seguido de un dgito (pueden empezar por un punto seguido de una letra, pero no es conveniente hacerlo
pues estos nombres reflejan variables especiales del sistema). Sin embargo,
pueden contener tanto dgitos como puntos en el medio:
> esto.es.una.variable1 <- 45
> esto.es.una.2a variable <- 34
Ciertos nombres est
an reservados por R y no se pueden redefinir. Algunos
casos susceptibles de crear dolores de cabeza son los nombres con una sola
letra c, q, t, C, D, F, I y T, pero tambien diff, df y pt. Por supuesto,
los nombres de las funciones usuales sin, cos, etc. tampoco se pueden usar

para variables. El sistema es sensible al uso de may


usculas y min
usculas:
> una.variable <- 4
> una.Variable <- 10
> una.Variable
[1] 10
Las variables una.variable y una.Variable son diferentes.

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

calculamos la varianza de los pesos:

> peso.bar <- sum(peso)/length(peso)


4

> sum((peso - peso.bar)^2)/length(peso)


[1] 242.2344
Claro que, siendo R un programa dise
nado para la estadstica, ya existen
funciones para calcular estos valores:
> mean(peso)
[1] 69.625
> var(peso)
[1] 276.8393
Hay una diferencia entre el valor de la varianza que calculamos con la formula
P
usada en las clases, vx = n1 ni=1 (xi x
)2 , y el valor dado por la funcion
1 Pn
)2 .
var(). Esto se debe a que esta funcion calcula s2x = n1
i=1 (xi x
An
alogamente, la desviaci
on 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
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

Mean 3rd Qu.


69.62

84.75

Max.
90.00

Hay que tener en cuenta c


omo 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 fraci
on (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
El dato 43 es el 0 (o sea el mnimo), 56 es el 1/7 (la muestra tiene 8 elementos,
luego n 1 = 7) y 60 es el 2/7 = 0.2857. Para calcular el primer cuartil (que
es la fracci
on 1/4 de la muestra ordenada), R hace una interpolacion lineal
entre el n 1-til inmediatamente anterior y el inmediatamente posterior
a 1/4, o sea, como 1/4 = 0,25 (1/7) + 0,75 (2/7), el primer cuartil es
Q1 = 0,25 56 + 0,75 60 = 59. El tercer cuartil es calculado de forma
an
aloga.
(Siempre que se quiera obtener informacion sobre un comando, se puede
usar la funci
on help():
> help(sort)
que nos da como respuesta la discripcion completa del comando sort(); son
varias p
aginas 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 coeficiente de correlaci
on r entre x y y. Tambien se puede construir un diagrama 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
N de partidos
N de goles

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

Introduzca estos datos en variables apropiadas y calcule la media, varianza,


desviaci
on tpica y mediana para cada una de ellas. Calcule la covarianza y
el coeficiente de correlaci
on entre los partidos jugados y goles marcados.

1.4.

Leer y guardar datos

Para guardar toda la informacion que sale en pantalla se puede usar el


comando sink():
> sink("resultados_sesion_R.txt")
Este comando crea el fichero resultados sesion R.txt en el directorio
donde se est
a trabajando. R va escribiendo en este fichero todas las respuestas que salen en pantalla hasta que se de el comando
> sink()
Tambien se pueden guardar en un archivo todos los comandos dados hasta
cierto punto:
> savehistory("comandos_sesion_r.txt")
En este caso se guarda inmediatamente en el fichero comandos sesion R.txt
todos los comandos dados desde el principio de la sesion. Sera u
til utilizar
este comando inmediatamente antes de cerrar la sesion. Para terminar la
sesi
on se usa el comando q() o bien quit(). Se nos pregunta si queremos
guardar el workspace, o sea, el estado de la sesion: que variables (u otros
objetos) existen y en que estado estan. Si contestamos y (de yes), esta
informaci
on queda guardada en el directorio de trabajo, que no es necesariamente el directorio inicial (en MacOS el directorio inicial suele ser el
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 sesi
on desde este mismo directorio la informacion guardada se
recupera (esta informaci
on queda guardada en dos ficheros distintos: .RData
y .Rhistory). Esta opci
on es muy u
til cuando se tiene que cerrar el ordenador sin perder el trabajo efectuado. En MacOS y en Windows tambien se
puede guardar el workspace directamente desde los men
us.
1.4.1.

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

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.

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

en el grafico se usa el argumento pch=n donde n es un entero entre 1 y 26;


a cada n
umero corresponde un smbolo diferente, por ejemplo, con n=3 se
obtiene un +:
> plot(peso,altura, pch=3)
Se comprueba facilmente a que corresponden los otros n
umeros. Tambien
se puede usar la opci
on pch="c" donde c es un caracter cualquiera. En este
caso en lugar de un smbolo aparece el caracter c (pruebalo!). Para cambiar
el ttulo del gr
afico se usa la opcion main="...", por ejemplo
> plot(peso,altura, pch=3,
+ main="El peso y la altura de los alumnos de CC.AA.")
N
otese 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="...",
> 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.")
El orden de las opciones es irrelevante, simplemente deben venir despues
de los vectores de datos. El comando abline(a,b) a
nade al grafico la lnea
recta de ecuaci
on y = a + bx:
> abline(1.4, 0.005)
Para a
nadir lneas horizontales o verticales se usa el mismo comando, pero
con otro formato:
> 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")
crea el archivo mi grafico.jpeg, pero no con el gr
afico ya creado. Despues
de dado este comando tenemos que repetir los comandos que crearon el
gr
afico. Para terminar de escribir en el fichero mi grafico.jpeg tenemos
que decir a R que vuelva a la pantalla grafica con dev.off(). La secuencia
completa de comandos sera:
> 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()
Para guardar en otros formatos se puede usar pgn("mi grafico.png"),
pdf("mi grafico.pdf") o tiff("mi grafico.tiff"), entre otros.
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 n
umero
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 gr
aficos en archivo.
11

1.6.

Leer datos de un fichero

Para crear vectores o matrices de datos peque


nos se puede usar la funcion
de concatenaci
on c(), como ya hemos visto. Sin embargo, es com
un tener
muestras demasiado grandes para que este metodo sea factible. Para estos
casos disponemos de la funcion read.table(). Vamos a leer una tabla que
contiene datos de precios y otras caractersticas de casas que se encuentran
en un archivo llamado casas-datos. Pero antes de hacerlo vamos a ver en
que estado est
a nuestra sesion. El comando ls() nos da un listado de todos
los objectos que tenemos:
> ls()
[1] "altura"

"imc"

"peso"

"peso.bar"

[5] "una.variable" "una.Variable"


Se puede eliminar alg
un objeto que no nos interese com rm(...):
> 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 indispensable). 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:
Precio

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

La primera lnea tiene un elemento menos que las siguientes y contiene el


encabezamiento con los nombres de los datos. La primera columna contiene
los n
umeros de lnea (todos los datos estan separados por espacios). Vamos
a leer los datos:
> casas <- read.table("casas-datos")
Precio 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

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"

Aveces no es conveniente tener la primera columna con los n


umeros de lnea.
Si el archivo tiene la siguiente estructura:
Precio

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

se puede igualmente leer con el comando read.table pero como ahora la


primera lnea tiene el mismo n
umero de datos que las siguientes hay que
indicar a R que la primera lnea es el encabezamiento:
> casas <- read.table("casas-datos", header=TRUE)
13

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

que simplifica el uso de los nombres de las variables. Podemos adjuntar la


estructura de datos casas con el comando
> attach(casas)
y a partir de este comando disponemos de las variables Precio, Area, Habit,
Edad y Cal.cent:
> 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)
La variable Cal.cent (calefaccion central) no es numerica, por tanto R nos
indica los valores posibles: Levels: no si. Cuando ya no deseamos trabajar
m
as con la variable casas la desjuntamos. A partir de este comando ya
no vemos las variables Precio etc.:
> detach(casas)
> Precio
Error: object Precio not found
Ejercicio 3. Use el archivo de datos Productos.data (disponible en la
p
agina de la asignatura) para leer los datos referentes a precios de 10 tipos
de productos alimentarios en los a
nos 1987 y 1988 en una determinada zona
del Reino Unido (los precios estan en peniques). Haga un analisis completo
de estos datos an
alogo al hecho en los ejercicios 1 y 2.

15

Potrebbero piacerti anche