Probabilidad

Anuncio
Probabilidad
Algunos Comandos Básicos en R
Profs. Diego Ruiz y Albert Satorra
Septiembre 2009
R es un conjunto integrado de programas para manipulacón de datos, cálculo y gráficos.
Información detallada sobre el R, manuales, descargas y documentación se pueden encontrar
en la página del proyecto R, www.r-project.org.
Encontraréis en la página de la asignatura, además de este fichero, un manual introductorio
a R en pdf (hay una versión en inglés y otra en castellano).
Descarga
Para descargar el fichero de instalación de R podeis ir al apartado Download, Packages y
seleccionar el vı́nculo CRAN. Una vez ahı́ elegı́s el servidor que prefiráis para vuestra descarga,
por ejemplo el del Reino Unido (http://cran.uk.r-project.org). Seleccionais vuestro sistema operativo, por ejemplo Windows, en la siguiente página la opción base y, finalmente, descargais el
ejecutable Download R 2.9.2 for Windows.
Podeis también utilizar alguno de los siguientes vı́nculos:
http://www.stats.bris.ac.uk/R/
http://cran.es.r-project.org
Instalación
Una vez descargado en vuestro ordenador, simplemente ejecutar el fichero de instalación y
seguir las instrucciones que se os dan. Una vez instalado, podreis encontrar el ejecutable en
vuestros ordenadores en el menu de Inicio.
1
Dado que R es un lenguaje basado en la lı́nea de comando, todas las órdenes se introducen
directamente en la consola. Al ejecutar R se abrirá una ventana como la anterior.
Comandos básicos
Un buen punto de partida es utilizar R como una calculadora de bolsillo, por ejemplo introduciendo:
> 2+3
el programa devuelve
[1] 5
Otros comandos admisibles son:
>2-3
>2*3
>2/3
>2^3
>sqrt(3)
El comando log(3) devuelve el logaritmo neperiano, es decir base e, del número 3. Mientras que
log10(3) devuelve el logaritmo base 10.
Para almacenar resultados o valores en una variable utilizamos
>Variable=2*3,
donde Variable puede ser cualquier letra o palabra, y posteriormente podremos operar con ella
como si se tratara de un número, es decir
>Variable*6
[1] 36
También podemos actualizar el valor de una variable:
>Variable=Variable*6
>Variable
[1] 36
El comando ls() presenta la lista de las variables en memoria.
Vectores
Los vectores son arreglos unidimensionales de datos. Para crear un vector en R utilizaremos
el comando c(), por ejemplo
>Vector=c(1, 2, 5 ,7 ,9)
para recuperar el valor de una celda o varias celdas del vector introduciremos su(s) dirección(es),
por ejemplo
2
>Vector[3]
[1] 5
devuelve el valor en la tercera posición de Vector. Otros ejemplos son:
>Vector[1:3]
[1] 1 2 5
>Vector[c(1,3,5)]
[1] 1 5 9
También se pueden generar secuencias se números con los comandos “:” y seq(i,f,inc) donde
( i:valor inicial, f:valor final, inc: incremento), por ejemplo
>X=0:9
>X
[1] 0 1 2 3 4 5 6 7 8 9
es equivalente a
>X=seq(0,9,1)
>X
[1] 0 1 2 3 4 5 6 7 8 9
Alternativamente, se puede utilizar la opción seq(i,f,length=n), donde length=n se refiere al
número de datos que R debe colocar en el vector incluidos i y f:
>X=seq(0,9,length=10)
>X
[1] 0 1 2 3 4 5 6 7 8 9
Para crear un vector de n posiciones con el mismo valor en cada una de ellas utilizamos el comando
rep(v,n), donde v representa el valor(es) a replicar y n el numero de elementos del vector.
>X=rep(0,length=4)
>X
[1] 0 0 0 0
>X=rep(1:3,length=4)
>X
[1] 1 2 3 1
Representación Gráfica de Funciones
La idea es exactamente la misma que si lo hicieramos a mano: para representar f (x) seleccionamos algunos valores del eje x para ser representados, calculámos sus valores en f (x), los
representamos uno a uno en el plano x, y y finalmente los unimos con una lı́nea. En R harı́amos
lo mismo:
>X=seq(-10,10,length=100)
>Y=X^2
>plot(X,Y)
>lines(X,Y)
3
La apariencia del gráfico no es del todo buena. Esto se puede resolver indicando, desde un
primer momento, que lo que queremos es una lı́nea y no puntos:
>X=seq(-10,10,length=100)
>Y=X^2
>plot(X,Y,’l’)
Notad que cuanto mayor sea el número de observaciones en el intervalo de X, más suave será la
lı́nea.
>plot(X,Y)
>lines(X,Y)
>plot(X,Y,’l’)
Extracción de Muestras
Para extraer muestras aleatorias de un conjunto cualquiera utilizamos el comando
sample(x, size, replace = FALSE, prob = NULL)
donde x es el espacio muestral (por ejemplo las seis caras de un dado); size es el numero de
extracciones o experimentos (por ejemplo tirar un dado dos veces); replace=FALSE indica si se
admite reemplazamiento o no, es decir, si el espacio muestral es el mismo en cada experimento
o si cambia (por ejemplo, si extraemos tres bolas de una urna que contiene bolas rojas, azules
y verdes, sin devolverlas antes de la siguiente extraccion, estamos realizando un experimento sin
reemplazamiento, por otro lado, si extraemos tres bolas y las devolvemos antes de la siguiente
extraccion entonces estamos realizando un experimento con reemplazamiento), el valor por defecto
es replace=FALSE y no es necesario escribirlo, sin embargo si queremos que las extracciones se
realicen con reemplazamiento, entonces habra que escribir replace=TURE.
Finalmente, si las probabilidades son diferentes para cada elemento del espacio muestral podemos
incluir un vector de probabilidades (es un comando que se puede omitir y por ahora no es necesario
discutirlo en detalle).
>X=c(1,2,3,4,5,6)
>sample(X,2,replace=TRUE)
[1] 4 2
#Crea un dado "equlibrado"
#Simula dos lanzamientos del dado
4
>X=c(’r’,’r’,’b’,’b’,’b’,’g’)
>sample(X,3)
[1] "r" "b" "g"
>sample(X,3,replace=TRUE)
[1] "r" "g" "g"
#Crea una urna con seis bolas de tres colores
#Simula la extraccion de tres bolas, sin reemplazamiento
#Simula la extraccion de tres bolas, con reemplazamiento
Nota Debeis recordar que las extracciones son aleatorias y, por lo tanto, al ejecutar los comandos
anteriores es normal no obtener los mismos resultados que en el ejemplo.
Nota El simbolo # comienza un comentario (no ejecutable) en R. No es necesario que copieis
esa parte al escribir el codigo en R.
Ejemplo 1. Repetir 100 veces el experimento de tirar cuatro de dados (o tirar cuatro veces el
mismo dado) y contar el numero de ocasiones en las que se obtiene un 6.
>X=c(1,2,3,4,5,6)
>Rep=rep(0,100)
>Exitos=0
>for(i in 1:100)
> {M=sample(X,4,replace=TRUE)
> for(j in 1:4)
>
>
{if(M[j]==6) Rep[i]=Rep[i]+1}
>
> if(Rep[i]>=1) Exitos=Exitos+1}
>
#Crea el "dado"
#Vector que almacena el resultado de cada experimento
#Cuenta el numero de exitos (casos con uno o mas seises)
#Inicia el bucle, cada iteracion es un experimento
#Genera las cuatro tiradas del dado en cada experimento
#Inicia un nuevo bucle para contar los exitos del
#experimento i-esimo
#Si el elemento j-esimo en M es igual a 6, incrementa
#el valor de la i-esima celda de Rep en una unidad
#Si se encuentra al menos un 6 en el experimento,
#el contador Suma se incrementa en una unidad.
Una ejecución del código anterior podria dar un resultado como el que se muestra a continuación.
En Rep encontramos el numero de apariciones del número 6 en cada experimento. Exitos nos
da el numero de experimentos exitosos, es decir, aquellos en obtuvimos por lo menos un 6.
> Rep
[1] 2 1 0 1 1 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 2 0 1 1 1 0 1
[38] 1 0 2 1 1 0 2 0 1 0 2 0 1 2 0 1 1 1 1 3 0 0 1 1 1 0 0 1 1 2 0 1 1 0 0 0 0
[75] 0 0 0 0 2 0 0 0 0 0 0 0 1 2 0 1 1 1 0 0 0 0 2 1 0 0
>Exitos
[1] 81
Análisis de Datos
Suponiendo que X es un vector de datos muestrales, algunos comandos útiles para el análisis
de datos son:
>mean(X)
>var(X)
>sd(X)
>quantile(X,a)
#Para la
#Para la
#Para la
#Cuantil
media
varianza
desviacion tipica
"a" (en decimales), por ejemplo a=0.5 es la mediana de X
5
Para construir un histograma utilizamos el comando
>hist(X,n,freq=FALSE)
donde n es el numero de categorias (columnas) en el histograma y freq=False indica que se trata
de un histograma de frecuencias relativas (podemos omitirlo, FALSE es el valor por defecto); si
freq=TRUE tendremos un histograma de frecuencias absolutas.
Distribuciones de Probabilidad
En R el nombre de los diferentes comandos para manipular distribuciones se divide en dos
partes: la primera letra indica si el tipo de función estamos utilizando y la segunda indica la
distribución de que se trata. Las opciones disponibles son:
a. Función de densidad (o probabilidad), d
b. Función de distribución (acumulativa), p
c. Quantil (o inversa), q
d. Generador de números aleatorios, r
Entre las distribuciones más frecuentes encontraremos: normal (norm), exponencial (exp), geométrica (geom), poisson (pois), uniforme (unif) y gamma (gamma). Ası́, rexp(1) nos devolverá
un número aleatorio extraı́do de una distribución exponencial con parámetro λ = 1. Todos
los comandos de esta familia tienen una serie de opciones que serán introducidas dentro del
paréntesis.
La ayuda de R indica los valores posibles para los argumentos de cada familia de funciones,
por ejemplo el comando help(dexp) devuelve la ayuda para la distribuciń exponencial, con su
descripción, alternativas de uso y argumentos (pulsando la letra q salimos de la ventana de
ayuda).
Por ejemplo, sea X una variable aleatoria que se distribuye exponencialmente con parámetro
λ = 6, entonces
>X=rexp(1000,6)
genera un vector de 1000 observaciones aleatorias de X. Las siguientes opciones nos darán
diferentes representaciones del histograma de X.
>hist(X)
>hist(X,25)
>hist(X,25,freq=FALSE)
Para los estadı́sticos muestrales (media, varianza y desviación tı́pica) tenemos, respectivamente,
>mean(X)
>var(X)
>sd(X)
Para obtener el valor q tal que P (X ≤ q) = p utilizamos la opción q para la familia de distribuciones que nos interesa. Ası́, en el caso de la exponencial tenemos
6
>qexp(0.99,1/6)
[1] 27.63102
la probabilidad acumulada en ese punto es precisamente
>pexp(27.63102,1/6)
[1] 0.99
Podemos graficar simultáneamente el histograma de los datos empı́ricos (aleatorios) con la densidad teórica de la distribución que nos interese haciendo:
>Xt=seq(0,40,length=1000)
>Y=dexp(Xt,1/6)
>hist(X,25,freq=FALSE)
>lines(Xt,Y)
El percentil o cuantil del 99% es una buena aproximación para el lı́mite superior del intervalo del
eje de las x.
7
Descargar