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