2014-i probabilidad i - introducción a r

Upload: jose-parra

Post on 16-Oct-2015

10 views

Category:

Documents


0 download

TRANSCRIPT

  • Probabilidad y Estadstica con R

    1. Introduccion a R

    La idea de este texto es que, dado que R ofrece una gran variedad de posibilidades, introduciralgunos conceptos y nociones del software.

    R es un sistema para analisis estadsticos y graficos creado por Ross Ihaka y Robert Gentleman.Se dice que la naturaleza de R es doble: la de programa y la de lenguaje de programacion; y esconsiderado como un dialecto del lenguaje S creado por los Laboratorios AT&T Bell.

    R se distribuye gratuitamente bajo los terminos de la GNU (General Public Licence); su desar-rollo y distribucion son llevados a cabo por varios estadsticos conocidos como el Grupo Nuclear deDesarrollo de R.

    Los archivos necesarios para instalar R se distribuyen desde el sitio de internet ComprehensiveR Archive Network (CRAN) junto con las instrucciones de instalacion.

    Al principio, R puede parecer demasiado complejo para el no-especialista. Esto no es cierto nece-sariamente, de hecho, una de las caractersticas mas sobresalientes de R es su enorme flexibilidad.Mientras que programas mas clasicos muestran directamente los resultados de un analisis, R guardaestos resultados como un objeto, de tal manera que se puede hacer un analisis sin necesidad demostrar su resultado inmediatamente.

    R es un lenguaje Orientado a Objetos: bajo este complejo termino se esconde la simplicidady flexibilidad de R. El hecho que R es un lenguaje de programacion puede desaminar a muchosusuarios que piensan que no tienen alma de programadores. Esto no es necesariamente cierto pordos razones. Primero R es un lenguaje interpretado (como Java) y no compilado (como C, C++,Fortran, Pascal, . . . ), lo cual significa que los comandos escritos en el teclado son ejecutadosdirectamente sin necesidad de construir ejecutables. Como segunda medida, la sintaxis de R es muysimple e intuitiva. Por ejemplo, una regresion lineal se puede ejecutar con el comando lm(y,x).Para que una funcion sea ejecutada en R debe estar siempre acompanada de parentesis, inclusiveen el caso que no haya nada dentro de los mismos (por ej., ls()). Si se escribe el nombre de lafuncion sin los parentesis, R mostrara el contenido (codigo) mismo de la funcion. Pero no hablemosde la programacion en R antes de haberlo instalado.

    1.1. Instalacion de R

    La idea de esta secccion es guiar la instalacion de R en nuestro equipo (el equipo de la Facultadya tiene cargado el programa as que para el laboratorio no sera necesaria la instalacion, sin embargosera recomendable instalarlo en su equipo personal para asignaturas posteriores). Empecemos...

    Primero entremos al sitio http://www.r-project.org

    De click en el link CRAN (ubicada en la barra lateral izquierda en la seccion de Download,Packages.

  • Aqu se muestran varios sitios de donde se puede descargar el programa, estos sitios sonllamados mirrors. Para que la descarga no lleve demasiado tiempo se recomienda bajarlo dealgun sitio con el mismo huso horario que nosotros.

    Una vez que se selecciona el mirror, se debe bajar el paquete segun el sistema operativo quese tenga

    Si usted vive en un mundo de Windows de click en base y descargue dando click en el linkDownload R-3.0.0 for Windows

    Si su equipo es Macintosh, una vez seleeccionado el mirror, encuentre la liga MacOS X quellevara al paquete que se necesita descargar: R-3.0.0.pkg

    Si su equipo trabaja con LINUX, estamos liados porque nunca he trabajado con R for LINUXjejeje!

    Ahora ejecute el archivo que ha bajado, si se desea instalarlo de una vez

    2. Manejo de datos en R

    2.1. Creacion, listado y remocion de objetos en memoria

    Un objeto puede ser creado con el operador asignar el cual se denota como una flecha con elsigno menos y el smbolo > o n n

    [1] 15

    > 5 -> n

    > n

    [1] 5

    > x X x

    [1] 1

    > X

    [1] 10

    Asignacion con = versus <

    La asignacion = puede causar confusion si se trata de entender la sintaxis como una ecuacionmatematica. Si se escribe x = 2x+ 1 como una ecuacion matematica, esta tiene una unica soluciony es -1. Sin embargo, en R, la misma expresion x=2*x+1, se interpreta como asignar el valor de2*x+1 a la variable x. Esto actualiza el valor previo de x. As si x tiene el valor de 2 antes de estalnea, esta instruccion la deja con un valor de 5 (pues 2 2 + 1 = 5).

    Este tipo de confusion puede ser minimizada usando el operador < . La expresion en R,x tambien se utiliza para asignar valores de izquierdaa derecha (el de la izquierda es ya conocido y el de la derecha es el que se va a definir o actualizar).

    2

  • 2.2. Generacion de datos

    2.2.1. Secuencias Regulares

    Una secuencia regular de numeros enteros, por ejemplo de 1 hasta 30, se puede generar con:

    > x 1:10-1

    [1] 0 1 2 3 4 5 6 7 8 9

    > 1:(10-1)

    [1] 1 2 3 4 5 6 7 8 9

    La funcion seq puede generar sucesiones de numeros reales:

    > seq(1, 5, 0.5)

    [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

    donde el primer numero indica el principio de la sucesion, el segundo el final y el tercero elincremento que se debe usar para generar la sucesion. Tambien se puede usar:

    > seq(length=9, from=1, to=5)

    [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

    Tambien se pueden escribir los valores directamente usando la funcion contanear, c:

    > c(1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5)

    [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

    Si se quiere, tambien es posible introducir datos directamente desde el teclado usando la funcionscan sin opciones:

    > z z

    [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

    La funcion rep crea un vector con elementos identicos:

    > rep(1, 30)

    [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

    La funcion sequence crea una serie de secuencias de numeros enteros donde cada secuenciatermina en el numero (o numeros) especificado(s) como argumento(s). Por ejemplo,

    > sequence(4:5)

    [1] 1 2 3 4 1 2 3 4 5

    > sequence(c(10,5))

    [1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5

    3

  • 2.2.2. Matrices

    Para generar vectores, normalmente se utiliza la funcion c de concatenar:

    Ejemplo 2.1 (concatenar)

    >v1v2 c(v1,v2)

    [1] 3.1 4.0 5.0 6.0 1.0 2.0

    Hay varias maneras de generar una matriz. A continuacion se mostrara como se construye unvector de 10 ceros con las instrucciones c y rep:

    >adim(a) a

    [,1] [,2] [,3] [,4] [,5]

    [1,] 0 0 0 0 0

    [2,] 0 0 0 0 0

    Para acceder al elemento a23 y modificarlo:

    > a[2,3] a[,5] a

    [,1] [,2] [,3] [,4] [,5]

    [1,] 0 0 0 0 2

    [2,] 0 0 8 0 2

    Otra manera de construir matrices es utilizando la funcion matrix:

    Ejemplo 2.2 (Creacion de matrices)

    Para generar una matriz de 2 2 con valor 1:

    > m1 m2

  • > X rbind(m1, m2)

    [,1] [,2]

    [1,] 1 1

    [2,] 1 1

    [3,] 2 2

    [4,] 2 2

    > cbind(m1, m2)

    [,1] [,2] [,3] [,4]

    [1,] 1 1 2 2

    [2,] 1 1 2 2

    El operador para el producto de dos matrices es % %. Por ejemplo, considerando las dosmatrices m1 y m2:

    > rbind(m1, m2) %*% cbind(m1, m2)

    [,1] [,2] [,3] [,4]

    [1,] 2 2 4 4

    [2,] 2 2 4 4

    [3,] 4 4 8 8

    [4,] 4 4 8 8

    > cbind(m1, m2) %*% rbind(m1, m2)

    [,1] [,2]

    [1,] 10 10

    [2,] 10 10

    La transposicion de una matriz se realiza con la funcion t; esta funcion tambien funciona conmarcos de datos.

    > a d d

    [,1] [,2] [,3]

    [1,] 1 3 5

    [2,] 2 4 6

    > t(d)

    [,1] [,2]

    [1,] 1 2

    [2,] 3 4

    [3,] 5 6

    5

  • Una restriccion en un vector de datos es que todos los valores tienen que ser del mismo tipo.De manera general, estos pueden ser booleanos, numericos, de caracteres alfabeticos (strings.en

    programacion orientada a objetos).

    Ejemplo 2.4 (tipos de datos)

    > simpsons=c("Homero","Marge","Bart","Lisa","Maggie")

    > simpsons

    [1] "Homero" "Marge" "Bart" "Lisa" "Maggie"

    Ya se han visto ejemplos en los que los vectores de datos son numericos, en el caso de stringsestos se introducen con comillas dobles () o con comillas simples ().

    NOTA: Si en un vector de datos se introducen datos string y datos numericos interpre-tara todo el vector como string y no se podram realizar operaciones aritmeticas sobre los datosnumericos (pues los trata como letras).

    Un vector de datos puede tener sus entradas etiquetadas o con un nombre. Dichas etiquetasapareceran cuando se haga referencia explcita al vector. La funcion names() es usada para esto.

    Ejemplo 2.5 (Etiquetas a las variables)

    > names(simpsons)=c("papa","mama","hijo","hija mayor","hija menor")

    > names(simpsons)

    [1] "papa" "mama" "hijo" "hija mayor" "hija menor"

    > simpsons

    papa mama hijo hija mayor hija menor

    "Homero" "Marge" "Bart" "Lisa" "Maggie"

    > vecinos=c(simpsons,"Flanders")

    > vecinos

    papa mama hijo hija mayor hija menor

    "Homero" "Marge" "Bart" "Lisa" "Maggie" "Flanders"

    Note que las etiquetas no influyen en la naturaleza del vector, se hizo un concatenamiento desimpsons con Flanders sin importar que Flanders no tuviera etiqueta.

    3. Algunos ejemplos de probabilidad

    Ejemplo 3.1 (Ensayos Bernoulli)

    Un primer ejemplo muy sencillo es el lanzamiento de una moneda (ensayo Bernoulli). En R sepuede simular el lanzamiento de la moneda repetidamente sin necedidad de hacerlo fsicamentecon la funcion rbinom(), y de hecho, esta funcion se puede implementar para cualquier ensayoBernoulli. Para lanzar 10 veces una moneda justa la instruccion en R es la siguiente:

    > rbinom(10,1,1/2)

    [1] 1 0 1 1 0 1 0 1 0 0

    > rbinom(10,1,1/2)

    [1] 0 1 1 1 1 1 0 1 0 0

    > rbinom(10,1,1/2)

    [1] 0 1 0 0 1 1 0 1 1 1

    6

  • Esta funcion tiene tres parametros: el primer parametro es el numero de lanzamientos, el segundoparametro identifica al 1 con exito y el tercer parametro es la probabilidad de exito.

    3.0.3. Expresiones Booleanas

    Como en todos los lenguajes de programacion, se puede comparar numeros usando igual, no-igual, menor que, menor o igual que, mayor, etc. Tales comparaciones tambien pueden ser hechasusando operaciones Booleanas y, o y no. Los simbolos que se utilizan para estas operacionesson

    Operacion Notacion en Ry &&o ||

    no !igual ==

    no igual !=menor que =

    Sin embargo, a diferencia de otros programas, R permite comparar vectores como si fuerannumeros individuales. El resultado de esta comparacion es otro vector. Por ejemplo, para compararensayos Bernoulli con 1 como exito la instruccion es la siguiente:

    > rbinom(10,1,1/2)==1

    [1] TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE

    > rbinom(10,1,1/2)==1

    [1] FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE

    > rbinom(10,1,1/2)==1

    [1] TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE

    y el vector resultante es un vector con valores Booleanos, en el cual en vez de 0s y 1s hayFALSEs y TRUEs, respectivamente.

    Si se le colocan parentesis rectangulares a la instruccion anterior se puede ver en que numerode ensayo ocurrieron los exitos

    > (1:10)[rbinom(10,1,1/2)==1]

    [1] 2 3 5 6 7 8 9

    > (1:10)[rbinom(10,1,1/2)==1]

    [1] 1 4 9

    > (1:10)[rbinom(10,1,1/2)==1]

    [1] 2 5 7 8

    NOTA IMPORTANTE : Como se estan haciendo simulaciones cada que se ejecuta la instruccionnuevos vectors de ceros y unos se generan.

    Se puede crear una funcion en general, que diga en que que numero de ensayo se obtuvieron lossoles en n lanzamientos con probabilidad p de obtener sol

    7

  • soles soles(25,1/2)

    [1] 5 6 10 12 13 16 19 20 23 24 25

    > soles(25,1/2)

    [1] 1 5 7 11 12 13 15 20 21 22 23

    > soles(25,1/2)

    [1] 3 4 7 9 10 11 16 17 18 20 22 23

    Ejemplo 3.2 (Volados)

    Se lanza una moneda dos veces y se observa qe cayo aguila o sol. Por ejemplo (A, S) estableceque el primer resultado fue aguila y el segundo fue sol. El conjunto {(A, S), (A,A), (S, S), (S,A)}es el conjunto de todos los posibles resultados. Si X denota el numero de soles, entonces X puedetomar los valores 0, 1 o 2. Si dicha moneda es justa, entonces P (X = 0) = 1

    4, P (X = 1) = 1

    2y

    P (X = 2) = 14.

    Se hara un diagrama de picos de una distribucion. El diagrama de picos muestra las proba-bilidades de para cada valor en el rango de una variable aleatoria, y es importante notar que solohace sentido esta grafica (por el momento) para variables aleatorias discretas. En R, los comandospara hacer una grafica de picos:

    > k=0:4

    > p=c(1,2,3,2,1)/9

    > plot(k,p,type="h",xlab="k",ylab="Probabilidad", ylim=c(0,max(p)))

    > points(k,p,pch=16,cex=1)

    Nota: El argumento type=h dibuja las lneas verticales del diagrama de picos

    Ejemplo 3.3 (El problema de los cumpleanos)

    Si n estudiantes se seleccionan aleatoriamente en un salon de clases, cual es la probabilidad deque al menos dos de ellos cumplan anos el mismo da? Solo con fines didacticos, se supondra queun ano tiene 365 das (i.e. no se consideran anos bisiestos) y tambien se supondra que es igual deprobable cumplir anos en todos los das del ano. Definamos los siguientes eventos:B: Al menos dos estudiantes cumplan anos el mismo da. Entonces, Bc es el evento de que los nestudiantes cumplan anos en distintos das. Notese que

    P (Bc) =365!

    (365 n)!365n

    y por lo tanto

    P (B) = 1 365!(365 n)!365n

    . Se creara una funcion en R para ver el comportamiento de esta probabilidad al variar el numerode estudiantes

    8

  • > cumplea~nos cumplea~nos(1)

    [1] NaN Mensajes de aviso perdidos 1: In factorial(365) : value out

    of range in gammafn 2: In factorial(365 - n) : value out of range

    in gammafn

    > cumplea~nos(100)

    [1] NaN Mensajes de aviso perdidos 1: In factorial(365) : value out

    of range in gammafn 2: In factorial(365 - n) : value out of range

    in gammafn

    > cumplea~nos(360)

    [1] NaN Mensajes de aviso perdidos In factorial(365) : value out of

    range in gammafn

    R (como esperabamos) tiene problema en calucular 365!. Para solucionar este problema seobtendra el logfactorial de la expresion del complemento

    > nocumplea~nos nocumplea~nos(2)

    [1] 0.9972603

    > nocumplea~nos(150)

    [1] 2.451222e-16

    > nocumplea~nos(c(20,22,25,30))

    [1] 0.5885616 0.5243047 0.4313003 0.2936838

    > plot(1:100,nocumplea~nos(1:100))

    La sentencia plot, grafica como funcion de n la log-probabilidad de que niguno cumpla anos enel mismo da

    4. Un poco acerca de generacion de datos aleatorios

    Se hablara un poco acerca de la generacion de variables aleatorias, y no es el fin de este textotener una discusion acerca de la aleatoriedad de datos generados por un determinado algoritmo.Por el momento se restringira la atencion al uso de la funcion sample() de R.

    R generara observaciones de una variable aleatoria discreta con la funcion sample(). Si el vectork contiene los valores de los cuales se obtendra la muestra, y p contiene las probabilidades de cadavalor, entonces el comando sample(k,size=1,prob=p) seleccionara uno de los valores de k con lasprobabilidades especificadas por p.

    Ejemplo 4.1 (Simulacion de Volados)

    Ya se estudio el ejemplo del lanzamiento de una moneda justa y denota el numero de soles. Sepodra simular este experimento sin la necesidad de lanzar una moneda dos veces, sino de maneracomputacional (en R) de la siguiente manera:

    > k=0:2

    > p=c(1,2,1)/4

    > sample(k,size=1,prob=p)

    [1] 1

    9

  • > sample(k,size=1,prob=p)

    [1] 1

    > sample(k,size=1,prob=p)

    [1] 2

    Si no se escribe un valor para prob=, este por default tomara los valores de k equiprobables. Sepuede usar esto pasa simular el lanzamiento de un par de dados y sumar sus valores (i.e. la sumade las caras obtenidas en el lanzamiento de dos dados)

    > sample(1:6,size=1)+sample(1:6,size=1)

    [1] 7

    > sample(1:6,size=1)+sample(1:6,size=1)

    [1] 8

    > sample(1:6,size=1)+sample(1:6,size=1)

    [1] 5

    Muestras aleatorias generadas por sample()La funcion sample() generara una muestra de tamano n de una distribucion discreta especifican-

    do size=n. El muestreo se realizara con reemplazo si se escribe la instruccion replace=TRUE. Estoes importante si se desea una muestra aleatoria independiente (y obviamente, por su naturaleza,identicamente distribuida). El valor por default es sin reemplazo.

    Ejemplo 4.2 (Mas de Volados)

    Considerese el lanzamiento de una moneda 10 veces y el de un dado 10 veces

    > sample(0:1,size=10,replace=TRUE)

    [1] 1 1 0 0 1 0 1 1 1 1

    > sample(1:6,size=10,replace=TRUE)

    [1] 3 3 6 6 6 1 2 4 4 3

    > sample(1:6,size=10,replace=TRUE)+sample(1:6,size=10,replace=TRUE)

    [1] 5 7 9 11 9 7 9 4 9 6

    10