martes, 21 de agosto de 2012

Clase 1: Manejo de datos en R-project.

Curso de bioestadística aplicada en R


Esta es la primera entrada que forma parte de un curso que he diseñado sobre el análisis de datos biológico en R-project. El curso es mas extenso y completo de lo que detallo en las entradas, pero me parecía interesante reunir en este blog una especie de formulario con los principales tipos de análisis de cualquier curso básico de estadística. Iré creando entradas con los códigos (scripts) de cada clase, y cierta información básica de cada tema. Si alguien desea profundizar puede solicitarme información más detallada o realizar el curso online.
Saludos y espero que lo disfruten.

CursoR Clase1



Aquí les dejo los códigos que corresponden a una primera clase de introducción a R-project.



###################################################
#   Análisis de datos estadísticos con R    #
#                 MANEJO DE DATOS                 #
#                      2012                      #
#     Rosana Ferrero           #
#                   Ph.D. student                 #
#                                                 # 
###################################################
 

###########################################################################
# 1. R como calculadora: Aritm?tica y Funciones b?sicas          #
###########################################################################
 
# operaciones aritm?ticas b?sicas
  2 + 3 # suma
  2 - 3 # resta
  2*3   # multiplicaci?n
  2/3   # divisi?n
  2^3   # potenciaci?n
 
  exp(3) #exponencial
  sqrt(2) # ra?z cuadrada
  log(1) # logaritmo
  sin(1); cos(1); tan(1) # trigonom?tricas
  max; min; range; mean, sum, diff, cumsum, sd, quantile # otras
 
#operadores l?gicos
  <, >, <=, =>, ==, !=
  !, &, |, xor()
  &&, ||
  if()
 
# precedencia de operaciones
  4^2 - 3*2
  1 - 6 + 4
  2^-3
  (4^2) - (3*2) # usar par?ntisis para agrupar, clarifica
 
# Funciones, argumentos en las funciones
  log(100)
  log(100, base=10)
  log10(100) # equivalente
  log(100, b=10)  # argumentos abreviados
  log(100, 10)  # argumentos por posici?n
  x=log(100, 10)  # generaci?n de objetos
 
###########################################################################
# 2. R como lenguaje: objetos en R               #
###########################################################################
 
# Creaci?n de objetos y funciones b?sicas
  rnorm(5)
  x=rnorm(5)
  x # equivalente a print(x)
  plot(x)
  summary(x)
 
# Ayuda detro del programa
  ?rnorm
  help("rnorm")
  help.start()
  ?help.search
  help.search("normal")
  ?apropos
  apropos("normal")
  ?demo
  demo(graphics)
  demo(persp)
  demo(lm.glm)
 
# Listado y remoci?n de objetos en memoria
  ls() # para saber los objetos que tenemos en el espacio de trabajo
  x # escribir el nombre de un objeto muestra su contenido
  save(<objetos>,file="nombre.RData") # para guardar el contenido del espacio de trabajo. Tambi?n se puede usar: save.image() , si queremos que guarde todo.
  attach("misdatos.RData") # para acceder a los objetos de la carpeta de trabajo
  detach("misdatos.RData") # para deshacer la selecci?n
  rm("x") # borra el objeto "x", y rm() todo el escritorio de trabajo
 
# Tipos de objetos:
      x=1:10; str(x)
  # Vector: colecci?n ordenada de elementos del mismo tipo
    x=c(1,2,3) ; y=c("a", "b", "c")
    z=c(TRUE, TRUE, FALSE)
    is.vector(x); is.vector(y); is.vector(z)
    x[1] ; y[2]; z[3] #c?mo acceder a los elementos del vector
 
  # Matrices y Array: generalizaci?n multidimensional del vector. Elementos del mismo tipo. Varias columnas (o filas) de vectores
    is.array(x)
    a=array(9,dim=c(5,4)); a; a[1,];  a[1,,drop=FALSE]
    b=matrix(1:20,nrow=5); b; b[1,2]
 
  # Data frame: similar al array, pero con columnas de diferentes tipos.
  dates=data.frame(ID=c("gen0","genB","genZ"),subj1=c(10,25,33),subj2=c(NA,34,15),oncogen=c(TRUE, TRUE, FALSE),loc=c(1,30,125))
 
  # Factor: tipo de vector para datos cualitativos (o categ?ricos)
  x=factor(c(1,2,2,1,1,2,1,2,1))
 
  # List: vector generalizado. Sus componentes pueden ser tambi?n listas, o pueden ser de distinto tipo. No tienen estructura.
  una.lista=c(un.vector=1:10,una.palabra="hola",una.matriz=matrix(rnorm(20),ncol=5),lista2=c(1=5,b=factor(c("a","b"))))
 
  #Funciones: c?digo
  f1=function(x) {return(2*x)} ; is.function(f1)
 
