Tabla de Contenidos

R

Es un lenguaje y entorno de programación para análisis estadístico y gráfico.
Existe un IDE para trabajar con el lenguaje denominado RStudio. Para instalarlo en Ubuntu añadiremos el paquete r-base.

Básico

Funciones básicas

Mostrar por pantalla:

Strings:

Listas:

Trabajo con paquetes:

Para la ayuda:

Variables

Variables categóricas

En R son denominadas factor y sus categorías levels.

Podremos crear una variable categórica a partir de una que no lo es (asignando los distintos valores que tiene como levels) de la siguiente forma:

Dictamen <- factor(Dictamen)

Podremos ver los levels de una variable factor mediante:

levels(Dictamen)

Podremos cambiar los nombres de los levels mediante:

levels(Dictamen) <- c("positiu","negatiu")''

Operadores

Conjuntos de datos

Generación

> rep(1:4, 2)
[1] 1 2 3 4 1 2 3 4
> rep (c(1,2), 2)
[1] 1 2 1 2
> rep (0, 5)
[1] 0 0 0 0 0

Acciones sobre un conjunto de datos

Para cambiar los valores de un conjunto de datos lo podremos hacer como sigue (aquí cambia los registros de Ingressos que tengan valor 99999999 o 0 por NA):

Ingressos[Ingressos == 99999999 | Ingressos == 0] <- NA

Si en vez de convertirlos a NA los quisiesemos eliminar (el ejemplo elimina los registros que no tienen 0 ni en la columna 1, en la 3, en la 6 ni en la 8):

dd <- dd[dd[,1] != 0 & dd[,3] != 0 & dd[,6] != 0 & dd[,8] != 0,]

Si quisiesemos ver un conteo del contenido podríamos hacer (el ejemplo devuelve el número de registros que tienen en la columna 1 un 0):

table(dd[,1]==0)

Contar el número de elementos que tienen en la primera variable el valor concreto…

sum(datos[,1] == 2)

Seaparar unos datos Data en dos tablas y de forma aleatoria:

learn <- sample(1:150, 75)
mydata.learn <- Data[learn, ]
mydata.test <- Data[-learn, ]

Para conocer el número de filas y de columnas de un conjunto de datos utilizaremos la funcion nrow y ncol respectivamente.
La función rbind te permite concatenar dos conjuntos de datos, el segundo después del primero.
Podemos recoger un subconjunto si, por ejemplo, tenemos en una variable idxs los indices así: sub ← conjunto[idxs]. O el subconjunto negativo restante sub ← conjunto[-idxs].

Vectores y matrices

Creación de una matriz:

> A <- matrix ( c (1 ,2 ,3 ,4) ,2 ,2 , byrow = TRUE )
> A
     [,1] [,2]
[1,]    1    2
[2,]    3    4

> a <- matrix ( c (1 ,2 ,3 ,4) ,4 ,1)
> a
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4

Data Frame

Para crear un Data Frame a partir de dos vectores de dimensión igual:

dd <- data.frame(x,y)

Para leer un archivo de datos (un csv separado por tabs, columnas…) y cargarlo en un data.frame usaremos:

datos <- read.table("alpha.csv",header=T)

Mediante attach(var) haremos accesibles (sin necesidad de acceder por dataframe$columna sino como variables) las columnas del data frame.
Para eliminar una columna de un data frame: datos$beta2=NULL

Control de flujo

If

if(datos$beta1[i]==1)
    producto_preferido[i] = 1

Bucle for

producto_preferido <- nrow(252)
for (i in 1:252) {
	producto_preferido[i]=NA
	if(datos$beta1[i]==1)
		producto_preferido[i] = 1
}

> for (i in 1:10) {
	print(c(sum(datos[,i] == 1) / nrow(datos), sum(datos[,i] == 2) / nrow(datos)));
}

Funciones

Para crear la función p.xk a la que se le pasan dos parámetros, lo que devuelve es el resultado de último comando ejecutado.

p.xk <- function(vec,fac){nk <- as.vector(table(fac)); n <- sum(nk); xk <- tapply(vec,fac,mean);
           txk <- (xk-mean(vec))/(sd(vec)*sqrt((n-nk)/(n*nk))); pxk <- pt(txk,n-1,lower.tail=F)}

Si en una función queremos devolver datos complejos haremos lo siguiente, esto sería: cv = cvalidation(datos); cv$learn;

cvalidation = function (dframe) {
  nregs = nrow(dframe);
  nind_group = nregs/10;
  ilearn = sample(1:nregs, nind_group * 9);
  dlearn <- dframe[ilearn,];
  dtest <- dframe[-ilearn,];
  list(learn = dlearn, test = dtest);
}

Usar datos externos

data(iris3)
Data <- data.frame(rbind(iris3[,,1], iris3[,,2], iris3[,,3]), Sp = rep(c("s","c","v"), rep(50,3)))

Estadística

Básico

Generación de una distribución normal:

x <- rnorm(50)

Recoger la desviación estándard de una matriz, un vector o un dataframe:

sd(X)

Aunque también podríamos sacarlas (pero centradas con center o escaladas con el vector unidad con scale) con:

pc1 = prcomp(X, scale=T)
pc1$sdev

Objetos estadísticos

Regresión linear (lm)

Para crear un objeto “regresión linear” a partir de las columnas x,y de un dataframe deberemos indicarlo con ~:

reg1 <- lm(dd$y ~ dd$x, data=dd)

Regresión local (loess)

reg2 <- loess(y ~ x, data=dd)

Gráficos

Funciones

Como...

Data Mining & Machine Learning

data(HouseVotes84, package="mlbench")
model <- naiveBayes(Class ~ ., data = HouseVotes84) # Entrenamiento, predecir Class
pred <- predict(model, HouseVotes84[,-1])           # Prediccion (sobre los mismos datos)
table(pred, HouseVotes84$Class)                     # Tabla de confusión \ contingencia

Naïve Bayes

Avanzado

Funciones

K nearest neighbors (knn)

En el package class:

aux = datos[,-10] # Volcado de los datos menos la columna Ingressos
aux1 = aux[!is.na(Ingressos),] # Cogemos los Ingressos que no tienen NA de aux en aux1
aux2 = aux[is.na(Ingressos),] # Cogemos los Ingresos que tienen NA de aux
knn.ing = knn(aux1,aux2,Ingressos[!is.na(Ingressos)]) # Hacemos el knn con los que no tienen NA sobre los que sí tienen 
Ingressos[is.na(Ingressos)] = knn.ing # Asignamos los nuevos valores

Notas

Como...

Crear una tabla

Denominada pvalk.con de nresp filas y ncon columnas y asignar los nombres de las columnas y las filas a partir de una categórica y de otra matriz:

pvalk.con <- matrix(NA,nresp,ncon)
rownames(pvalk.con) <- levels(tmp)
colnames(pvalk.con) <- row.names(pvalcon)

Limpiar el workspace

rm(list=ls())

Notas