Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
math_langs:r [2011/03/27 18:31] alfred |
math_langs:r [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 2: | Línea 2: | ||
| Es un lenguaje y entorno de programación para análisis estadístico y gráfico. \\ | 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 [[http://www.rstudio.org|RStudio]]. | Existe un IDE para trabajar con el lenguaje denominado [[http://www.rstudio.org|RStudio]]. | ||
| + | Para instalarlo en Ubuntu añadiremos el paquete ''r-base''. | ||
| ===== Básico ===== | ===== Básico ===== | ||
| + | |||
| + | |||
| + | |||
| + | |||
| Línea 17: | Línea 21: | ||
| Mostrar por pantalla: | Mostrar por pantalla: | ||
| * ''print(variable)'': Muestra por pantalla un texto. | * ''print(variable)'': Muestra por pantalla un texto. | ||
| - | * ''printf("formato", variables)'': Muestra por pantalla un texto formateado. | + | * ''sprintf("formato", variables)'': Devuelve, **no lo muestra**, un string formateado. |
| + | |||
| + | Strings: | ||
| + | * ''s = paste(s, "Delta", sep="")'': Concatena al string ''s'' la palabra ''Delta'' con ninguna separación. | ||
| + | Listas: | ||
| + | * ''a = c(2, 3, 5)'': creará una lista de tres números. | ||
| + | * ''a = c(c(2, 3, 5), 3)'': creará una lista de cuatro números. | ||
| Trabajo con paquetes: | Trabajo con paquetes: | ||
| Línea 24: | Línea 34: | ||
| * ''?? funcion'': Busca en la ayuda disponible los registros que casan con el nombre de esta función. | * ''?? funcion'': Busca en la ayuda disponible los registros que casan con el nombre de esta función. | ||
| * ''help funcion'': Muestra la ayuda para la función. | * ''help funcion'': Muestra la ayuda para la función. | ||
| + | |||
| ==== Variables ==== | ==== Variables ==== | ||
| Línea 34: | Línea 45: | ||
| Podremos cambiar los nombres de los levels mediante: | Podremos cambiar los nombres de los levels mediante: | ||
| <code>levels(Dictamen) <- c("positiu","negatiu")''</code> | <code>levels(Dictamen) <- c("positiu","negatiu")''</code> | ||
| + | |||
| + | |||
| + | === Operadores === | ||
| + | * ''ifelse(a>0,a,0)'' : Operador ternario. | ||
| + | |||
| + | |||
| + | |||
| Línea 76: | Línea 94: | ||
| table(dd[,1]==0) | table(dd[,1]==0) | ||
| </code> | </code> | ||
| + | Contar el número de elementos que tienen en la primera variable el valor concreto... | ||
| + | <code> | ||
| + | sum(datos[,1] == 2) | ||
| + | </code> | ||
| + | Seaparar unos datos ''Data'' en dos tablas y de forma aleatoria: | ||
| + | <code> | ||
| + | learn <- sample(1:150, 75) | ||
| + | mydata.learn <- Data[learn, ] | ||
| + | mydata.test <- Data[-learn, ] | ||
| + | </code> | ||
| + | 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 === | === Vectores y matrices === | ||
| Creación de una matriz: | Creación de una matriz: | ||
| Línea 98: | Línea 128: | ||
| * Con la combinación de signos ''%*%'' podemos hacer el //dot product// (producto escalar) :?: (no sé si es dot product o scalar product, también existe %o%). | * Con la combinación de signos ''%*%'' podemos hacer el //dot product// (producto escalar) :?: (no sé si es dot product o scalar product, también existe %o%). | ||
| * ''diag(x)'' recibe un vector x y lo coloca como diagonal en una matriz de 0. | * ''diag(x)'' recibe un vector x y lo coloca como diagonal en una matriz de 0. | ||
| + | * ''t(x)'' recoge la matriz traspuesta de x. | ||
| === Data Frame === | === Data Frame === | ||
| Para crear un Data Frame a partir de dos vectores de dimensión igual: | Para crear un Data Frame a partir de dos vectores de dimensión igual: | ||
| Línea 112: | Línea 143: | ||
| Mediante ''attach(var)'' haremos accesibles (sin necesidad de acceder por dataframe$columna sino como variables) las columnas del data frame. \\ | 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'' | + | Para eliminar una columna de un data frame: ''datos$beta2=NULL'' \\ |
| + | |||
| + | |||
| Línea 128: | Línea 162: | ||
| if(datos$beta1[i]==1) | if(datos$beta1[i]==1) | ||
| producto_preferido[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))); | ||
| } | } | ||
| </code> | </code> | ||
| Línea 136: | Línea 174: | ||
| p.xk <- function(vec,fac){nk <- as.vector(table(fac)); n <- sum(nk); xk <- tapply(vec,fac,mean); | 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)} | txk <- (xk-mean(vec))/(sd(vec)*sqrt((n-nk)/(n*nk))); pxk <- pt(txk,n-1,lower.tail=F)} | ||
| + | </code> | ||
| + | Si en una función queremos devolver datos complejos haremos lo siguiente, esto sería: ''cv = cvalidation(datos); cv$learn;'' | ||
| + | <code> | ||
| + | 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); | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | ==== Usar datos externos ==== | ||
| + | * ''try(data())'' devuelve los paquetes de datos disponibles. | ||
| + | * ''data(iris3)'' carga los datos de iris3. Por ejemplo, para trabajar con ellas: | ||
| + | <code> | ||
| + | data(iris3) | ||
| + | Data <- data.frame(rbind(iris3[,,1], iris3[,,2], iris3[,,3]), Sp = rep(c("s","c","v"), rep(50,3))) | ||
| </code> | </code> | ||
| Línea 175: | Línea 232: | ||
| * ''plot(x)'': Muestra en un gráfico de puntos los elentos de x. Podríamos hacer también ''plot(x,y)'', que sería poner x en función de y. | * ''plot(x)'': Muestra en un gráfico de puntos los elentos de x. Podríamos hacer también ''plot(x,y)'', que sería poner x en función de y. | ||
| * ''hist(x)'': Muestra en un histograma la forma de x. | * ''hist(x)'': Muestra en un histograma la forma de x. | ||
| + | |||
| ==== Como... ==== | ==== Como... ==== | ||
| * **Hacer plots 3d**: los encontrarás en el paquete ''rgl''. Contiene funciones como ''plot3d''... | * **Hacer plots 3d**: los encontrarás en el paquete ''rgl''. Contiene funciones como ''plot3d''... | ||
| + | |||
| + | ===== Data Mining & Machine Learning ===== | ||
| + | <code> | ||
| + | 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 | ||
| + | </code> | ||
| + | |||
| + | ==== Naïve Bayes ==== | ||
| ===== Avanzado ===== | ===== Avanzado ===== | ||
| Línea 194: | Línea 262: | ||
| ===== Notas ===== | ===== Notas ===== | ||
| + | |||
| ==== Como... ==== | ==== Como... ==== | ||
| === Crear una tabla === | === Crear una tabla === | ||
| Línea 202: | Línea 271: | ||
| colnames(pvalk.con) <- row.names(pvalcon) | colnames(pvalk.con) <- row.names(pvalcon) | ||
| </code> | </code> | ||
| + | === Limpiar el workspace === | ||
| + | <code> | ||
| + | rm(list=ls()) | ||
| + | </code> | ||
| + | |||
| ==== Notas ==== | ==== Notas ==== | ||
| * {{math_langs:matlabr.pdf|Comparación de MATLAB y R}}, sacada de [[http://www.math.umaine.edu/~hiebeler/comp/matlabR.html]]. | * {{math_langs:matlabr.pdf|Comparación de MATLAB y R}}, sacada de [[http://www.math.umaine.edu/~hiebeler/comp/matlabR.html]]. | ||