# Atributos de los objetos
    x=1:15;   y=matrix(5,3,4); z=c(TRUE, FALSE)
    attributes(x);     attributes(y);    attributes(z)
 
    w=list(a=1:3,b=5); attributes(w)
    f1=function(x) {return(2*x)} ; attributes(f1); is.function(f1)
 
  # Modo (mode): l?gico, entero, real, car?cter, etc.
    mode(x); mode(y); mode(z)
 
  # Tipo (typeof): double, character...
    x1=1:5, x2=c(1,2,3,4,5); x3="patata"
    typeof(x1);  typeof(x2);  typeof(x3)
 
  # Nombres (names): etiquetas.
      #Poner un nombre en min?scula no es lo mismo que ponerlo en may?scula (R es "case-sensitive": x!=X)
      #Hay nombres reservados, por lo que hay que evitarlos. Ej: "function", "if"
    z = list(a=1, b="c", c=1:3)
    names(z)
 
  # Dimensiones (dim): n?mero de filas y columnas (puede ser cero)
    length(x)
    dim(y)
 
  # Nombres de las dimensiones de los arrays (dimnames)
    y=matrix(5,3,4)
    dimnames(y)[[1]]=c("8am","9am","10am") # [[1]] para filas y [[2]] para columnas
    colnames(y)=c("lunes", "martes", "mi?rcoles", "jueves") # alternativa
 
  # Clase (class): lista de las clases del objeto (vector alfa-num?rico)
    x = 10
    class(x) # "numeric"
 
  # Otros: por ejemplo, para series temporales.
 
### Generaci?n de secuencias
   # Secuencias aleatorias
   sample(5)
   sample(5,3)
   x=1:10;sample(x);   sample(x,replace=TRUE)
   probs=x/sum(x);sample(x,prob=probs)
 
   # Secuencias discretas y continuas
   x=c(1,2,3,4,5)
   x=1:5
   x=seq(from=1,to=5,by=1)
 
   # Secuencias con repeticiones
   rep(1,5)
   x=1:4; rep(x,2)
   gl(3,5) #como rep(1:3, rep(5,3))
   expand.grid(1:3,4:6,7:10)
 
### Indexaci?n de vectores
   x=1:5; x[1]
   x[x>3]
   y=x>3; x[y]
   names(x)=c("a","b","c","d","e"); x["c"]
 
### Valores ausentes: NA (not available); NaN (not a number); Inf (infinito)
  x=c(1:3,NA);  is.na(x); which(is.na(x))
  x[is.na(x)]=0 #sustituir NA por 0
  is.na(5/0)
  is.nan(0/0)
  is.infinite(-5/0)
  mean(x,na.rm=TRUE)    #quitar NA al evaluar la media
   x=c(1:3,NA); y=na.omit(x); y #para funciones de modelado como lm es mejor usar "na.omit" o "na.exclude", que eliminan los NA
 
### Orden de vectores
  x=c(5,1,8,3)
  order(x); order(x,decreasing=TRUE)
  sort(x)
  rank(x)
  x[order(x)]
  x[order(x,decreasing=TRUE)]
 
### Vector de caracteres
  pegar=paste(c("A","B"),2:3,sep="");  pegar
  substr("abcdef",2,4)
  y=factor(1:5); y
 
  x = c(as = "asfef", qu = "qwerty", "yuiop[", "b", "stuff.blah.yech")
  # split x on the letter e
  strsplit(x, "e")
 
### Discretizar
  v=1:9
  cut1=cut(v,3); cut1
  cut2=cut(v,quantile(v,c(0, 1/3, 2/3, 1)),include.lowest=TRUE); cut2
  cut3=cut(v,quantile(v,c(0, 1/3, 2/3, 1)),include.lowest=TRUE); cut3
 
### Combinar vectores o matrices
  rbind(1:5,1:10)
  cbind(1:5,1:10)
 
  a=matrix(rnorm(20),ncol=5)
  mediai=media=NULL;for(i in 1:4){mediai=mean(a[i,]); media=c(media,mediai)} # loop
  apply(a,1,mean,na.rm=TRUE) # aplica una funci?n a filas, columnas o ambas. Hay que especificar el "margin"
  sapply(a,mean,na.rm=TRUE) # simplifica el resultado a un vector o una matriz
  lapply(a,mean,na.rm=TRUE) # devuelve una lista
  require(stats); groups = as.factor(rbinom(32, n = 5, prob = 0.4))
  tapply(groups, groups, length)
  aggregate(state.x77, list(Region = state.region), mean)
 
### Programaci?n en R
   #Definici?n de funciones
      funcion1=function(A,B,C) {x1=A*B/C; x1}
   #Argumentos
      args(funcion1)
      funcion1(1,2,3)
   #Control de ejecuci?n: condicionales, loops
    f = factor(sample(letters[1:5], 10, replace=TRUE))
        for( i in unique(f) ) print(i)
    x=1:5; if(x==5) {x=x+1} else {x=x+2};  x
    x=1:5; ifelse(x %% 2 == 1, "Odd", "Even")
    while(length(x)<=10) {x=c(x,1)}
    require(stats)
          centre = function(x, type)
          {
            switch(type, mean = mean(x), median = median(x), trimmed = mean(x, trim = .1))
          }
          x = rcauchy(10); centre(x, "mean")
   #Control de errores: traceback, browser, debug
      debug(centre)
      undebug()
   #Control de la duraci?n de la operaci?n:
      unix.time(centre(rnorm(10),"mean"))   #unix.time, Rprof
      traceback()
 
Created by Pretty R at inside-R.org

1 comentario:

Libros para descargar (gratis) sobre Estadística Computacional