Skip to content

Instantly share code, notes, and snippets.

@mlagunas
Created February 18, 2018 22:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mlagunas/49523dab648425f59796fae72c3ef8d7 to your computer and use it in GitHub Desktop.
Save mlagunas/49523dab648425f59796fae72c3ef8d7 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message:\n",
"\"package 'caret' was built under R version 3.3.3\"Loading required package: lattice\n",
"Loading required package: ggplot2\n",
"Warning message:\n",
"\"package 'ggplot2' was built under R version 3.3.3\"Warning message:\n",
"\"package 'PerformanceAnalytics' was built under R version 3.3.3\"Loading required package: xts\n",
"Warning message:\n",
"\"package 'xts' was built under R version 3.3.3\"Loading required package: zoo\n",
"Warning message:\n",
"\"package 'zoo' was built under R version 3.3.3\"\n",
"Attaching package: 'zoo'\n",
"\n",
"The following objects are masked from 'package:base':\n",
"\n",
" as.Date, as.Date.numeric\n",
"\n",
"\n",
"Attaching package: 'PerformanceAnalytics'\n",
"\n",
"The following object is masked from 'package:graphics':\n",
"\n",
" legend\n",
"\n",
"Loaded lars 1.2\n",
"\n"
]
}
],
"source": [
"library(caret)\n",
"library(PerformanceAnalytics)\n",
"library(MASS)\n",
"library(lars)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Lectura de los datos\n",
"Leemos los datos de entrada (almacenados como fichero *.csv* previamente para ser de más fácil manejo) y establecemos la semilla generadora de números aleatorios a un valor fijo para que nos permita rehacer los experimentos."
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
" q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 \n",
" A : 1 A: 1 A: 3 A : 2 A:8 A:10 A: 1 A : 2 B: 3 A:3 \n",
" B : 5 B:22 B: 1 B : 5 B:3 B: 1 C: 1 C : 8 C: 9 B:9 \n",
" C :10 C:12 C : 2 C:5 C: 1 D: 2 E :12 D:10 C:4 \n",
" D : 1 E: 7 D :11 D:6 D:10 E:19 NA's: 1 E: 1 D:1 \n",
" E : 5 E : 2 E:1 E: 1 E:6 \n",
" NA's: 1 NA's: 1 \n",
" q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 \n",
" A:10 A:9 A: 1 A : 1 A : 3 A :11 A:5 A:2 A: 1 A :4 \n",
" B: 2 B:1 B:20 B :12 B :10 B : 8 B:8 B:7 B: 2 B :3 \n",
" C: 3 D:6 E: 2 C : 4 C : 6 C : 1 D:8 C:5 C:16 C :3 \n",
" D: 6 E:7 E : 5 D : 3 E : 1 E:2 D:5 D: 1 D :4 \n",
" E: 2 NA's: 1 NA's: 1 NA's: 2 E:4 E: 3 E :8 \n",
" NA's:1 \n",
" q21 q22 q23 q24 q25 total \n",
" A: 5 A: 2 A : 2 A : 2 A: 4 Min. : 4.0 \n",
" B: 1 B: 4 B : 5 B : 2 B:11 1st Qu.: 9.5 \n",
" C: 4 C: 2 D : 1 C :15 C: 4 Median :11.0 \n",
" D:12 D: 3 E :14 E : 3 D: 3 Mean :11.0 \n",
" E: 1 E:12 NA's: 1 NA's: 1 E: 1 3rd Qu.:12.0 \n",
" Max. :17.0 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Set a random seed to reproduce the experiments\n",
"seed = 12345\n",
"set.seed(seed)\n",
"\n",
"# Read the solution found with the evolution strategies approach and bind it to the data\n",
"sol = read.csv('data/exam_sol.csv')\n",
"d = read.csv('data/data.csv')\n",
"\n",
"# Visualize a summary of the data\n",
"summary(d)\n",
"\n",
"# Helper functions\n",
"substrLeft <- function(x, n){\n",
" substr(x, 2, nchar(x)-n)\n",
"}\n",
"substrRight <- function(x, n){\n",
" substr(x, nchar(x)-n+1, nchar(x))\n",
"}\n",
"\n",
"scores_real = unlist(unname(d['total'])) # the real score for each student\n",
"get_scores = function(correct_answers){\n",
" # correct_answers is a vector of 25 A, B, etc.\n",
" # returns the scores all students would get\n",
" \n",
" # for each student, check what score they would get if correct_answers were the correct answers\n",
" scores = NULL \n",
" for (i in 1:23){\n",
" student_answers = t(d)[1:25,i]\n",
" scores = c(scores, sum( student_answers == correct_answers, na.rm = T ) )\n",
" }\n",
" return(scores)\n",
"}\n",
"\n",
"# Obtain a solution based on the letters with more answers in each question\n",
"solmod <- rapply(lapply(lapply(apply(d[,1:25],2, table), sort),tail,n=1), names)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Resumen de los datos\n",
"Al mostrar el resumen de los datos, vemos que cada pregunta tiene respuestas que varían de la *A-E* conteniendo *NAs* en algunas de ellas. Tambien observamos como no todas preguntas contienen a todas las respuestas, por ejemplo *q23* no tiene la respuesta *C*."
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Primera aproximación\n",
"## Creación de variables dummy\n",
"Dado que las preguntas tienen como respuestas un conjunto de factores, la mejor forma de manipularlos será creando variables *dummy*. Dado que es la primera aproximación al problema, las observaciones con NAs se eliminaran (teniendo en mente que podrán ser de ayuda en un futuro)."
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] \"Columns with all their elements = 0 : q6B\" \n",
"[2] \"Columns with all their elements = 0 : q6C\" \n",
"[3] \"Columns with all their elements = 0 : q11E\"\n",
"[1] \"dummy cols: 82 rows: 20\"\n"
]
},
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th></th><th scope=col>q1A</th><th scope=col>q1B</th><th scope=col>q1C</th><th scope=col>q1D</th><th scope=col>q1E</th><th scope=col>q2B</th><th scope=col>q3B</th><th scope=col>q3C</th><th scope=col>q3E</th><th scope=col>q4B</th><th scope=col>q4C</th><th scope=col>q4D</th><th scope=col>q4E</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><th scope=row>1</th><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr>\n",
"\t<tr><th scope=row>2</th><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td></tr>\n",
"\t<tr><th scope=row>4</th><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>\n",
"\t<tr><th scope=row>5</th><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td></tr>\n",
"\t<tr><th scope=row>6</th><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr>\n",
"\t<tr><th scope=row>7</th><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllllllll}\n",
" & q1A & q1B & q1C & q1D & q1E & q2B & q3B & q3C & q3E & q4B & q4C & q4D & q4E\\\\\n",
"\\hline\n",
"\t1 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0\\\\\n",
"\t2 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0\\\\\n",
"\t4 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\\\\n",
"\t5 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0\\\\\n",
"\t6 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0\\\\\n",
"\t7 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 1 & 0 & 0 & 1 & 0\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| <!--/--> | q1A | q1B | q1C | q1D | q1E | q2B | q3B | q3C | q3E | q4B | q4C | q4D | q4E | \n",
"|---|---|---|---|---|---|\n",
"| 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | \n",
"| 2 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | \n",
"| 4 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | \n",
"| 5 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | \n",
"| 6 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | \n",
"| 7 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | \n",
"\n",
"\n"
],
"text/plain": [
" q1A q1B q1C q1D q1E q2B q3B q3C q3E q4B q4C q4D q4E\n",
"1 0 1 0 0 0 1 0 1 0 0 0 1 0 \n",
"2 0 0 1 0 0 1 0 0 1 0 1 0 0 \n",
"4 0 1 0 0 0 1 0 0 1 0 0 0 0 \n",
"5 0 0 1 0 0 1 0 1 0 1 0 0 0 \n",
"6 0 1 0 0 0 1 0 1 0 0 0 1 0 \n",
"7 0 0 0 0 1 1 0 0 1 0 0 1 0 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create dummy vars for each answer\n",
"options(na.action='na.pass')\n",
"d_dummy <- as.data.frame(model.matrix( ~ . - 1, data=d))\n",
"data <- d_dummy[complete.cases(d_dummy),]\n",
"\n",
"# Visualize the dimensions of the data\n",
"print (paste0(\"Columns with all their elements = 0 : \",\n",
" names(data[, colSums(data!=0)<=0])))\n",
"\n",
"# Delete columns with all the answers = 0\n",
"data <- data[, colSums(data != 0) > 0]\n",
"\n",
"# Read the dimensions of the dummy var with no NAs\n",
"n_rows <- dim(data)[1]\n",
"n_cols <- dim(data)[2]\n",
"print(paste0(\"dummy cols: \", n_cols, \" rows: \", n_rows))\n",
"\n",
"# Create the input matrix and the response vector\n",
"x <- as.matrix(data[1:n_rows, 1:n_cols-1])\n",
"y <- data[1:n_rows, n_cols]\n",
"\n",
"# Show the dummy vars, making the table smaller for convenience\n",
"head(data[,1:13])"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Los resultados tras crear las variables dummy y eliminar las columnas cuyos valores eran todos cero (recordemos que en el enunciado se dice que por lo menos un alumno ha acertado, lo que implica que si todo son ceros, esa respuesta no será la correcta) nos devuelve una nueva matriz con 81 variables de entrada correspondientes a las variables dummy generadas y una variable respuesta. Además de un total de 20 observaciones de las 23 originales, por lo tanto, tres alumnos han sido eliminados dado que sus respuestas contenian *NAs*"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Feature selection \n",
"\n",
"Para intentar obtener un patrón de respuestas correcto, planteamos el uso de algún tipo de regresión penalizada que reduzca el valor de los coeficientes. Por esta vía se podrían emplear la regresión *Ridge* que penaliza usando la norma $L_2$ o la regresión *Lasso* que penaliza la norma $L_1$. Para este particular problema será de interés la regresión Lasso, dado que la Ridge no \"elimina\" coeficientes, resultando en que todos se incluyan en el modelo o ninguno este incluido (si la penalización es realmente grande). Como era de esperar, se ha explorado la regresión Ridge y el resultado ha sido insatisfactorio."
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Uso de Lasso\n",
"Finalmente, decidimos hacer uso de la regresión Lasso que, recordemos, usa la norma $L_1$. Para la selección del modelo hacemos uso de validación cruzada, con tantos folds como número de observaciones (alumnos) tenemos en nuestros datos. "
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, :\n",
"\"There were missing values in resampled performance measures.\""
]
},
{
"data": {},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] 0.998989\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAANlBMVEUAAAAAgP9NTU1oaGh8\nfHyMjIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHm5ubp6enw8PD////lZQhBAAAACXBIWXMA\nABJ0AAASdAHeZh94AAAgAElEQVR4nO2diZbavBIGPTBrZuX9XzbDrMCwWHJ3q5f6zj03mfzB\npba7IiMETBtCyOJMowdASIYgEiECQSRCBIJIhAgEkQgRCCIRIhBEIkQgiESIQBCJEIEgEiEC\nQSRCBIJIhAgEkQgRCCIRIhBEIkQgiESIQBCJEIEgEiECQSRCBIJIhAgEkQgRCCIRIhBEIkQg\niESIQBCJEIEgEiECQSRCBIJIhAgEkQgRCCIRIhBEIkQgiESIQBCJEIEgEiECQSRCBIJIhAgE\nkQgRCCIRIhBEIkQgiESIQBCJEIEgEiECQSRCBIJIhAgEkQgRCCIRIhBEIkQgY0UaSh8Jp/Bs\ncEQqx6bwaMd2TqefirERKR+cwrPBEakcm8KjHds5nX4qxkakfHAKzwZHpHJsCo92bOd0+qkY\nG5HywSk8G1zh2BMh4eNBpPl/9UWeHgNO4c7hiBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO\n4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuGIFANO\n4c7hiBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO4YgU\nA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuGIFANO4c7h\niBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07h\nzuGIFANO4c7hsUS6upKnzw/9VIydVaR3jV5GqkQ/FWOnFWnrEiLVgkcpPJBIV+8avYw0iX4q\nxk4s0tXI50n0UzF2UpE+TbraIFIleJTCQ4n0HfkhzAr9VIydVaQNItWDRyk8mkgbRKoFj1J4\nNJFGTkn0UzF2WpE2H8vfiFQJHqXwYCJ93duNMYl+KsbOK9LY5Qb6qRg7u0ijXpOln4qxE4v0\nMvLejn4qxs4t0rh7O/qpGDu9SIM2gdNPxdiZRfpabhiy4Y5+KsYuINKQKYl+KsZOLdLAFXD6\n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\n7F6TEEkl4fspIlyI/SMRIn2EfqoGl2J3zUmIpJIM/RQOLsf+mo9aTEIkleTop2BwQXb7nIRI\nKknSTweCwT4AAAZqSURBVLHgkuxmkxBJJVn6KRRclN1qEiKpJE0/RYLLshtNQiSV5OmnQHBh\ndptJiKSSRP0UBy7NbjIJkVSSqZ/CwOXZDS/NIpJKcvVTELiaSHMmJURSSa5+CgLXYM9+aRaR\nVJKtn0LAlUSad3eHSCrJ1k8h4CrsuSYhkkrS9VMEuBJ75+5OBo5IMeAULpxfk2TgiBQDTuHS\nmbNyh0gqSdlP3uF67BkmIZJKcvaTc7giG5EGJWk/+YZrsi+ahEgqydpPruEmIp0yCZFUkrWf\nXMNV2ZdMQiSVpO0nz3Bd9oXXZRFJJXn7yTHcQqSTJiGSSvL2k2O4MvvbouMmIZJKEveTX7g2\n+3Cv0O6zppbPkkSkGHAK18renLT3XqWrzct8lRApBpzCtbK7E/wwLxtEUkjqfvIKN2CfsOjz\n/m6uSYgUA07hijltEiJpJHs/uYSbsE/MRz8rEDOCSDHgFK6aExax2KCS/P3kEG7EZkYyTIF+\n8ge3Yh+oc/X5vIlVO41U6Cd3cDv2/gzUOCEhUkNq9JMz+DD215Q0N4gUA07h9tm+IDs7iBQD\nTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuGI\nFANO4c7hiBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO\n4YYiTe9ZesgopzUVm8JnxE6k6eSDEck3m8JnxEyk6fSjEck3m8JnxPg5EiIFZFP4jIwTafrN\nCyHBs9POBiLxHCkim8JnxHZGQqSIbAqfEVORTjwWkXyzKXxGLEU69VBE8s2m8BmxfEFW4JBR\nTmsqNoXPiO0LsosPGeW0pmJT+IzYvSB7emkQkXyzKXxG2LQaA07hzuGIFANO4c7hiBQDTuHO\n4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuGIFANO4c7hiBQDTuHO4YgUA07hzuEuRCIk\nfByIFIU+Ek7h2eCIVI5N4dGO7ZxOPxVjI1I+OIVngyNSOTaFRzu2czr9VIyNSPngFJ4Njkjl\n2BQe7djO6fRTMTYi5YNTeDb4WJEISRJEIkQgiESIQBCJEIEgEiECQSRCBIJIhAgEkQgRCCIR\nIhBEIkQgY0Ta+3CJjk+aEIVb0g9pppWPPOtDr/jeeVaCDxFp2gXv/ZAcfoizlXjjpHDrK753\nnrXgI0Sadsl7PySHH+Im6152Ubj1Fd87z2rw2iJt/v5gyJ7MJ4WDsz6SbVs5IunCN39/MGQP\nFcn0ecp+4fa3doikDB/KHvA05fes28IP/wUZt9iASCrwkezJlu3nORIzkizTi0iDennEM4WN\nC5HsFxsQSRtuSj5QqPPD2kXgiKRHMIwnkUzrH3lbiUi68BEi7d8kW98x/4GPYlvzR571oVd8\nD6cFHyLSz7LNtPvDALj17dV+4Rvj0z/yrA+94nsTUaYtQoRkCyIRIhBEIkQgiESIQBCJEIEg\nEiECQSRCBIJIhAgEkQgRCCIRIhBEIkQgiESIQBCJEIEgEiECQSRCBIJIhAgEkQgRCCIRIhBE\nIkQgiESIQBDJXaaZH3n3+PmXDUZELofr4C4zRVp/fSaOxZDIxXAd3GWmGyjkKlwNd0GkiOFq\nuMvu9zROb+vp5v3p0M00re4+/+xuNV2/ft0Afv/lh/W0fvh8wOvNtLofMOrqQSR32RPp3aC7\nzf3nc6YPk663v1u97Yn08WfT9ccDVtvfYpJ5EMlddtYa3u14+/jl32bz7+NP/m3/5Hbr1PSz\n2PBvWj1vnlfbv/TxgIdpPbSAkkEkd9kT6Wn3z9//72b7J2/Talekm2m7Ev64nZI+H8DTJ/tw\nyt1l79bu6zevj/fXX2rt/7ff50k7v0Uk+3DK3eWISNc7c9T+f0MkJ+GUu8tfkW6n9cPjKyJ5\nDqfcXf6K9PHL69cC3ennSDeINC6ccnc5JtLT5vnzOdLDdlnu7nPV7nVzZNXu4AjEKJxyd/kr\n0t3XOt52Re77daTNevqZl3ZfRzo4AjEKp9xdjiw23L5r8vRx7/Zh1c12Lnpa/97gPax+djYc\nHIEYhVNOiEAQiRCBIBIhAkEkQgSCSIQIBJEIEQgiESIQRCJEIIhEiEAQiRCBIBIhAkEkQgSC\nSIQIBJEIEQgiESIQRCJEIIhEiEAQiRCBIBIhAkEkQgTyHysmkdV3uToJAAAAAElFTkSuQmCC\n",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Especify the parameters to do cross-validation\n",
"trainctr<-trainControl(method=\"cv\", number=n_rows)\n",
"\n",
"# Start the CV process\n",
"larsTune<-train(x, y, method=\"lars\",\n",
" tuneGrid=data.frame(.fraction=seq(0.00001, 0.99999, length=1000)),\n",
" trControl=trainctr, normalize=FALSE, intercept=FALSE,\n",
" type=\"lasso\")\n",
"\n",
"# Plot a graph with the obtained results\n",
"plot(larsTune)\n",
"\n",
"# Find the best fraction\n",
"bestfraction = larsTune$bestTune$fraction\n",
"print (bestfraction)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"El resultado obtenido muestra como cuando el valor de *Fraction* (s) es proximo a 1 (0.998989) el error del modelo es el mínimo.\n",
"\n",
"Creamos el modelo Lasso con todos los datos, y mostramos el error obtenido en forma de suma de cuadrados residuales (RSS)."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th></th><th scope=col>Df</th><th scope=col>Rss</th><th scope=col>Cp</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><th scope=row>26</th><td>18 </td><td>3.496775e+00</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>27</th><td>19 </td><td>3.325350e+00</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>28</th><td>20 </td><td>1.145819e+00</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>29</th><td>19 </td><td>5.388520e-01</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>30</th><td>20 </td><td>3.266912e-01</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>31</th><td>19 </td><td>2.134229e-01</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>32</th><td>20 </td><td>1.344535e-26</td><td>NaN </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lll}\n",
" & Df & Rss & Cp\\\\\n",
"\\hline\n",
"\t26 & 18 & 3.496775e+00 & NaN \\\\\n",
"\t27 & 19 & 3.325350e+00 & NaN \\\\\n",
"\t28 & 20 & 1.145819e+00 & NaN \\\\\n",
"\t29 & 19 & 5.388520e-01 & NaN \\\\\n",
"\t30 & 20 & 3.266912e-01 & NaN \\\\\n",
"\t31 & 19 & 2.134229e-01 & NaN \\\\\n",
"\t32 & 20 & 1.344535e-26 & NaN \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| <!--/--> | Df | Rss | Cp | \n",
"|---|---|---|---|---|---|---|\n",
"| 26 | 18 | 3.496775e+00 | NaN | \n",
"| 27 | 19 | 3.325350e+00 | NaN | \n",
"| 28 | 20 | 1.145819e+00 | NaN | \n",
"| 29 | 19 | 5.388520e-01 | NaN | \n",
"| 30 | 20 | 3.266912e-01 | NaN | \n",
"| 31 | 19 | 2.134229e-01 | NaN | \n",
"| 32 | 20 | 1.344535e-26 | NaN | \n",
"\n",
"\n"
],
"text/plain": [
" Df Rss Cp \n",
"26 18 3.496775e+00 NaN\n",
"27 19 3.325350e+00 NaN\n",
"28 20 1.145819e+00 NaN\n",
"29 19 5.388520e-01 NaN\n",
"30 20 3.266912e-01 NaN\n",
"31 19 2.134229e-01 NaN\n",
"32 20 1.344535e-26 NaN"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Fit the model and show its last iterations\n",
"lars.model<-lars(x, y,\n",
" type=\"lasso\",\n",
" normalize=F, \n",
" intercept=F, \n",
" max.steps=300)\n",
"tail(summary(lars.model), 7)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Obtenemos los coeficientes del modelo ajustado con menor error, en este caso se trata de la iteración 32 que tiene un total de 20 variables no nulas. Mostramos los coeficientes y el valor del *fraction* del modelo."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"get.exam.answers <- function(solution, sol){\n",
" names <- as.numeric(substrLeft(solution,1))\n",
" answer <- substrRight(solution,1)\n",
" exam.answers <- NULL\n",
" j <- 1\n",
" for (i in 1:25){\n",
" if (i %in% names){\n",
" exam.answers <- c(exam.answers, answer[j])\n",
" j <- j + 1\n",
" }\n",
" else{\n",
" exam.answers <- c(exam.answers, sol[i])\n",
" }\n",
" }\n",
" names(exam.answers) = paste0('q',1:25)\n",
" exam.answers\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 \n",
"\"C\" \"B\" \"C\" \"D\" \"A\" \"D\" \"E\" \"C\" \"D\" \"E\" \"A\" \"A\" \"B\" \"B\" \"B\" \"A\" \"D\" \"B\" \"C\" \"B\" \n",
"q21 q22 q23 q24 q25 \n",
"\"C\" \"E\" \"B\" \"C\" \"B\" \n",
" [1] \"q1C\" \"q2B\" \"q3C\" \"q4D\" \"q7E\" \"q8C\" \"q9D\" \"q10E\" \"q13B\" \"q14B\"\n",
"[11] \"q15B\" \"q17D\" \"q19C\" \"q20B\" \"q21C\" \"q22E\" \"q23B\" \"q24C\" \"q25B\"\n"
]
},
{
"data": {
"text/html": [
"'Diferencia de resultado por estudiante:'"
],
"text/latex": [
"'Diferencia de resultado por estudiante:'"
],
"text/markdown": [
"'Diferencia de resultado por estudiante:'"
],
"text/plain": [
"[1] \"Diferencia de resultado por estudiante:\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-2</li>\n",
"\t<li>-1</li>\n",
"\t<li>1</li>\n",
"\t<li>-2</li>\n",
"\t<li>-1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-2</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 0\n",
"\\item -1\n",
"\\item -1\n",
"\\item -1\n",
"\\item -1\n",
"\\item -2\n",
"\\item -1\n",
"\\item 1\n",
"\\item -2\n",
"\\item -1\n",
"\\item 1\n",
"\\item 0\n",
"\\item -1\n",
"\\item 0\n",
"\\item -1\n",
"\\item 0\n",
"\\item -1\n",
"\\item 0\n",
"\\item -1\n",
"\\item 0\n",
"\\item -1\n",
"\\item -1\n",
"\\item -2\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 0\n",
"2. -1\n",
"3. -1\n",
"4. -1\n",
"5. -1\n",
"6. -2\n",
"7. -1\n",
"8. 1\n",
"9. -2\n",
"10. -1\n",
"11. 1\n",
"12. 0\n",
"13. -1\n",
"14. 0\n",
"15. -1\n",
"16. 0\n",
"17. -1\n",
"18. 0\n",
"19. -1\n",
"20. 0\n",
"21. -1\n",
"22. -1\n",
"23. -2\n",
"\n",
"\n"
],
"text/plain": [
" [1] 0 -1 -1 -1 -1 -2 -1 1 -2 -1 1 0 -1 0 -1 0 -1 0 -1 0 -1 -1 -2"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"'Diferencia total:'"
],
"text/latex": [
"'Diferencia total:'"
],
"text/markdown": [
"'Diferencia total:'"
],
"text/plain": [
"[1] \"Diferencia total:\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"20"
],
"text/latex": [
"20"
],
"text/markdown": [
"20"
],
"text/plain": [
"[1] 20"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Obtain the coefficients of the fitted model together with its fraction value.\n",
"val <- predict(lars.model, x, type=\"coefficients\")\n",
"fraction <- val$fraction[32]\n",
"coef.na.deleted <- val$coefficients[32,]\n",
"answer.na.deleted <- names(coef.na.deleted)[coef.na.deleted>0]\n",
"na.deleted <- get.exam.answers(answer.na.deleted,\n",
" solmod)\n",
"print(na.deleted)\n",
"\n",
"print(answer.na.deleted)\n",
"scores_guess = get_scores(correct_answers = na.deleted)\n",
"\"Diferencia de resultado por estudiante:\"\n",
"scores_real - scores_guess\n",
"\"Diferencia total:\"\n",
"sum(abs(scores_real - scores_guess))"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Obteniendo solo los coeficientes que tienen valor positivo somos capaces de obtener un patrón con 19 posibles respuestas al examen. Sustituyendo los valores faltantes por la respuesta con mayor frecuencia en cada pregunta obtenemos un patrón que da como máximo dos respuestas de error. A priori, podría pensarse que este modelo acierta 23 de las 25 preguntas."
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Uso de maquinas de vector-soporte\n",
"Uso de máquinas de vector soporte para encontrar el patrón de respuestas correcto"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"Parameter tuning of 'svm':\n",
"\n",
"- sampling method: 3-fold cross validation \n",
"\n",
"- best parameters:\n",
" gamma cost epsilon kernel\n",
" 0.0078125 1 0 linear\n",
"\n",
"- best performance: 3.692778 \n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"library(e1071)\n",
"obj <- tune(svm, total ~ ., data = data, \n",
" ranges = list(gamma = 2^(-7:3),\n",
" cost = 2^(-3:5),\n",
" epsilon = seq(0, 1, length=15),\n",
" kernel = \"linear\",\n",
" type=\"eps-regression\"),\n",
" tunecontrol = tune.control(sampling = \"cross\", cross=3),\n",
" seed = seed,\n",
" scale=F\n",
" )\n",
"obj\n"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" [1] \"q1C\" \"q3C\" \"q4B\" \"q4C\" \"q4D\" \"q6B\" \"q6D\" \"q6E\" \"q7C\" \"q7E\" \n",
"[11] \"q8C\" \"q9D\" \"q10B\" \"q10D\" \"q10E\" \"q13B\" \"q14B\" \"q15B\" \"q15D\" \"q16C\"\n",
"[21] \"q16E\" \"q17D\" \"q18B\" \"q18E\" \"q19C\" \"q19E\" \"q20B\" \"q20C\" \"q20E\" \"q21B\"\n",
"[31] \"q21C\" \"q22B\" \"q22E\" \"q23B\" \"q23E\" \"q24B\" \"q24C\" \"q24E\" \"q25B\"\n"
]
}
],
"source": [
"model <- svm(total ~ ., data=data, \n",
" kernel=\"linear\",\n",
" gamma = 0.0078125,\n",
" cost = 1,\n",
" epsilon = 0,\n",
" scale=F,\n",
" type=\"eps-regression\")\n",
"coef.svm <- t(model$coefs) %*%model$SV\n",
"print (colnames(coef.svm)[coef.svm>0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Random Forest\n"
]
},
{
"cell_type": "code",
"execution_count": 181,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"Call:\n",
" randomForest(formula = total ~ ., data = data, importance = TRUE, nPerm = 2, mtry = 25, ntree = 5000) \n",
" Type of random forest: regression\n",
" Number of trees: 5000\n",
"No. of variables tried at each split: 25\n",
"\n",
" Mean of squared residuals: 6.773305\n",
" % Var explained: 25.82"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'q10E'</li>\n",
"\t<li>'q22E'</li>\n",
"\t<li>'q4E'</li>\n",
"\t<li>'q10C'</li>\n",
"\t<li>'q18C'</li>\n",
"\t<li>'q8C'</li>\n",
"\t<li>'q24C'</li>\n",
"\t<li>'q21C'</li>\n",
"\t<li>'q16C'</li>\n",
"\t<li>'q3C'</li>\n",
"\t<li>'q2B'</li>\n",
"\t<li>'q19C'</li>\n",
"\t<li>'q14B'</li>\n",
"\t<li>'q11D'</li>\n",
"\t<li>'q11E'</li>\n",
"\t<li>'q1B'</li>\n",
"\t<li>'q23B'</li>\n",
"\t<li>'q15B'</li>\n",
"\t<li>'q8E'</li>\n",
"\t<li>'q18B'</li>\n",
"\t<li>'q20E'</li>\n",
"\t<li>'q10B'</li>\n",
"\t<li>'q4D'</li>\n",
"\t<li>'q17D'</li>\n",
"\t<li>'q21D'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'q10E'\n",
"\\item 'q22E'\n",
"\\item 'q4E'\n",
"\\item 'q10C'\n",
"\\item 'q18C'\n",
"\\item 'q8C'\n",
"\\item 'q24C'\n",
"\\item 'q21C'\n",
"\\item 'q16C'\n",
"\\item 'q3C'\n",
"\\item 'q2B'\n",
"\\item 'q19C'\n",
"\\item 'q14B'\n",
"\\item 'q11D'\n",
"\\item 'q11E'\n",
"\\item 'q1B'\n",
"\\item 'q23B'\n",
"\\item 'q15B'\n",
"\\item 'q8E'\n",
"\\item 'q18B'\n",
"\\item 'q20E'\n",
"\\item 'q10B'\n",
"\\item 'q4D'\n",
"\\item 'q17D'\n",
"\\item 'q21D'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'q10E'\n",
"2. 'q22E'\n",
"3. 'q4E'\n",
"4. 'q10C'\n",
"5. 'q18C'\n",
"6. 'q8C'\n",
"7. 'q24C'\n",
"8. 'q21C'\n",
"9. 'q16C'\n",
"10. 'q3C'\n",
"11. 'q2B'\n",
"12. 'q19C'\n",
"13. 'q14B'\n",
"14. 'q11D'\n",
"15. 'q11E'\n",
"16. 'q1B'\n",
"17. 'q23B'\n",
"18. 'q15B'\n",
"19. 'q8E'\n",
"20. 'q18B'\n",
"21. 'q20E'\n",
"22. 'q10B'\n",
"23. 'q4D'\n",
"24. 'q17D'\n",
"25. 'q21D'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"q10E\" \"q22E\" \"q4E\" \"q10C\" \"q18C\" \"q8C\" \"q24C\" \"q21C\" \"q16C\" \"q3C\" \n",
"[11] \"q2B\" \"q19C\" \"q14B\" \"q11D\" \"q11E\" \"q1B\" \"q23B\" \"q15B\" \"q8E\" \"q18B\"\n",
"[21] \"q20E\" \"q10B\" \"q4D\" \"q17D\" \"q21D\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'q10E'</li>\n",
"\t<li>'q22E'</li>\n",
"\t<li>'q10C'</li>\n",
"\t<li>'q4E'</li>\n",
"\t<li>'q21C'</li>\n",
"\t<li>'q3C'</li>\n",
"\t<li>'q19C'</li>\n",
"\t<li>'q8C'</li>\n",
"\t<li>'q24C'</li>\n",
"\t<li>'q11D'</li>\n",
"\t<li>'q10B'</li>\n",
"\t<li>'q18B'</li>\n",
"\t<li>'q8E'</li>\n",
"\t<li>'q15B'</li>\n",
"\t<li>'q4D'</li>\n",
"\t<li>'q21D'</li>\n",
"\t<li>'q14B'</li>\n",
"\t<li>'q16B'</li>\n",
"\t<li>'q25D'</li>\n",
"\t<li>'q25C'</li>\n",
"\t<li>'q9C'</li>\n",
"\t<li>'q17B'</li>\n",
"\t<li>'q12D'</li>\n",
"\t<li>'q18D'</li>\n",
"\t<li>'q13B'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'q10E'\n",
"\\item 'q22E'\n",
"\\item 'q10C'\n",
"\\item 'q4E'\n",
"\\item 'q21C'\n",
"\\item 'q3C'\n",
"\\item 'q19C'\n",
"\\item 'q8C'\n",
"\\item 'q24C'\n",
"\\item 'q11D'\n",
"\\item 'q10B'\n",
"\\item 'q18B'\n",
"\\item 'q8E'\n",
"\\item 'q15B'\n",
"\\item 'q4D'\n",
"\\item 'q21D'\n",
"\\item 'q14B'\n",
"\\item 'q16B'\n",
"\\item 'q25D'\n",
"\\item 'q25C'\n",
"\\item 'q9C'\n",
"\\item 'q17B'\n",
"\\item 'q12D'\n",
"\\item 'q18D'\n",
"\\item 'q13B'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'q10E'\n",
"2. 'q22E'\n",
"3. 'q10C'\n",
"4. 'q4E'\n",
"5. 'q21C'\n",
"6. 'q3C'\n",
"7. 'q19C'\n",
"8. 'q8C'\n",
"9. 'q24C'\n",
"10. 'q11D'\n",
"11. 'q10B'\n",
"12. 'q18B'\n",
"13. 'q8E'\n",
"14. 'q15B'\n",
"15. 'q4D'\n",
"16. 'q21D'\n",
"17. 'q14B'\n",
"18. 'q16B'\n",
"19. 'q25D'\n",
"20. 'q25C'\n",
"21. 'q9C'\n",
"22. 'q17B'\n",
"23. 'q12D'\n",
"24. 'q18D'\n",
"25. 'q13B'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"q10E\" \"q22E\" \"q10C\" \"q4E\" \"q21C\" \"q3C\" \"q19C\" \"q8C\" \"q24C\" \"q11D\"\n",
"[11] \"q10B\" \"q18B\" \"q8E\" \"q15B\" \"q4D\" \"q21D\" \"q14B\" \"q16B\" \"q25D\" \"q25C\"\n",
"[21] \"q9C\" \"q17B\" \"q12D\" \"q18D\" \"q13B\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"library(randomForest)\n",
"fit <- randomForest(total ~ .,\n",
" data=data, \n",
" importance=TRUE,\n",
" nPerm=2,\n",
" mtry=25,\n",
" ntree=5000)\n",
"fit\n",
"imp <- as.data.frame(fit$importance)\n",
"\n",
"imp.sorted <- imp[order(-imp['IncNodePurity']),]\n",
"rownames(imp.sorted[1:25,])\n",
"imp.sorted <- imp[order(-imp['%IncMSE']),]\n",
"rownames(imp.sorted[1:25,])"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Boosting methods"
]
},
{
"cell_type": "code",
"execution_count": 204,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'call'</li>\n",
"\t<li>'params'</li>\n",
"\t<li>'callbacks'</li>\n",
"\t<li>'evaluation_log'</li>\n",
"\t<li>'niter'</li>\n",
"\t<li>'folds'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'call'\n",
"\\item 'params'\n",
"\\item 'callbacks'\n",
"\\item 'evaluation\\_log'\n",
"\\item 'niter'\n",
"\\item 'folds'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'call'\n",
"2. 'params'\n",
"3. 'callbacks'\n",
"4. 'evaluation_log'\n",
"5. 'niter'\n",
"6. 'folds'\n",
"\n",
"\n"
],
"text/plain": [
"[1] \"call\" \"params\" \"callbacks\" \"evaluation_log\"\n",
"[5] \"niter\" \"folds\" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>iter</th><th scope=col>train_rmse_mean</th><th scope=col>train_rmse_std</th><th scope=col>test_rmse_mean</th><th scope=col>test_rmse_std</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>20 </td><td>0.00386060 </td><td>2.537191e-03</td><td>2.048255 </td><td>1.126467 </td></tr>\n",
"\t<tr><td>21 </td><td>0.00283360 </td><td>1.943153e-03</td><td>2.048228 </td><td>1.126368 </td></tr>\n",
"\t<tr><td>22 </td><td>0.00210150 </td><td>1.477531e-03</td><td>2.048224 </td><td>1.126370 </td></tr>\n",
"\t<tr><td>23 </td><td>0.00158265 </td><td>1.115964e-03</td><td>2.048224 </td><td>1.126406 </td></tr>\n",
"\t<tr><td>24 </td><td>0.00121800 </td><td>8.258347e-04</td><td>2.048239 </td><td>1.126381 </td></tr>\n",
"\t<tr><td>25 </td><td>0.00095550 </td><td>5.973987e-04</td><td>2.048265 </td><td>1.126388 </td></tr>\n",
"\t<tr><td>26 </td><td>0.00078915 </td><td>4.240827e-04</td><td>2.048268 </td><td>1.126395 </td></tr>\n",
"\t<tr><td>27 </td><td>0.00068490 </td><td>2.920000e-04</td><td>2.048243 </td><td>1.126376 </td></tr>\n",
"\t<tr><td>28 </td><td>0.00060925 </td><td>1.980209e-04</td><td>2.048201 </td><td>1.126373 </td></tr>\n",
"\t<tr><td>29 </td><td>0.00057450 </td><td>1.480708e-04</td><td>2.048216 </td><td>1.126385 </td></tr>\n",
"\t<tr><td>30 </td><td>0.00054005 </td><td>1.109723e-04</td><td>2.048205 </td><td>1.126383 </td></tr>\n",
"\t<tr><td>31 </td><td>0.00052640 </td><td>8.095950e-05</td><td>2.048169 </td><td>1.126380 </td></tr>\n",
"\t<tr><td>32 </td><td>0.00051395 </td><td>5.771263e-05</td><td>2.048139 </td><td>1.126339 </td></tr>\n",
"\t<tr><td>33 </td><td>0.00051360 </td><td>5.732748e-05</td><td>2.048136 </td><td>1.126337 </td></tr>\n",
"\t<tr><td>34 </td><td>0.00051345 </td><td>5.719657e-05</td><td>2.048135 </td><td>1.126336 </td></tr>\n",
"\t<tr><td>35 </td><td>0.00051350 </td><td>5.721145e-05</td><td>2.048134 </td><td>1.126336 </td></tr>\n",
"\t<tr><td>36 </td><td>0.00051345 </td><td>5.721755e-05</td><td>2.048134 </td><td>1.126336 </td></tr>\n",
"\t<tr><td>37 </td><td>0.00051345 </td><td>5.720007e-05</td><td>2.048134 </td><td>1.126336 </td></tr>\n",
"\t<tr><td>38 </td><td>0.00051350 </td><td>5.721058e-05</td><td>2.048134 </td><td>1.126335 </td></tr>\n",
"\t<tr><td>39 </td><td>0.00051350 </td><td>5.721058e-05</td><td>2.048134 </td><td>1.126335 </td></tr>\n",
"\t<tr><td>40 </td><td>0.00051350 </td><td>5.721058e-05</td><td>2.048134 </td><td>1.126335 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllll}\n",
" iter & train\\_rmse\\_mean & train\\_rmse\\_std & test\\_rmse\\_mean & test\\_rmse\\_std\\\\\n",
"\\hline\n",
"\t 20 & 0.00386060 & 2.537191e-03 & 2.048255 & 1.126467 \\\\\n",
"\t 21 & 0.00283360 & 1.943153e-03 & 2.048228 & 1.126368 \\\\\n",
"\t 22 & 0.00210150 & 1.477531e-03 & 2.048224 & 1.126370 \\\\\n",
"\t 23 & 0.00158265 & 1.115964e-03 & 2.048224 & 1.126406 \\\\\n",
"\t 24 & 0.00121800 & 8.258347e-04 & 2.048239 & 1.126381 \\\\\n",
"\t 25 & 0.00095550 & 5.973987e-04 & 2.048265 & 1.126388 \\\\\n",
"\t 26 & 0.00078915 & 4.240827e-04 & 2.048268 & 1.126395 \\\\\n",
"\t 27 & 0.00068490 & 2.920000e-04 & 2.048243 & 1.126376 \\\\\n",
"\t 28 & 0.00060925 & 1.980209e-04 & 2.048201 & 1.126373 \\\\\n",
"\t 29 & 0.00057450 & 1.480708e-04 & 2.048216 & 1.126385 \\\\\n",
"\t 30 & 0.00054005 & 1.109723e-04 & 2.048205 & 1.126383 \\\\\n",
"\t 31 & 0.00052640 & 8.095950e-05 & 2.048169 & 1.126380 \\\\\n",
"\t 32 & 0.00051395 & 5.771263e-05 & 2.048139 & 1.126339 \\\\\n",
"\t 33 & 0.00051360 & 5.732748e-05 & 2.048136 & 1.126337 \\\\\n",
"\t 34 & 0.00051345 & 5.719657e-05 & 2.048135 & 1.126336 \\\\\n",
"\t 35 & 0.00051350 & 5.721145e-05 & 2.048134 & 1.126336 \\\\\n",
"\t 36 & 0.00051345 & 5.721755e-05 & 2.048134 & 1.126336 \\\\\n",
"\t 37 & 0.00051345 & 5.720007e-05 & 2.048134 & 1.126336 \\\\\n",
"\t 38 & 0.00051350 & 5.721058e-05 & 2.048134 & 1.126335 \\\\\n",
"\t 39 & 0.00051350 & 5.721058e-05 & 2.048134 & 1.126335 \\\\\n",
"\t 40 & 0.00051350 & 5.721058e-05 & 2.048134 & 1.126335 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"iter | train_rmse_mean | train_rmse_std | test_rmse_mean | test_rmse_std | \n",
"|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n",
"| 20 | 0.00386060 | 2.537191e-03 | 2.048255 | 1.126467 | \n",
"| 21 | 0.00283360 | 1.943153e-03 | 2.048228 | 1.126368 | \n",
"| 22 | 0.00210150 | 1.477531e-03 | 2.048224 | 1.126370 | \n",
"| 23 | 0.00158265 | 1.115964e-03 | 2.048224 | 1.126406 | \n",
"| 24 | 0.00121800 | 8.258347e-04 | 2.048239 | 1.126381 | \n",
"| 25 | 0.00095550 | 5.973987e-04 | 2.048265 | 1.126388 | \n",
"| 26 | 0.00078915 | 4.240827e-04 | 2.048268 | 1.126395 | \n",
"| 27 | 0.00068490 | 2.920000e-04 | 2.048243 | 1.126376 | \n",
"| 28 | 0.00060925 | 1.980209e-04 | 2.048201 | 1.126373 | \n",
"| 29 | 0.00057450 | 1.480708e-04 | 2.048216 | 1.126385 | \n",
"| 30 | 0.00054005 | 1.109723e-04 | 2.048205 | 1.126383 | \n",
"| 31 | 0.00052640 | 8.095950e-05 | 2.048169 | 1.126380 | \n",
"| 32 | 0.00051395 | 5.771263e-05 | 2.048139 | 1.126339 | \n",
"| 33 | 0.00051360 | 5.732748e-05 | 2.048136 | 1.126337 | \n",
"| 34 | 0.00051345 | 5.719657e-05 | 2.048135 | 1.126336 | \n",
"| 35 | 0.00051350 | 5.721145e-05 | 2.048134 | 1.126336 | \n",
"| 36 | 0.00051345 | 5.721755e-05 | 2.048134 | 1.126336 | \n",
"| 37 | 0.00051345 | 5.720007e-05 | 2.048134 | 1.126336 | \n",
"| 38 | 0.00051350 | 5.721058e-05 | 2.048134 | 1.126335 | \n",
"| 39 | 0.00051350 | 5.721058e-05 | 2.048134 | 1.126335 | \n",
"| 40 | 0.00051350 | 5.721058e-05 | 2.048134 | 1.126335 | \n",
"\n",
"\n"
],
"text/plain": [
" iter train_rmse_mean train_rmse_std test_rmse_mean test_rmse_std\n",
"1 20 0.00386060 2.537191e-03 2.048255 1.126467 \n",
"2 21 0.00283360 1.943153e-03 2.048228 1.126368 \n",
"3 22 0.00210150 1.477531e-03 2.048224 1.126370 \n",
"4 23 0.00158265 1.115964e-03 2.048224 1.126406 \n",
"5 24 0.00121800 8.258347e-04 2.048239 1.126381 \n",
"6 25 0.00095550 5.973987e-04 2.048265 1.126388 \n",
"7 26 0.00078915 4.240827e-04 2.048268 1.126395 \n",
"8 27 0.00068490 2.920000e-04 2.048243 1.126376 \n",
"9 28 0.00060925 1.980209e-04 2.048201 1.126373 \n",
"10 29 0.00057450 1.480708e-04 2.048216 1.126385 \n",
"11 30 0.00054005 1.109723e-04 2.048205 1.126383 \n",
"12 31 0.00052640 8.095950e-05 2.048169 1.126380 \n",
"13 32 0.00051395 5.771263e-05 2.048139 1.126339 \n",
"14 33 0.00051360 5.732748e-05 2.048136 1.126337 \n",
"15 34 0.00051345 5.719657e-05 2.048135 1.126336 \n",
"16 35 0.00051350 5.721145e-05 2.048134 1.126336 \n",
"17 36 0.00051345 5.721755e-05 2.048134 1.126336 \n",
"18 37 0.00051345 5.720007e-05 2.048134 1.126336 \n",
"19 38 0.00051350 5.721058e-05 2.048134 1.126335 \n",
"20 39 0.00051350 5.721058e-05 2.048134 1.126335 \n",
"21 40 0.00051350 5.721058e-05 2.048134 1.126335 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"library(xgboost)\n",
"# seq(0, 1, length=15)\n",
"cv <- xgb.cv(data = x, label=y, nrounds = 40, nfold = 20, \n",
" metrics = list(\"rmse\"),\n",
" max_depth = 10, \n",
" eta = 0.5, \n",
" objective = \"reg:linear\",\n",
" verbose = F)\n",
"# print(cv)\n",
"names(cv)\n",
"cv$evaluation_log[20:40]"
]
},
{
"cell_type": "code",
"execution_count": 221,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1]\ttrain-rmse:6.126499 \n",
"[40]\ttrain-rmse:0.000522 \n"
]
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'q4E'</li>\n",
"\t<li>'q10C'</li>\n",
"\t<li>'q22E'</li>\n",
"\t<li>'q10E'</li>\n",
"\t<li>'q18D'</li>\n",
"\t<li>'q8C'</li>\n",
"\t<li>'q21C'</li>\n",
"\t<li>'q13B'</li>\n",
"\t<li>'q14B'</li>\n",
"\t<li>'q11C'</li>\n",
"\t<li>'q4D'</li>\n",
"\t<li>'q6D'</li>\n",
"\t<li>'q9C'</li>\n",
"\t<li>'q4C'</li>\n",
"\t<li>'q3E'</li>\n",
"\t<li>'q17B'</li>\n",
"\t<li>'q1B'</li>\n",
"\t<li>'q1E'</li>\n",
"\t<li>'q5C'</li>\n",
"\t<li>'q3C'</li>\n",
"\t<li>'q1D'</li>\n",
"\t<li>'q5B'</li>\n",
"\t<li>'q19E'</li>\n",
"\t<li>'q19C'</li>\n",
"\t<li>'q20B'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'q4E'\n",
"\\item 'q10C'\n",
"\\item 'q22E'\n",
"\\item 'q10E'\n",
"\\item 'q18D'\n",
"\\item 'q8C'\n",
"\\item 'q21C'\n",
"\\item 'q13B'\n",
"\\item 'q14B'\n",
"\\item 'q11C'\n",
"\\item 'q4D'\n",
"\\item 'q6D'\n",
"\\item 'q9C'\n",
"\\item 'q4C'\n",
"\\item 'q3E'\n",
"\\item 'q17B'\n",
"\\item 'q1B'\n",
"\\item 'q1E'\n",
"\\item 'q5C'\n",
"\\item 'q3C'\n",
"\\item 'q1D'\n",
"\\item 'q5B'\n",
"\\item 'q19E'\n",
"\\item 'q19C'\n",
"\\item 'q20B'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'q4E'\n",
"2. 'q10C'\n",
"3. 'q22E'\n",
"4. 'q10E'\n",
"5. 'q18D'\n",
"6. 'q8C'\n",
"7. 'q21C'\n",
"8. 'q13B'\n",
"9. 'q14B'\n",
"10. 'q11C'\n",
"11. 'q4D'\n",
"12. 'q6D'\n",
"13. 'q9C'\n",
"14. 'q4C'\n",
"15. 'q3E'\n",
"16. 'q17B'\n",
"17. 'q1B'\n",
"18. 'q1E'\n",
"19. 'q5C'\n",
"20. 'q3C'\n",
"21. 'q1D'\n",
"22. 'q5B'\n",
"23. 'q19E'\n",
"24. 'q19C'\n",
"25. 'q20B'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"q4E\" \"q10C\" \"q22E\" \"q10E\" \"q18D\" \"q8C\" \"q21C\" \"q13B\" \"q14B\" \"q11C\"\n",
"[11] \"q4D\" \"q6D\" \"q9C\" \"q4C\" \"q3E\" \"q17B\" \"q1B\" \"q1E\" \"q5C\" \"q3C\" \n",
"[21] \"q1D\" \"q5B\" \"q19E\" \"q19C\" \"q20B\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"xgb <- xgboost(data = x, \n",
" label = y,\n",
" eta = 0.5,\n",
" max_depth = 10, \n",
" nround=40, \n",
" eval_metric = \"rmse\",\n",
" objective = \"reg:linear\",\n",
" print_every_n = 500,\n",
")\n",
"coef <- xgb.importance(colnames(x), model = xgb)\n",
"zz <- (coef[1:25])\n",
"zz$Feature"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Cambio de valores nulos\n",
"Hasta ahora hemos ajustado el modelo ignorando las observaciones que tenían alguna respuesta con valor nulo. Sin embargo, estos valores pueden ser de utilidad en nuestro modelo.\n",
"\n",
"### Sustituir nulos por su valor esperado\n",
"Podemos sustituir los valores nulos por el valor esperado de respuesta. Considerando que el patrón de respuesta correcto corresponde a las letras más respondidas en cada pregunta. Dado que asumimos que el alumno esta respondiendo correctamente por cada NA que ha olvidado, el número total de respuestas acertadas variará en función de los valores nulos."
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"d.noNA <- d\n",
"\n",
"# Get the number of NAs by row and add them to the total\n",
"d.noNA$total <- d.noNA$total + rowSums(is.na(d.noNA))\n",
"\n",
"# Change the NA values for its expected answer according to solmod\n",
"for (i in 1:(ncol(d.noNA)-1)){\n",
" d.noNA[,i][is.na(d.noNA[,i])] <- solmod[i]\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"#### Variables dummy\n",
"\n",
"De nuevo creamos las variables dummy necesarias con el nuevo dataframe."
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] \"Columns with all their elements = 0 : \"\n",
"[1] \"dummy cols: 85 rows: 23\"\n"
]
},
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>q1A</th><th scope=col>q1B</th><th scope=col>q1C</th><th scope=col>q1D</th><th scope=col>q1E</th><th scope=col>q2B</th><th scope=col>q3B</th><th scope=col>q3C</th><th scope=col>q3E</th><th scope=col>q4B</th><th scope=col>q4C</th><th scope=col>q4D</th><th scope=col>q4E</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllllllll}\n",
" q1A & q1B & q1C & q1D & q1E & q2B & q3B & q3C & q3E & q4B & q4C & q4D & q4E\\\\\n",
"\\hline\n",
"\t 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0\\\\\n",
"\t 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0\\\\\n",
"\t 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0\\\\\n",
"\t 0 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\\\\n",
"\t 0 & 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0\\\\\n",
"\t 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"q1A | q1B | q1C | q1D | q1E | q2B | q3B | q3C | q3E | q4B | q4C | q4D | q4E | \n",
"|---|---|---|---|---|---|\n",
"| 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | \n",
"| 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | \n",
"| 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | \n",
"| 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | \n",
"| 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | \n",
"| 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | \n",
"\n",
"\n"
],
"text/plain": [
" q1A q1B q1C q1D q1E q2B q3B q3C q3E q4B q4C q4D q4E\n",
"1 0 1 0 0 0 1 0 1 0 0 0 1 0 \n",
"2 0 0 1 0 0 1 0 0 1 0 1 0 0 \n",
"3 0 1 0 0 0 1 0 1 0 0 0 1 0 \n",
"4 0 1 0 0 0 1 0 0 1 0 0 0 0 \n",
"5 0 0 1 0 0 1 0 1 0 1 0 0 0 \n",
"6 0 1 0 0 0 1 0 1 0 0 0 1 0 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create dummy vars for each answer\n",
"options(na.action='na.pass')\n",
"d_dummy <- as.data.frame(model.matrix( ~ . - 1, data=d.noNA))\n",
"data <- d_dummy[complete.cases(d_dummy),]\n",
"\n",
"# Visualize the dimensions of the data\n",
"print (paste0(\"Columns with all their elements = 0 : \",\n",
" names(data[, colSums(data!=0)<=0])))\n",
"\n",
"# Delete columns with all the answers = 0\n",
"data <- data[, colSums(data != 0) > 0]\n",
"\n",
"# Read the dimensions of the dummy var with no NAs\n",
"n_rows <- dim(data)[1]\n",
"n_cols <- dim(data)[2]\n",
"print(paste0(\"dummy cols: \", n_cols, \" rows: \", n_rows))\n",
"\n",
"# Create the input matrix and the response vector\n",
"x <- as.matrix(data[1:n_rows, 1:n_cols-1])\n",
"y <- data[1:n_rows, n_cols]\n",
"\n",
"# Show the dummy vars, making the table smaller for convenience\n",
"head(data[,1:13])"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Debido a los cambios, vemos como ningúna columna tiene todos sus elementos igual a 0. Ahora tenemos un total de 85 columnas y 23 filas correspondientes al total de alumnos.\n",
"\n",
"#### Entrenar el nuevo modelo\n",
"Con los nuevos datos obtenidos habrá que entrenar un modelo siguiendo los pasos explicados anteriormente."
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, :\n",
"\"There were missing values in resampled performance measures.\""
]
},
{
"data": {},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] 0.842836\n"
]
},
{
"data": {
"image/png": "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\nkNYN7f4qAAAAAElFTkSuQmCC",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Especify the parameters to do cross-validation\n",
"trainctr<-trainControl(method=\"cv\", number=n_rows)\n",
"\n",
"# Start the CV process\n",
"larsTune<-train(x, y, method=\"lars\",\n",
" tuneGrid=data.frame(.fraction=seq(0.00001, 0.99999, length=1000)),\n",
" trControl=trainctr, normalize=FALSE, intercept=FALSE,\n",
" type=\"lasso\")\n",
"\n",
"# Plot a graph with the obtained results\n",
"plot(larsTune)\n",
"\n",
"# Find the best fraction\n",
"bestfraction = larsTune$bestTune$fraction\n",
"print (bestfraction)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th></th><th scope=col>Df</th><th scope=col>Rss</th><th scope=col>Cp</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><th scope=row>31</th><td>21 </td><td>9.774118e-01</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>32</th><td>22 </td><td>2.832410e-01</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>33</th><td>23 </td><td>2.267655e-02</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>34</th><td>22 </td><td>1.493227e-02</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>35</th><td>23 </td><td>3.851946e-03</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>36</th><td>22 </td><td>2.718915e-03</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>37</th><td>23 </td><td>1.569044e-27</td><td>NaN </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lll}\n",
" & Df & Rss & Cp\\\\\n",
"\\hline\n",
"\t31 & 21 & 9.774118e-01 & NaN \\\\\n",
"\t32 & 22 & 2.832410e-01 & NaN \\\\\n",
"\t33 & 23 & 2.267655e-02 & NaN \\\\\n",
"\t34 & 22 & 1.493227e-02 & NaN \\\\\n",
"\t35 & 23 & 3.851946e-03 & NaN \\\\\n",
"\t36 & 22 & 2.718915e-03 & NaN \\\\\n",
"\t37 & 23 & 1.569044e-27 & NaN \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| <!--/--> | Df | Rss | Cp | \n",
"|---|---|---|---|---|---|---|\n",
"| 31 | 21 | 9.774118e-01 | NaN | \n",
"| 32 | 22 | 2.832410e-01 | NaN | \n",
"| 33 | 23 | 2.267655e-02 | NaN | \n",
"| 34 | 22 | 1.493227e-02 | NaN | \n",
"| 35 | 23 | 3.851946e-03 | NaN | \n",
"| 36 | 22 | 2.718915e-03 | NaN | \n",
"| 37 | 23 | 1.569044e-27 | NaN | \n",
"\n",
"\n"
],
"text/plain": [
" Df Rss Cp \n",
"31 21 9.774118e-01 NaN\n",
"32 22 2.832410e-01 NaN\n",
"33 23 2.267655e-02 NaN\n",
"34 22 1.493227e-02 NaN\n",
"35 23 3.851946e-03 NaN\n",
"36 22 2.718915e-03 NaN\n",
"37 23 1.569044e-27 NaN"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Fit the model and show its last iterations\n",
"lars.model<-lars(x, y,\n",
" type=\"lasso\",\n",
" normalize=F, \n",
" intercept=F, \n",
" max.steps=300)\n",
"tail(summary(lars.model), 7)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"'Penalizacion: 0.864864864864865'"
],
"text/latex": [
"'Penalizacion: 0.864864864864865'"
],
"text/markdown": [
"'Penalizacion: 0.864864864864865'"
],
"text/plain": [
"[1] \"Penalizacion: 0.864864864864865\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<dl class=dl-horizontal>\n",
"\t<dt>q23B</dt>\n",
"\t\t<dd>2.17168912768249</dd>\n",
"\t<dt>q23E</dt>\n",
"\t\t<dd>1.78097245706881</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description*}\n",
"\\item[q23B] 2.17168912768249\n",
"\\item[q23E] 1.78097245706881\n",
"\\end{description*}\n"
],
"text/markdown": [
"q23B\n",
": 2.17168912768249q23E\n",
": 1.78097245706881\n",
"\n"
],
"text/plain": [
" q23B q23E \n",
"2.171689 1.780972 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'q1C'</li>\n",
"\t<li>'q2B'</li>\n",
"\t<li>'q3C'</li>\n",
"\t<li>'q4D'</li>\n",
"\t<li>'q7E'</li>\n",
"\t<li>'q8C'</li>\n",
"\t<li>'q9D'</li>\n",
"\t<li>'q10E'</li>\n",
"\t<li>'q13B'</li>\n",
"\t<li>'q14B'</li>\n",
"\t<li>'q15B'</li>\n",
"\t<li>'q17D'</li>\n",
"\t<li>'q18C'</li>\n",
"\t<li>'q20B'</li>\n",
"\t<li>'q21C'</li>\n",
"\t<li>'q22E'</li>\n",
"\t<li>'q23B'</li>\n",
"\t<li>'q24C'</li>\n",
"\t<li>'q25B'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'q1C'\n",
"\\item 'q2B'\n",
"\\item 'q3C'\n",
"\\item 'q4D'\n",
"\\item 'q7E'\n",
"\\item 'q8C'\n",
"\\item 'q9D'\n",
"\\item 'q10E'\n",
"\\item 'q13B'\n",
"\\item 'q14B'\n",
"\\item 'q15B'\n",
"\\item 'q17D'\n",
"\\item 'q18C'\n",
"\\item 'q20B'\n",
"\\item 'q21C'\n",
"\\item 'q22E'\n",
"\\item 'q23B'\n",
"\\item 'q24C'\n",
"\\item 'q25B'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'q1C'\n",
"2. 'q2B'\n",
"3. 'q3C'\n",
"4. 'q4D'\n",
"5. 'q7E'\n",
"6. 'q8C'\n",
"7. 'q9D'\n",
"8. 'q10E'\n",
"9. 'q13B'\n",
"10. 'q14B'\n",
"11. 'q15B'\n",
"12. 'q17D'\n",
"13. 'q18C'\n",
"14. 'q20B'\n",
"15. 'q21C'\n",
"16. 'q22E'\n",
"17. 'q23B'\n",
"18. 'q24C'\n",
"19. 'q25B'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"q1C\" \"q2B\" \"q3C\" \"q4D\" \"q7E\" \"q8C\" \"q9D\" \"q10E\" \"q13B\" \"q14B\"\n",
"[11] \"q15B\" \"q17D\" \"q18C\" \"q20B\" \"q21C\" \"q22E\" \"q23B\" \"q24C\" \"q25B\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Obtain the coefficients of the fitted model together with its fraction value.\n",
"val <- predict(lars.model, x, type=\"coefficients\")\n",
"fraction <- val$fraction[33]\n",
"coef.na.correct <- val$coefficients[33,]\n",
"\n",
"paste0(\"Penalizacion: \", fraction)\n",
"# Find duplicate answer; get the one with the best coef.\n",
"coef.na.correct[coef.na.correct > 0][c(17, 18)]\n",
"coef.na.correct[coef.na.correct > 0][18] <- 0\n",
"answer.na.correct <- names(coef.na.correct)[coef.na.correct > 0]\n",
"answer.na.correct"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 \n",
"\"C\" \"B\" \"C\" \"D\" \"A\" \"D\" \"E\" \"C\" \"D\" \"E\" \"A\" \"A\" \"B\" \"B\" \"B\" \"A\" \"D\" \"C\" \"C\" \"B\" \n",
"q21 q22 q23 q24 q25 \n",
"\"C\" \"E\" \"B\" \"C\" \"B\" \n"
]
},
{
"data": {
"text/html": [
"'Diferencia de resultado por estudiante:'"
],
"text/latex": [
"'Diferencia de resultado por estudiante:'"
],
"text/markdown": [
"'Diferencia de resultado por estudiante:'"
],
"text/plain": [
"[1] \"Diferencia de resultado por estudiante:\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>1</li>\n",
"\t<li>-3</li>\n",
"\t<li>-1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-2</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>-2</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>-3</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 1\n",
"\\item -1\n",
"\\item -1\n",
"\\item -1\n",
"\\item -1\n",
"\\item -1\n",
"\\item -1\n",
"\\item 1\n",
"\\item -3\n",
"\\item -1\n",
"\\item 1\n",
"\\item 0\n",
"\\item -1\n",
"\\item -1\n",
"\\item -2\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item -2\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item -3\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 1\n",
"2. -1\n",
"3. -1\n",
"4. -1\n",
"5. -1\n",
"6. -1\n",
"7. -1\n",
"8. 1\n",
"9. -3\n",
"10. -1\n",
"11. 1\n",
"12. 0\n",
"13. -1\n",
"14. -1\n",
"15. -2\n",
"16. 1\n",
"17. 0\n",
"18. 0\n",
"19. -2\n",
"20. 1\n",
"21. 0\n",
"22. 0\n",
"23. -3\n",
"\n",
"\n"
],
"text/plain": [
" [1] 1 -1 -1 -1 -1 -1 -1 1 -3 -1 1 0 -1 -1 -2 1 0 0 -2 1 0 0 -3"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"'Diferencia total:'"
],
"text/latex": [
"'Diferencia total:'"
],
"text/markdown": [
"'Diferencia total:'"
],
"text/plain": [
"[1] \"Diferencia total:\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"24"
],
"text/latex": [
"24"
],
"text/markdown": [
"24"
],
"text/plain": [
"[1] 24"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"na.correct <- get.exam.answers(answer.na.correct,\n",
" solmod)\n",
"print(na.correct)\n",
"\n",
"scores_guess = get_scores(correct_answers = na.correct)\n",
"\"Diferencia de resultado por estudiante:\"\n",
"scores_real - scores_guess\n",
"\"Diferencia total:\"\n",
"sum(abs(scores_real - scores_guess))"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"### Sustituir nulos por 0 en variable dummy\n",
"Otra posible propuesta para hacer uso de los valores nulos sería el asumir que los NAs equivalen a una no respuesta en la variable dummy (a un 0). Lo que mantendría el total como al principio."
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] \"Columns with all their elements = 0 : \"\n",
"[1] \"dummy cols: 85 rows: 23\"\n"
]
},
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>q1A</th><th scope=col>q1B</th><th scope=col>q1C</th><th scope=col>q1D</th><th scope=col>q1E</th><th scope=col>q2B</th><th scope=col>q3B</th><th scope=col>q3C</th><th scope=col>q3E</th><th scope=col>q4B</th><th scope=col>q4C</th><th scope=col>q4D</th><th scope=col>q4E</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllllllll}\n",
" q1A & q1B & q1C & q1D & q1E & q2B & q3B & q3C & q3E & q4B & q4C & q4D & q4E\\\\\n",
"\\hline\n",
"\t 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0\\\\\n",
"\t 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0\\\\\n",
"\t 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0\\\\\n",
"\t 0 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\\\\n",
"\t 0 & 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0\\\\\n",
"\t 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"q1A | q1B | q1C | q1D | q1E | q2B | q3B | q3C | q3E | q4B | q4C | q4D | q4E | \n",
"|---|---|---|---|---|---|\n",
"| 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | \n",
"| 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | \n",
"| 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | \n",
"| 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | \n",
"| 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | \n",
"| 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | \n",
"\n",
"\n"
],
"text/plain": [
" q1A q1B q1C q1D q1E q2B q3B q3C q3E q4B q4C q4D q4E\n",
"1 0 1 0 0 0 1 0 1 0 0 0 1 0 \n",
"2 0 0 1 0 0 1 0 0 1 0 1 0 0 \n",
"3 0 1 0 0 0 1 0 1 0 0 0 1 0 \n",
"4 0 1 0 0 0 1 0 0 1 0 0 0 0 \n",
"5 0 0 1 0 0 1 0 1 0 1 0 0 0 \n",
"6 0 1 0 0 0 1 0 1 0 0 0 1 0 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create dummy vars for each answer\n",
"options(na.action='na.pass')\n",
"d_dummy <- as.data.frame(model.matrix( ~ . - 1, data=d))\n",
"# Change NA values to 0\n",
"d_dummy[is.na(d_dummy)] <- 0\n",
"data <- d_dummy[complete.cases(d_dummy),]\n",
"\n",
"# Visualize the dimensions of the data\n",
"print (paste0(\"Columns with all their elements = 0 : \",\n",
" names(data[, colSums(data!=0)<=0])))\n",
"\n",
"# Delete columns with all the answers = 0\n",
"data <- data[, colSums(data != 0) > 0]\n",
"\n",
"# Read the dimensions of the dummy var with no NAs\n",
"n_rows <- dim(data)[1]\n",
"n_cols <- dim(data)[2]\n",
"print(paste0(\"dummy cols: \", n_cols, \" rows: \", n_rows))\n",
"\n",
"# Create the input matrix and the response vector\n",
"x <- as.matrix(data[1:n_rows, 1:n_cols-1])\n",
"y <- data[1:n_rows, n_cols]\n",
"\n",
"# Show the dummy vars, making the table smaller for convenience\n",
"head(data[,1:13])"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, :\n",
"\"There were missing values in resampled performance measures.\""
]
},
{
"data": {},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] 0.9149066\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Especify the parameters to do cross-validation\n",
"trainctr<-trainControl(method=\"cv\", number=n_rows)\n",
"\n",
"# Start the CV process\n",
"larsTune<-train(x, y, method=\"lars\",\n",
" tuneGrid=data.frame(.fraction=seq(0.00001, 0.99999, length=1000)),\n",
" trControl=trainctr, normalize=FALSE, intercept=FALSE,\n",
" type=\"lasso\")\n",
"\n",
"# Plot a graph with the obtained results\n",
"plot(larsTune)\n",
"\n",
"# Find the best fraction\n",
"bestfraction = larsTune$bestTune$fraction\n",
"print (bestfraction)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th></th><th scope=col>Df</th><th scope=col>Rss</th><th scope=col>Cp</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><th scope=row>23</th><td>19 </td><td>1.397585e+00</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>24</th><td>20 </td><td>1.188700e+00</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>25</th><td>21 </td><td>1.763949e-01</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>26</th><td>22 </td><td>2.565588e-02</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>27</th><td>21 </td><td>2.124146e-02</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>28</th><td>22 </td><td>7.217103e-03</td><td>NaN </td></tr>\n",
"\t<tr><th scope=row>29</th><td>23 </td><td>2.210388e-27</td><td>NaN </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lll}\n",
" & Df & Rss & Cp\\\\\n",
"\\hline\n",
"\t23 & 19 & 1.397585e+00 & NaN \\\\\n",
"\t24 & 20 & 1.188700e+00 & NaN \\\\\n",
"\t25 & 21 & 1.763949e-01 & NaN \\\\\n",
"\t26 & 22 & 2.565588e-02 & NaN \\\\\n",
"\t27 & 21 & 2.124146e-02 & NaN \\\\\n",
"\t28 & 22 & 7.217103e-03 & NaN \\\\\n",
"\t29 & 23 & 2.210388e-27 & NaN \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| <!--/--> | Df | Rss | Cp | \n",
"|---|---|---|---|---|---|---|\n",
"| 23 | 19 | 1.397585e+00 | NaN | \n",
"| 24 | 20 | 1.188700e+00 | NaN | \n",
"| 25 | 21 | 1.763949e-01 | NaN | \n",
"| 26 | 22 | 2.565588e-02 | NaN | \n",
"| 27 | 21 | 2.124146e-02 | NaN | \n",
"| 28 | 22 | 7.217103e-03 | NaN | \n",
"| 29 | 23 | 2.210388e-27 | NaN | \n",
"\n",
"\n"
],
"text/plain": [
" Df Rss Cp \n",
"23 19 1.397585e+00 NaN\n",
"24 20 1.188700e+00 NaN\n",
"25 21 1.763949e-01 NaN\n",
"26 22 2.565588e-02 NaN\n",
"27 21 2.124146e-02 NaN\n",
"28 22 7.217103e-03 NaN\n",
"29 23 2.210388e-27 NaN"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Fit the model and show its last iterations\n",
"lars.model<-lars(x, y,\n",
" type=\"lasso\",\n",
" normalize=F, \n",
" intercept=F, \n",
" max.steps=300)\n",
"tail(summary(lars.model), 7)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"'Penalizacion: 0.96551724137931'"
],
"text/latex": [
"'Penalizacion: 0.96551724137931'"
],
"text/markdown": [
"'Penalizacion: 0.96551724137931'"
],
"text/plain": [
"[1] \"Penalizacion: 0.96551724137931\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<dl class=dl-horizontal>\n",
"\t<dt>q23B</dt>\n",
"\t\t<dd>1.3164236272091</dd>\n",
"\t<dt>q23E</dt>\n",
"\t\t<dd>1.95764120665057</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description*}\n",
"\\item[q23B] 1.3164236272091\n",
"\\item[q23E] 1.95764120665057\n",
"\\end{description*}\n"
],
"text/markdown": [
"q23B\n",
": 1.3164236272091q23E\n",
": 1.95764120665057\n",
"\n"
],
"text/plain": [
" q23B q23E \n",
"1.316424 1.957641 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'q1C'</li>\n",
"\t<li>'q2B'</li>\n",
"\t<li>'q3C'</li>\n",
"\t<li>'q4D'</li>\n",
"\t<li>'q6D'</li>\n",
"\t<li>'q7E'</li>\n",
"\t<li>'q8C'</li>\n",
"\t<li>'q9D'</li>\n",
"\t<li>'q10E'</li>\n",
"\t<li>'q13B'</li>\n",
"\t<li>'q14B'</li>\n",
"\t<li>'q15B'</li>\n",
"\t<li>'q18E'</li>\n",
"\t<li>'q20B'</li>\n",
"\t<li>'q21C'</li>\n",
"\t<li>'q22E'</li>\n",
"\t<li>'q23E'</li>\n",
"\t<li>'q24C'</li>\n",
"\t<li>'q25C'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'q1C'\n",
"\\item 'q2B'\n",
"\\item 'q3C'\n",
"\\item 'q4D'\n",
"\\item 'q6D'\n",
"\\item 'q7E'\n",
"\\item 'q8C'\n",
"\\item 'q9D'\n",
"\\item 'q10E'\n",
"\\item 'q13B'\n",
"\\item 'q14B'\n",
"\\item 'q15B'\n",
"\\item 'q18E'\n",
"\\item 'q20B'\n",
"\\item 'q21C'\n",
"\\item 'q22E'\n",
"\\item 'q23E'\n",
"\\item 'q24C'\n",
"\\item 'q25C'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'q1C'\n",
"2. 'q2B'\n",
"3. 'q3C'\n",
"4. 'q4D'\n",
"5. 'q6D'\n",
"6. 'q7E'\n",
"7. 'q8C'\n",
"8. 'q9D'\n",
"9. 'q10E'\n",
"10. 'q13B'\n",
"11. 'q14B'\n",
"12. 'q15B'\n",
"13. 'q18E'\n",
"14. 'q20B'\n",
"15. 'q21C'\n",
"16. 'q22E'\n",
"17. 'q23E'\n",
"18. 'q24C'\n",
"19. 'q25C'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"q1C\" \"q2B\" \"q3C\" \"q4D\" \"q6D\" \"q7E\" \"q8C\" \"q9D\" \"q10E\" \"q13B\"\n",
"[11] \"q14B\" \"q15B\" \"q18E\" \"q20B\" \"q21C\" \"q22E\" \"q23E\" \"q24C\" \"q25C\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Obtain the coefficients of the fitted model together with its fraction value.\n",
"val <- predict(lars.model, x, type=\"coefficients\")\n",
"fraction <- val$fraction[29]\n",
"coef.na.noanswer <- val$coefficients[29,]\n",
"\n",
"# fraction\n",
"# answers.na.noanswer\n",
"# length(answers.na.noanswer)\n",
"# coef.na.noanswer\n",
"\n",
"paste0(\"Penalizacion: \", fraction)\n",
"# Find duplicate answer; get the one with the best coef.\n",
"coef.na.noanswer[coef.na.noanswer > 0][c(17, 18)]\n",
"coef.na.noanswer[coef.na.noanswer > 0][17] <- 0\n",
"answer.na.noanswer <- names(coef.na.noanswer)[coef.na.noanswer > 0]\n",
"answer.na.noanswer\n"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 \n",
"\"C\" \"B\" \"C\" \"D\" \"A\" \"D\" \"E\" \"C\" \"D\" \"E\" \"A\" \"A\" \"B\" \"B\" \"B\" \"A\" \"D\" \"E\" \"C\" \"B\" \n",
"q21 q22 q23 q24 q25 \n",
"\"C\" \"E\" \"E\" \"C\" \"C\" \n"
]
},
{
"data": {
"text/html": [
"'Diferencia de resultado por estudiante:'"
],
"text/latex": [
"'Diferencia de resultado por estudiante:'"
],
"text/markdown": [
"'Diferencia de resultado por estudiante:'"
],
"text/plain": [
"[1] \"Diferencia de resultado por estudiante:\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-2</li>\n",
"\t<li>1</li>\n",
"\t<li>-1</li>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-2</li>\n",
"\t<li>-2</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>-1</li>\n",
"\t<li>1</li>\n",
"\t<li>-2</li>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>-2</li>\n",
"\t<li>-2</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 1\n",
"\\item -1\n",
"\\item -1\n",
"\\item -1\n",
"\\item -2\n",
"\\item 1\n",
"\\item -1\n",
"\\item 0\n",
"\\item -1\n",
"\\item 0\n",
"\\item 1\n",
"\\item -1\n",
"\\item -2\n",
"\\item -2\n",
"\\item 0\n",
"\\item 1\n",
"\\item -1\n",
"\\item 1\n",
"\\item -2\n",
"\\item 0\n",
"\\item -1\n",
"\\item -2\n",
"\\item -2\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 1\n",
"2. -1\n",
"3. -1\n",
"4. -1\n",
"5. -2\n",
"6. 1\n",
"7. -1\n",
"8. 0\n",
"9. -1\n",
"10. 0\n",
"11. 1\n",
"12. -1\n",
"13. -2\n",
"14. -2\n",
"15. 0\n",
"16. 1\n",
"17. -1\n",
"18. 1\n",
"19. -2\n",
"20. 0\n",
"21. -1\n",
"22. -2\n",
"23. -2\n",
"\n",
"\n"
],
"text/plain": [
" [1] 1 -1 -1 -1 -2 1 -1 0 -1 0 1 -1 -2 -2 0 1 -1 1 -2 0 -1 -2 -2"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"'Diferencia total:'"
],
"text/latex": [
"'Diferencia total:'"
],
"text/markdown": [
"'Diferencia total:'"
],
"text/plain": [
"[1] \"Diferencia total:\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"25"
],
"text/latex": [
"25"
],
"text/markdown": [
"25"
],
"text/plain": [
"[1] 25"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"na.noanswer <- get.exam.answers(answer.na.noanswe,\n",
" solmod)\n",
"print(na.noanswer)\n",
"\n",
"scores_guess = get_scores(correct_answers = na.noanswer)\n",
"\"Diferencia de resultado por estudiante:\"\n",
"scores_real - scores_guess\n",
"\"Diferencia total:\"\n",
"sum(abs(scores_real - scores_guess))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": true
},
"outputs": [
{
"ename": "ERROR",
"evalue": "Error in coef > 0: comparison (6) is possible only for atomic and list types\n",
"output_type": "error",
"traceback": [
"Error in coef > 0: comparison (6) is possible only for atomic and list types\nTraceback:\n"
]
}
],
"source": [
"val<-coef.lars(lars.model,s=0.9149066,mode=\"lambda\")\n",
"length(names(val)[val > 0])\n",
"val"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Combinacion de las tres respuestas"
]
},
{
"cell_type": "code",
"execution_count": 294,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'q1C'</li>\n",
"\t<li>'q2B'</li>\n",
"\t<li>'q3C'</li>\n",
"\t<li>'q4D'</li>\n",
"\t<li>'q7E'</li>\n",
"\t<li>'q8C'</li>\n",
"\t<li>'q9D'</li>\n",
"\t<li>'q10E'</li>\n",
"\t<li>'q13B'</li>\n",
"\t<li>'q14B'</li>\n",
"\t<li>'q15B'</li>\n",
"\t<li>'q17D'</li>\n",
"\t<li>'q19C'</li>\n",
"\t<li>'q20B'</li>\n",
"\t<li>'q21C'</li>\n",
"\t<li>'q22E'</li>\n",
"\t<li>'q23B'</li>\n",
"\t<li>'q24C'</li>\n",
"\t<li>'q25B'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'q1C'\n",
"\\item 'q2B'\n",
"\\item 'q3C'\n",
"\\item 'q4D'\n",
"\\item 'q7E'\n",
"\\item 'q8C'\n",
"\\item 'q9D'\n",
"\\item 'q10E'\n",
"\\item 'q13B'\n",
"\\item 'q14B'\n",
"\\item 'q15B'\n",
"\\item 'q17D'\n",
"\\item 'q19C'\n",
"\\item 'q20B'\n",
"\\item 'q21C'\n",
"\\item 'q22E'\n",
"\\item 'q23B'\n",
"\\item 'q24C'\n",
"\\item 'q25B'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'q1C'\n",
"2. 'q2B'\n",
"3. 'q3C'\n",
"4. 'q4D'\n",
"5. 'q7E'\n",
"6. 'q8C'\n",
"7. 'q9D'\n",
"8. 'q10E'\n",
"9. 'q13B'\n",
"10. 'q14B'\n",
"11. 'q15B'\n",
"12. 'q17D'\n",
"13. 'q19C'\n",
"14. 'q20B'\n",
"15. 'q21C'\n",
"16. 'q22E'\n",
"17. 'q23B'\n",
"18. 'q24C'\n",
"19. 'q25B'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"q1C\" \"q2B\" \"q3C\" \"q4D\" \"q7E\" \"q8C\" \"q9D\" \"q10E\" \"q13B\" \"q14B\"\n",
"[11] \"q15B\" \"q17D\" \"q19C\" \"q20B\" \"q21C\" \"q22E\" \"q23B\" \"q24C\" \"q25B\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"answer.na.deleted"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>NA deleted</th><th scope=col>NA correct</th><th scope=col>NA noanswer</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>q1C </td><td>q1C </td><td>q1C </td></tr>\n",
"\t<tr><td>q2B </td><td>q2B </td><td>q2B </td></tr>\n",
"\t<tr><td>q3C </td><td>q3C </td><td>q3C </td></tr>\n",
"\t<tr><td>q4D </td><td>q4D </td><td>q4D </td></tr>\n",
"\t<tr><td>q7E </td><td>q7E </td><td>q6D </td></tr>\n",
"\t<tr><td>q8C </td><td>q8C </td><td>q7E </td></tr>\n",
"\t<tr><td>q9D </td><td>q9D </td><td>q8C </td></tr>\n",
"\t<tr><td>q10E</td><td>q10E</td><td>q9D </td></tr>\n",
"\t<tr><td>q13B</td><td>q13B</td><td>q10E</td></tr>\n",
"\t<tr><td>q14B</td><td>q14B</td><td>q13B</td></tr>\n",
"\t<tr><td>q15B</td><td>q15B</td><td>q14B</td></tr>\n",
"\t<tr><td>q17D</td><td>q17D</td><td>q15B</td></tr>\n",
"\t<tr><td>q19C</td><td>q18C</td><td>q18E</td></tr>\n",
"\t<tr><td>q20B</td><td>q20B</td><td>q20B</td></tr>\n",
"\t<tr><td>q21C</td><td>q21C</td><td>q21C</td></tr>\n",
"\t<tr><td>q22E</td><td>q22E</td><td>q22E</td></tr>\n",
"\t<tr><td>q23B</td><td>q23B</td><td>q23E</td></tr>\n",
"\t<tr><td>q24C</td><td>q24C</td><td>q24C</td></tr>\n",
"\t<tr><td>q25B</td><td>q25B</td><td>q25C</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{lll}\n",
" NA deleted & NA correct & NA noanswer\\\\\n",
"\\hline\n",
"\t q1C & q1C & q1C \\\\\n",
"\t q2B & q2B & q2B \\\\\n",
"\t q3C & q3C & q3C \\\\\n",
"\t q4D & q4D & q4D \\\\\n",
"\t q7E & q7E & q6D \\\\\n",
"\t q8C & q8C & q7E \\\\\n",
"\t q9D & q9D & q8C \\\\\n",
"\t q10E & q10E & q9D \\\\\n",
"\t q13B & q13B & q10E\\\\\n",
"\t q14B & q14B & q13B\\\\\n",
"\t q15B & q15B & q14B\\\\\n",
"\t q17D & q17D & q15B\\\\\n",
"\t q19C & q18C & q18E\\\\\n",
"\t q20B & q20B & q20B\\\\\n",
"\t q21C & q21C & q21C\\\\\n",
"\t q22E & q22E & q22E\\\\\n",
"\t q23B & q23B & q23E\\\\\n",
"\t q24C & q24C & q24C\\\\\n",
"\t q25B & q25B & q25C\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"NA deleted | NA correct | NA noanswer | \n",
"|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n",
"| q1C | q1C | q1C | \n",
"| q2B | q2B | q2B | \n",
"| q3C | q3C | q3C | \n",
"| q4D | q4D | q4D | \n",
"| q7E | q7E | q6D | \n",
"| q8C | q8C | q7E | \n",
"| q9D | q9D | q8C | \n",
"| q10E | q10E | q9D | \n",
"| q13B | q13B | q10E | \n",
"| q14B | q14B | q13B | \n",
"| q15B | q15B | q14B | \n",
"| q17D | q17D | q15B | \n",
"| q19C | q18C | q18E | \n",
"| q20B | q20B | q20B | \n",
"| q21C | q21C | q21C | \n",
"| q22E | q22E | q22E | \n",
"| q23B | q23B | q23E | \n",
"| q24C | q24C | q24C | \n",
"| q25B | q25B | q25C | \n",
"\n",
"\n"
],
"text/plain": [
" NA deleted NA correct NA noanswer\n",
" [1,] q1C q1C q1C \n",
" [2,] q2B q2B q2B \n",
" [3,] q3C q3C q3C \n",
" [4,] q4D q4D q4D \n",
" [5,] q7E q7E q6D \n",
" [6,] q8C q8C q7E \n",
" [7,] q9D q9D q8C \n",
" [8,] q10E q10E q9D \n",
" [9,] q13B q13B q10E \n",
"[10,] q14B q14B q13B \n",
"[11,] q15B q15B q14B \n",
"[12,] q17D q17D q15B \n",
"[13,] q19C q18C q18E \n",
"[14,] q20B q20B q20B \n",
"[15,] q21C q21C q21C \n",
"[16,] q22E q22E q22E \n",
"[17,] q23B q23B q23E \n",
"[18,] q24C q24C q24C \n",
"[19,] q25B q25B q25C "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<dl class=dl-horizontal>\n",
"\t<dt>q15B</dt>\n",
"\t\t<dd>0.405000252976477</dd>\n",
"\t<dt>q17D</dt>\n",
"\t\t<dd>0.650966134792978</dd>\n",
"\t<dt>q18C</dt>\n",
"\t\t<dd>0.883282362550575</dd>\n",
"\t<dt>q20B</dt>\n",
"\t\t<dd>0.852396321261187</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description*}\n",
"\\item[q15B] 0.405000252976477\n",
"\\item[q17D] 0.650966134792978\n",
"\\item[q18C] 0.883282362550575\n",
"\\item[q20B] 0.852396321261187\n",
"\\end{description*}\n"
],
"text/markdown": [
"q15B\n",
": 0.405000252976477q17D\n",
": 0.650966134792978q18C\n",
": 0.883282362550575q20B\n",
": 0.852396321261187\n",
"\n"
],
"text/plain": [
" q15B q17D q18C q20B \n",
"0.4050003 0.6509661 0.8832824 0.8523963 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<dl class=dl-horizontal>\n",
"\t<dt>q14B</dt>\n",
"\t\t<dd>0.317515831930991</dd>\n",
"\t<dt>q15B</dt>\n",
"\t\t<dd>0.792679359533573</dd>\n",
"\t<dt>q18E</dt>\n",
"\t\t<dd>0.258439612400519</dd>\n",
"\t<dt>q20B</dt>\n",
"\t\t<dd>0.881126596533996</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description*}\n",
"\\item[q14B] 0.317515831930991\n",
"\\item[q15B] 0.792679359533573\n",
"\\item[q18E] 0.258439612400519\n",
"\\item[q20B] 0.881126596533996\n",
"\\end{description*}\n"
],
"text/markdown": [
"q14B\n",
": 0.317515831930991q15B\n",
": 0.792679359533573q18E\n",
": 0.258439612400519q20B\n",
": 0.881126596533996\n",
"\n"
],
"text/plain": [
" q14B q15B q18E q20B \n",
"0.3175158 0.7926794 0.2584396 0.8811266 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 \n",
"\"C\" \"B\" \"C\" \"D\" \"A\" \"D\" \"E\" \"C\" \"D\" \"E\" \"A\" \"A\" \"B\" \"B\" \"B\" \"A\" \"D\" \"E\" \"C\" \"B\" \n",
"q21 q22 q23 q24 q25 \n",
"\"C\" \"E\" \"E\" \"C\" \"C\" \n"
]
},
{
"data": {
"text/html": [
"'Diferencia de resultado por estudiante:'"
],
"text/latex": [
"'Diferencia de resultado por estudiante:'"
],
"text/markdown": [
"'Diferencia de resultado por estudiante:'"
],
"text/plain": [
"[1] \"Diferencia de resultado por estudiante:\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-2</li>\n",
"\t<li>1</li>\n",
"\t<li>-1</li>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>-1</li>\n",
"\t<li>-2</li>\n",
"\t<li>-2</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>-1</li>\n",
"\t<li>1</li>\n",
"\t<li>-2</li>\n",
"\t<li>0</li>\n",
"\t<li>-1</li>\n",
"\t<li>-2</li>\n",
"\t<li>-2</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 1\n",
"\\item -1\n",
"\\item -1\n",
"\\item -1\n",
"\\item -2\n",
"\\item 1\n",
"\\item -1\n",
"\\item 0\n",
"\\item -1\n",
"\\item 0\n",
"\\item 1\n",
"\\item -1\n",
"\\item -2\n",
"\\item -2\n",
"\\item 0\n",
"\\item 1\n",
"\\item -1\n",
"\\item 1\n",
"\\item -2\n",
"\\item 0\n",
"\\item -1\n",
"\\item -2\n",
"\\item -2\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 1\n",
"2. -1\n",
"3. -1\n",
"4. -1\n",
"5. -2\n",
"6. 1\n",
"7. -1\n",
"8. 0\n",
"9. -1\n",
"10. 0\n",
"11. 1\n",
"12. -1\n",
"13. -2\n",
"14. -2\n",
"15. 0\n",
"16. 1\n",
"17. -1\n",
"18. 1\n",
"19. -2\n",
"20. 0\n",
"21. -1\n",
"22. -2\n",
"23. -2\n",
"\n",
"\n"
],
"text/plain": [
" [1] 1 -1 -1 -1 -2 1 -1 0 -1 0 1 -1 -2 -2 0 1 -1 1 -2 0 -1 -2 -2"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"'Diferencia total:'"
],
"text/latex": [
"'Diferencia total:'"
],
"text/markdown": [
"'Diferencia total:'"
],
"text/plain": [
"[1] \"Diferencia total:\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"25"
],
"text/latex": [
"25"
],
"text/markdown": [
"25"
],
"text/plain": [
"[1] 25"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tab <- (cbind(answer.na.deleted, answer.na.correct, answer.na.noanswer))\n",
"colnames(tab) <- c(\"NA deleted\", \"NA correct\", \"NA noanswer\")\n",
"tab\n",
"coef.na.correct[coef.na.correct>0][11:14]\n",
"coef.na.noanswer[coef.na.noanswer>0][11:14]\n",
"\n",
"new_sol <- c(answer.na.deleted[1:4],\n",
" answer.na.noanswer[5],\n",
" answer.na.deleted[5:12],\n",
" answer.na.correct[13],\n",
" answer.na.deleted[13:19]\n",
" )\n",
"new_sol <- get.exam.answers(new_sol,\n",
" solmod)\n",
"print(na.noanswer)\n",
"\n",
"scores_guess = get_scores(correct_answers = na.noanswer)\n",
"\"Diferencia de resultado por estudiante:\"\n",
"scores_real - scores_guess\n",
"\"Diferencia total:\"\n",
"sum(abs(scores_real - scores_guess))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"print_names <- function(coefs, clamping=0) {\n",
" names(coefs[coefs>clamping])\n",
"}\n",
"print (sol)\n",
"# print_names(coef.na.noanswer)\n",
"# print_names(coef.na.correct)\n",
"# print_names(coef.na.deleted)\n",
"\n",
"w <- coef.na.noanswer + coef.na.correct + coef.na.deleted\n",
"w <- w/3"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Random forest para selección de variables"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>0.217399742438867</li>\n",
"\t<li>0.10315919113193</li>\n",
"\t<li>0.05825561364189</li>\n",
"\t<li>0.048071612599722</li>\n",
"\t<li>0.0425507748196266</li>\n",
"\t<li>0.0408918251331436</li>\n",
"\t<li>0.0301370039084309</li>\n",
"\t<li>0.023702151531134</li>\n",
"\t<li>0.0227558957013513</li>\n",
"\t<li>0.0214606440267389</li>\n",
"\t<li>0.0191836659339674</li>\n",
"\t<li>0.0187806070669771</li>\n",
"\t<li>0.0182442440277188</li>\n",
"\t<li>0.0179963150392818</li>\n",
"\t<li>0.0172522250569795</li>\n",
"\t<li>0.016021227871493</li>\n",
"\t<li>0.0150195167687727</li>\n",
"\t<li>0.0145640052362993</li>\n",
"\t<li>0.0144605995254125</li>\n",
"\t<li>0.014444990800135</li>\n",
"\t<li>0.0134067627973492</li>\n",
"\t<li>0.011988676797772</li>\n",
"\t<li>0.0111206889301591</li>\n",
"\t<li>0.0106117254892549</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 0.217399742438867\n",
"\\item 0.10315919113193\n",
"\\item 0.05825561364189\n",
"\\item 0.048071612599722\n",
"\\item 0.0425507748196266\n",
"\\item 0.0408918251331436\n",
"\\item 0.0301370039084309\n",
"\\item 0.023702151531134\n",
"\\item 0.0227558957013513\n",
"\\item 0.0214606440267389\n",
"\\item 0.0191836659339674\n",
"\\item 0.0187806070669771\n",
"\\item 0.0182442440277188\n",
"\\item 0.0179963150392818\n",
"\\item 0.0172522250569795\n",
"\\item 0.016021227871493\n",
"\\item 0.0150195167687727\n",
"\\item 0.0145640052362993\n",
"\\item 0.0144605995254125\n",
"\\item 0.014444990800135\n",
"\\item 0.0134067627973492\n",
"\\item 0.011988676797772\n",
"\\item 0.0111206889301591\n",
"\\item 0.0106117254892549\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 0.217399742438867\n",
"2. 0.10315919113193\n",
"3. 0.05825561364189\n",
"4. 0.048071612599722\n",
"5. 0.0425507748196266\n",
"6. 0.0408918251331436\n",
"7. 0.0301370039084309\n",
"8. 0.023702151531134\n",
"9. 0.0227558957013513\n",
"10. 0.0214606440267389\n",
"11. 0.0191836659339674\n",
"12. 0.0187806070669771\n",
"13. 0.0182442440277188\n",
"14. 0.0179963150392818\n",
"15. 0.0172522250569795\n",
"16. 0.016021227871493\n",
"17. 0.0150195167687727\n",
"18. 0.0145640052362993\n",
"19. 0.0144605995254125\n",
"20. 0.014444990800135\n",
"21. 0.0134067627973492\n",
"22. 0.011988676797772\n",
"23. 0.0111206889301591\n",
"24. 0.0106117254892549\n",
"\n",
"\n"
],
"text/plain": [
" [1] 0.21739974 0.10315919 0.05825561 0.04807161 0.04255077 0.04089183\n",
" [7] 0.03013700 0.02370215 0.02275590 0.02146064 0.01918367 0.01878061\n",
"[13] 0.01824424 0.01799632 0.01725223 0.01602123 0.01501952 0.01456401\n",
"[19] 0.01446060 0.01444499 0.01340676 0.01198868 0.01112069 0.01061173"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"require(randomForest)\n",
"\n",
"fit.rf = randomForest(total~., data=data)\n",
"vi <- importance(fit.rf)\n",
"w <- as.data.frame(vi/sum(vi))\n",
"w.ordered <- w[order(-w$IncNodePurity), , drop = FALSE]\n",
"w.ordered[w.ordered>0.01]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"library(randomForest)\n",
"library(mlbench)\n",
"library(caret)\n",
"\n",
"control <- trainControl(method=\"repeatedcv\", \n",
" number=20, \n",
" repeats=3,\n",
" search=\"random\")\n",
"mtry <- sqrt(ncol(x))\n",
"tunegrid <- expand.grid(.mtry=c(1:81))\n",
"rf_default <- train(total~., data=data, \n",
" method=\"rf\",\n",
" seed = seed,\n",
" metric=\"RMSE\",\n",
" importance=T,\n",
" tuneGrid=tunegrid,\n",
" tuneLength=15,\n",
" trControl=control)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"plot(rf_default)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"# names(rf_default)\n",
"rf <- randomForest(x, y, mtry = 44, importance=T)\n",
"vi <- varImp(rf)\n",
"\n",
"\n",
"\n",
"coef_names <- substrLeft(rownames(vi),1)\n",
"coef_answer <- substrRight(rownames(vi),1)\n",
"# colnames(d)\n",
"last_occur <- length(coef_names)-match(unique(coef_names),rev(coef_names))+1\n",
"# length(last_occur)\n",
"for (i in 1:1){\n",
" if (i==1){\n",
" idx <- which.max(vi[c(1:last_occur[1]),])\n",
" print (cbind(coef_names[idx], coef_answer[idx]))\n",
" }else{\n",
" \n",
" }\n",
"}\n"
]
},
{
"cell_type": "code",
"execution_count": 232,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message:\n",
"\"In seq.default(0, 1, size = 10) :\n",
" extra argument 'size' will be disregarded\""
]
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 0\n",
"\\item 1\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 0\n",
"2. 1\n",
"\n",
"\n"
],
"text/plain": [
"[1] 0 1"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"seq(0,1,size=10)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Gradient Bosting Models"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"gbmGrid <- expand.grid(interaction.depth = c(1, 5, 9), \n",
" n.trees = (1:30)*50, \n",
" shrinkage = seq(0.1,0.6,length=5),\n",
" n.minobsinnode = c(1,2,3,4))\n",
"fitControl <- trainControl(method = \"repeatedcv\",\n",
" number = 20,\n",
" repeats = 3)\n",
"gbmFit <- train(total ~ ., data = data, \n",
" method = \"gbm\", \n",
" trControl = fitControl, \n",
" verbose = FALSE, \n",
" tuneGrid = gbmGrid,\n",
" ## Specify which metric to optimize\n",
" metric = \"RMSE\")\n",
"gbmFit"
]
},
{
"cell_type": "code",
"execution_count": 272,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/plain": [
"gbm variable importance\n",
"\n",
" only 20 most important variables shown (out of 84)\n",
"\n",
" Overall\n",
"q4E 83.260\n",
"q10E 73.695\n",
"q3C 44.082\n",
"q21C 32.129\n",
"q10C 31.881\n",
"q22E 31.583\n",
"q8C 30.998\n",
"q12D 19.120\n",
"q4D 18.391\n",
"q12E 15.329\n",
"q6D 13.023\n",
"q24C 11.977\n",
"q1B 10.507\n",
"q23E 10.430\n",
"q20E 8.805\n",
"q17B 7.214\n",
"q17D 5.010\n",
"q5D 4.309\n",
"q8E 4.293\n",
"q14E 3.526"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# whichTwoPct <- tolerance(gbmFit$results, metric = \"RMSE\", \n",
"# maximize = F)\n",
"# whichTwoPct\n",
"# (gbmFit$results[whichTwoPct,])\n",
"bestfit<-(gbmFit$results[186,])\n",
"# predict(gbmFit, x, type=\"coefficients\")\n",
"varImp(gbmFit, scale=F)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Eliminación recursiva de variables\n",
"Uso de *random forest* para eliminar las variables de acuerdo a su importancia. En cada iteración se hace uso de N predictores. El algoritmo trata de buscar el valor óptimo de N."
]
},
{
"cell_type": "code",
"execution_count": 273,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message:\n",
"\"package 'mlbench' was built under R version 3.3.3\"Loading required package: Formula\n",
"\n",
"Attaching package: 'Hmisc'\n",
"\n",
"The following objects are masked from 'package:plyr':\n",
"\n",
" is.discrete, summarize\n",
"\n",
"The following object is masked from 'package:randomForest':\n",
"\n",
" combine\n",
"\n",
"The following object is masked from 'package:e1071':\n",
"\n",
" impute\n",
"\n",
"The following objects are masked from 'package:base':\n",
"\n",
" format.pval, round.POSIXt, trunc.POSIXt, units\n",
"\n"
]
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'q9E'</li>\n",
"\t<li>'q25E'</li>\n",
"\t<li>'q21B'</li>\n",
"\t<li>'q3B'</li>\n",
"\t<li>'q10D'</li>\n",
"\t<li>'q21E'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'q9E'\n",
"\\item 'q25E'\n",
"\\item 'q21B'\n",
"\\item 'q3B'\n",
"\\item 'q10D'\n",
"\\item 'q21E'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'q9E'\n",
"2. 'q25E'\n",
"3. 'q21B'\n",
"4. 'q3B'\n",
"5. 'q10D'\n",
"6. 'q21E'\n",
"\n",
"\n"
],
"text/plain": [
"[1] \"q9E\" \"q25E\" \"q21B\" \"q3B\" \"q10D\" \"q21E\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Loading required package: ipred\n",
"Warning message:\n",
"\"package 'ipred' was built under R version 3.3.3\"Loading required package: rpart\n"
]
},
{
"data": {
"text/plain": [
"\n",
"Recursive feature selection\n",
"\n",
"Outer resampling method: Cross-Validated (20 fold, repeated 1 times) \n",
"\n",
"Resampling performance over subset size:\n",
"\n",
" Variables RMSE Rsquared RMSESD RsquaredSD Selected\n",
" 1 2.136 1 1.700 NA \n",
" 2 2.302 1 1.818 0 \n",
" 3 2.290 1 1.814 0 \n",
" 4 2.275 1 1.903 0 \n",
" 5 2.337 1 1.897 0 \n",
" 6 2.287 1 1.835 0 \n",
" 7 2.275 1 1.890 0 \n",
" 8 2.190 1 1.751 0 \n",
" 9 2.232 1 1.856 0 \n",
" 10 2.214 1 1.893 0 \n",
" 11 2.157 1 1.906 0 \n",
" 12 2.274 1 1.974 0 \n",
" 13 2.283 1 2.076 0 \n",
" 14 2.323 1 1.996 0 \n",
" 15 2.194 1 1.830 0 \n",
" 16 2.339 1 1.795 0 \n",
" 17 2.213 1 1.802 0 \n",
" 18 2.263 1 1.927 0 \n",
" 19 2.163 1 1.869 0 \n",
" 20 2.112 1 2.009 0 *\n",
" 21 2.434 1 2.040 0 \n",
" 22 2.134 1 1.875 0 \n",
" 23 2.371 1 1.859 0 \n",
" 24 2.179 1 1.913 0 \n",
" 25 2.261 1 1.867 0 \n",
" 84 2.209 1 1.809 0 \n",
"\n",
"The top 5 variables (out of 20):\n",
" q22E, q3C, q10E, q19C, q24C\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"library(caret)\n",
"library(mlbench)\n",
"library(Hmisc)\n",
"library(randomForest)\n",
"\n",
"corr_mat <- cor(x)\n",
"too_high <- findCorrelation(corr_mat, cutoff = .9)\n",
"colnames(x[,too_high])\n",
"x.2 <- x[, -too_high]\n",
"\n",
"subsets <- c(1:25)\n",
"ctrl <- rfeControl(functions = treebagFuncs,\n",
" method = \"repeatedcv\",\n",
" number = 20,\n",
" verbose = FALSE)\n",
"rfProfile <- rfe(as.data.frame(x), y, sizes = subsets, rfeControl = ctrl)\n",
"rfProfile"
]
},
{
"cell_type": "code",
"execution_count": 278,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'q22E'</li>\n",
"\t<li>'q3C'</li>\n",
"\t<li>'q10E'</li>\n",
"\t<li>'q19C'</li>\n",
"\t<li>'q24C'</li>\n",
"\t<li>'q8C'</li>\n",
"\t<li>'q15B'</li>\n",
"\t<li>'q4D'</li>\n",
"\t<li>'q9C'</li>\n",
"\t<li>'q18B'</li>\n",
"\t<li>'q11D'</li>\n",
"\t<li>'q8E'</li>\n",
"\t<li>'q10C'</li>\n",
"\t<li>'q17D'</li>\n",
"\t<li>'q21D'</li>\n",
"\t<li>'q18C'</li>\n",
"\t<li>'q3E'</li>\n",
"\t<li>'q21C'</li>\n",
"\t<li>'q9D'</li>\n",
"\t<li>'q23B'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'q22E'\n",
"\\item 'q3C'\n",
"\\item 'q10E'\n",
"\\item 'q19C'\n",
"\\item 'q24C'\n",
"\\item 'q8C'\n",
"\\item 'q15B'\n",
"\\item 'q4D'\n",
"\\item 'q9C'\n",
"\\item 'q18B'\n",
"\\item 'q11D'\n",
"\\item 'q8E'\n",
"\\item 'q10C'\n",
"\\item 'q17D'\n",
"\\item 'q21D'\n",
"\\item 'q18C'\n",
"\\item 'q3E'\n",
"\\item 'q21C'\n",
"\\item 'q9D'\n",
"\\item 'q23B'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'q22E'\n",
"2. 'q3C'\n",
"3. 'q10E'\n",
"4. 'q19C'\n",
"5. 'q24C'\n",
"6. 'q8C'\n",
"7. 'q15B'\n",
"8. 'q4D'\n",
"9. 'q9C'\n",
"10. 'q18B'\n",
"11. 'q11D'\n",
"12. 'q8E'\n",
"13. 'q10C'\n",
"14. 'q17D'\n",
"15. 'q21D'\n",
"16. 'q18C'\n",
"17. 'q3E'\n",
"18. 'q21C'\n",
"19. 'q9D'\n",
"20. 'q23B'\n",
"\n",
"\n"
],
"text/plain": [
" [1] \"q22E\" \"q3C\" \"q10E\" \"q19C\" \"q24C\" \"q8C\" \"q15B\" \"q4D\" \"q9C\" \"q18B\"\n",
"[11] \"q11D\" \"q8E\" \"q10C\" \"q17D\" \"q21D\" \"q18C\" \"q3E\" \"q21C\" \"q9D\" \"q23B\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"rfProfile$optVariables\n",
"trellis.par.set(caretTheme())\n",
"plot(rfProfile, type = c(\"g\", \"o\"))"
]
},
{
"cell_type": "code",
"execution_count": 281,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"Recursive feature selection\n",
"\n",
"Outer resampling method: Cross-Validated (20 fold, repeated 1 times) \n",
"\n",
"Resampling performance over subset size:\n",
"\n",
" Variables RMSE Rsquared RMSESD RsquaredSD Selected\n",
" 1 2.654 1 1.957 0 \n",
" 2 2.237 1 1.614 0 \n",
" 3 2.200 1 1.940 0 \n",
" 4 2.123 1 1.732 0 \n",
" 5 2.134 1 1.723 0 \n",
" 6 2.167 1 1.704 0 \n",
" 7 2.130 1 1.589 0 \n",
" 8 2.135 1 1.673 0 \n",
" 9 2.129 1 1.560 0 \n",
" 10 2.085 1 1.574 0 \n",
" 11 2.018 1 1.618 0 \n",
" 12 1.985 1 1.613 0 \n",
" 13 2.015 1 1.632 0 \n",
" 14 2.017 1 1.598 0 \n",
" 15 2.042 1 1.598 0 \n",
" 16 2.022 1 1.617 0 \n",
" 17 1.994 1 1.647 0 \n",
" 18 2.035 1 1.603 0 \n",
" 19 1.971 1 1.537 0 \n",
" 20 1.937 1 1.617 0 *\n",
" 21 1.965 1 1.601 0 \n",
" 22 2.007 1 1.599 0 \n",
" 23 1.974 1 1.601 0 \n",
" 24 1.946 1 1.637 0 \n",
" 25 1.981 1 1.604 0 \n",
" 84 1.983 1 1.633 0 \n",
"\n",
"The top 5 variables (out of 20):\n",
" q10E, q22E, q10C, q4E, q21C\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"subsets <- c(1:25)\n",
"ctrl <- rfeControl(functions = rfFuncs,\n",
" method = \"repeatedcv\",\n",
" number = 20,\n",
" verbose = FALSE)\n",
"rfProfile <- rfe(as.data.frame(x), y, sizes = subsets, rfeControl = ctrl)\n",
"rfProfile"
]
},
{
"cell_type": "code",
"execution_count": 280,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": false
},
"outputs": [
{
"data": {},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAM1BMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHo6Ojp6enw8PD///8mBDmCAAAACXBIWXMAABJ0\nAAASdAHeZh94AAAgAElEQVR4nO2di3aqWBAFj4+YxGQS//9rJz6u4gNs6D7QbKvWmrmaUax4\nuwZExLIDADdlagEABQgJIABCAgiAkAACICSAAAgJIABCAgiAkAACICSAAAgJIABCAgiAkAAC\nICSAAAgJIABCAgiAkAACICSAAAgJIABCAgiAkAACICSAAAgJIABCAgiAkAACICSAAAgJIABC\nAgiAkAACICSAAAgJIABCAgiAkAACICSAAAgJIABCAgiAkAACICSAAAgJIABCAgiAkAACICSA\nAAgJIABCAgiAkAACICSAAAgJIABCAghgwpBSNoyUFaSSPDJ/E2aQskJIWUDKClJJHpm/CTNI\nWSGkLCBlBakkj8zfhBmkrBBSFpCyglSSR+ZvwgxSVggpC0hZQSrJI/M3YQYpK3IhFYBZ03vi\na2RkW+x/dR7aB1JWtKUIyQlSVrSlCMkJUla0pQjJCVJWtKUIyQlSVrSlCMkJUla0pQjJCVJW\ntKUIyQlSVrSlCMkJUla0pQjJCVJWtKUIyQlSVrSlCMkJUla0pQjJCVJWtKUIyQlSVrSlCMkJ\nUla0pQjJCVJWtKUIyQlSVrSlCMkJUla0pQjJCVJWtKUIyQlSVrSlCMkJUla0pQjJCVJWtKUI\nyQlSVrSlCMkJUla0pQjJCVJWtKUIyQlSVrSlCMkJUla0pQjJCVJWtKUIyQlSVrSlCMkJUla0\npQjJCVJWtKUIyQlSVrSlCMkJUla0pQjJCVJWtKUIyQlSVrSlCMkJUla0pQjJCVJWtKXmF1L/\n74+uivZ4RKItNbeQ9hmlSkl7PCLRlppdSBUdBqE9HpFoS80spFJVYgja4xGJttQMQyqE9Ayk\nrLxqSMeKEnUkPh6RaEvNLqS/jNjZ8AykrLxsSMn22amPRyTaUvMLKdWGnfp4RKItRUhOtMcj\nEm0pQnKiPR6RaEsRkhPt8YhEW4qQnGiPRyTaUoTkRHs8ItGWIiQn2uMRibYUITnRHo9ItKUI\nyYn2eESiLUVITrTHIxJtKUJyoj0ekWhLEZIT7fGIRFuKkJxoj0ck2lKE5ER7PCLRlqofUml+\n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\nIaTWBSUKadCuj4iitGc2EkJqXVCakI6764Y/YY6VlPbMRkJIrQvKFVLIE9a7KO2ZjYSQWheU\nJjvEIPIAAAdjSURBVKQKhzRYV1LaMxsJIbUuqO67NHdxdO9sqKbTXZT2zEZCSK0LyhPSKMeq\nPlxJac9sJITUtpzKo9svpFFpFJVHqoG2lFZID06PGkzikM6MeCxSHxI+U4TUvpSqB63OI6SL\nVKqkUj9TbqRCitvh3PkQ8wnpQoKiZvJMDYSQ+nF6iAtzG4/pVlJze6b6IRXSGB9GvQ11vuMx\ndlHzfaYsiIVU8Z2bfw8hE9KZkVZSAs9UB1ohjfDOjWBIF6oWJfVM3aEWUnWkQzpTYyWl+Uz9\ng5B6crt7PYXULYFScUlpP1OE1JNXC+mCtyjtZ4qQevK6IZ0ZuJLSfqYIqSe345NC6paxpHoV\npf1MEVIv7g/mSyB1z+hSlpWU9jNFSL24P5gvgdQ9E0q1F6X9TBFSHx4cgzS91AMySN2tpDJI\n3UFIk0BIQ0h1DPoNhDQN9wfzJZC6J6tUvqJmFNLN89Zy/7mEdHcwXwKpe9JLpVlJzSekm88d\ntD1zMwnp/hdIIXXLjKQmLmo2IZXrO7V+fnU2Id2ClJUnUtOspGYT0vWd2j91R0iRzFtqzKJm\nGtLt/S//Fyr/Adwwp+lojHK9kHR2NtyDlBWPVLWV1LzWSIQ0MrpS0a+kZhVSab3Sb7G64xHN\nK0jFJDWnkErHtV6LfYXxiOG1pDxFzSik0nm1z2Jfazw8vKjUgJXUfEK6vT0hjcDLS5mLmk1I\nl9+ndN6fkCJB6h/PVlKzCSlysYyHFaTueVwUIWUBKStZpK5WUp1SfXZfEJITpKzkk+re7uu3\n24KQnCBlJbPUo6IIaVSQsjILqXKHcUGE5AQpKzOTIqRxQcrK3KTYtBsVpKzMTYqQRgUpK/OT\nYvf3iCBlRVuKkJwgZUVbipCcIGVFW4qQnCBlRVuKkJwgZUVbipCcIGVFW4qQnCBlRVuKkJwg\nZUVbipCcIGVFW4qQnCBlRVuKkJwgZUVbipCcIGVFW4qQnCBlRVuKkJwgZUVbipCcIGVFW4qQ\nnCBlRVuKkJwgZUVbipCcIGVFW4qQnCBlRVuKkJwgZUVbipCcIGVFW4qQnCBlRVuKkJwgZUVb\nipCcIGVFW4qQnCBlRVuKkJwgZUVbipCcIGVFW4qQnCBlRVuKkJwgZUVbipCcIGVFW4qQnCBl\nRVuKkJwgZUVbipCcIGVFW4qQnCBlRVuKkJwgZUVbipCcIGVFW4qQnCBlRVuKkJwgZUVbKk1I\nALOm98TXyCj9Q7eDlBWkkjwyfxNmkLJCSFlAygpSSR6ZvwkzSFkhpCwgZQWpJI/M34QZpKwQ\nUhaQsoJUkkfmb8IMUlYIKQtIWUEqySPzN2EGKSsvGRKADoQEEAAhAQRASAABEBJAAIQEEAAh\nAQRASAABEBJAAIQEEMBkIQ04v0Rdzme8SGaWT+rsglTj8ad40NPj5vlb2DWEkpmVdFIpn6nJ\npSZ6IsqUD/6Is1Ays9KYjBxSKZ+p6aUIqUmy8TgLZZIq1xcySRFSFgjpOeXfq5BMUudniZAy\nkG1mpx+PB5SMUrvJ6yakBtnG4+bVcyKpdOvuyesmpAvZNlguKomkcoY0vRQhnSl3/56Yy/nc\nE0klmNkHTC9FSP8ozT8SmbFGMjC91FTPw2U8knC1VzeT2c0Lpek5uyB1IzAJmQ4v2Z03o04X\np7Zpcvp/bCKpqY/GecjUUnmeCYAZQ0gAARASQACEBBAAIQEEQEgAARASQACEBBAAIQEEQEgA\nARASQACEBBAAIQEEQEgAARASQACEBBAAIQEEQEgAARASQACEBBAAIWXiqyzPl5dle3+DmxN7\nNK4mOg/JS8LTn4pF+Tpd+imLB/+dkLLC05+K97I5XdqcL3VASGng6U/F73k9tCg/z29OSGng\n6c/F6vTK6Kus/v69XZeyOKyZSvldlvUxl+ZP/9Zc54t/fCzL4uOwgO2qlNWDV1lQB0LKxba8\nHf582wf1fjz96z6UUtb7C/tcbn9aDs0dQjpcO1z9ON7oY7rf5MUgpGQs/p2i+PCvz93u83Rx\n9Xv68dVPF9+778X+B/vr2/2Nfg8rtUX53t9o2fFIEAkhJWOzr+IvgcuuhlMyX+fLzZ/uN962\nf9t8h+vrso/t93iVzbpRIaRkfB+2zFb7FcofP9v31SmZw/XjH49+evzn/F0Am7+tvu/vKX6B\nF4WQsrH8W638nrbJVufvyGiG9PCnNyHt3hd/fy4Me/4gBELKxkd5370f9xK8leXH9uc2mcc/\n/ffPhe1myWuk0SCkbOzXRsvDi51jGA+TOf90/8qp8Rrp5oURby6NBs90Ot7Kv33g+06+H7wa\navz0uNdue/wvn/urf6u09X4D8ZO9dmNCSOnYln+73DanlzxfVyFd/fRtf2m9u3r1tH9l9Hm+\nDYwCIeVjcT5O6C+T1dd5y213+uPqp5uyeD//l/2RDeXtsIfhcGQDHY0GIQEEQEgAARASQACE\nBBAAIQEEQEgAARASQACEBBAAIQEEQEgAARASQACEBBAAIQEEQEgAARASQACEBBAAIQEEQEgA\nARASQACEBBDA/8ekDNqNkofdAAAAAElFTkSuQmCC",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"trellis.par.set(caretTheme())\n",
"plot(rfProfile, type = c(\"g\", \"o\"))"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Uso de algoritmos genéticos"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Error seleccionando la letra más respondida por pregunta"
]
},
{
"cell_type": "code",
"execution_count": 286,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" [1] 0 -4 -3 -4 -3 -1 -2 -1 2 -1 1 -3 -1 -3 -2 -1 -2 1 -5 -2 -2 -4 -5\n"
]
},
{
"data": {
"text/html": [
"53"
],
"text/latex": [
"53"
],
"text/markdown": [
"53"
],
"text/plain": [
"[1] 53"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>distance</th><th scope=col>q1</th><th scope=col>q2</th><th scope=col>q3</th><th scope=col>q4</th><th scope=col>q5</th><th scope=col>q6</th><th scope=col>q7</th><th scope=col>q8</th><th scope=col>q9</th><th scope=col>...</th><th scope=col>q16</th><th scope=col>q17</th><th scope=col>q18</th><th scope=col>q19</th><th scope=col>q20</th><th scope=col>q21</th><th scope=col>q22</th><th scope=col>q23</th><th scope=col>q24</th><th scope=col>q25</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>53 </td><td>C </td><td>B </td><td>C </td><td>D </td><td>A </td><td>D </td><td>E </td><td>E </td><td>D </td><td>...</td><td>A </td><td>D </td><td>B </td><td>C </td><td>E </td><td>D </td><td>E </td><td>E </td><td>C </td><td>B </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|llllllllllllllllllllllllll}\n",
" distance & q1 & q2 & q3 & q4 & q5 & q6 & q7 & q8 & q9 & ... & q16 & q17 & q18 & q19 & q20 & q21 & q22 & q23 & q24 & q25\\\\\n",
"\\hline\n",
"\t 53 & C & B & C & D & A & D & E & E & D & ... & A & D & B & C & E & D & E & E & C & B \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"distance | q1 | q2 | q3 | q4 | q5 | q6 | q7 | q8 | q9 | ... | q16 | q17 | q18 | q19 | q20 | q21 | q22 | q23 | q24 | q25 | \n",
"|---|\n",
"| 53 | C | B | C | D | A | D | E | E | D | ... | A | D | B | C | E | D | E | E | C | B | \n",
"\n",
"\n"
],
"text/plain": [
" distance q1 q2 q3 q4 q5 q6 q7 q8 q9 ... q16 q17 q18 q19 q20 q21 q22 q23 q24\n",
"1 53 C B C D A D E E D ... A D B C E D E E C \n",
" q25\n",
"1 B "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"scores_guess = get_scores(correct_answers = solmod)\n",
"print( scores_real - scores_guess )\n",
"distance = sum( abs( scores_real - scores_guess ) )\n",
"distance\n",
"high_scores = data.frame(distance = distance, t(solmod))\n",
"high_scores"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Definimos la función para mutar"
]
},
{
"cell_type": "code",
"execution_count": 288,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"go_mutate = function(parent, changes = 1){\n",
" # changes indicates how many random changes to make in the 25 answers\n",
" change_these = sample(x = 1:25, size = changes, replace = F)\n",
" for (i in change_these){\n",
" parent[i] = sample(x = setdiff(LETTERS[1:5],parent[i]), size = 1)\n",
" }\n",
" return(parent)\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Definimos el proceso evolutivo"
]
},
{
"cell_type": "code",
"execution_count": 283,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"library(plyr)\n",
"Nbest = 4\n",
"best_score = 53\n",
"go_evolve = function(runs = 1000, population = high_scores, best = best_score){\n",
" for (i in 1:runs){\n",
" # only choose from the best Nbest rows\n",
" selectrow <- sample(x = 1:min(Nbest,nrow(population)), size = 1) \n",
" # we choose a random mutation rate between 1 and 3 else we may get stuck easily\n",
" offspring <- go_mutate(parent = population[selectrow,2:26],\n",
" changes = sample(1:3,1))\n",
" offspring_score <-sum( abs( scores_real - \n",
" get_scores(correct_answers = offspring) ) )\n",
" if (offspring_score <= max(population$distance)){ \n",
" population <- rbind(data.frame(distance = offspring_score, offspring),\n",
" population)\n",
" population <- arrange(df = population, distance)\n",
" # if the new guy is a duplicate, remove him\n",
" population <- population[!duplicated(population),] \n",
" # discard anyone not fit enough (so the code might run faster)\n",
" population <- population[1:min(Nbest,nrow(population)),] \n",
" }\n",
" # keep track of the current highest score\n",
" best <- c(best, population[1,1]) # vector index is the run number\n",
" } \n",
" return(list(population=population,best=best))\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 289,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" [1] 53 48 43 38 38 38 38 38 38 38 38\n"
]
}
],
"source": [
"result = go_evolve(runs = 10)\n",
"high_scores = result$population\n",
"best_score = result$best\n",
"print(best_score)"
]
},
{
"cell_type": "code",
"execution_count": 290,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] 13 13 13 13 13 13\n"
]
}
],
"source": [
"result = go_evolve(runs = 1000)\n",
"high_scores = result$population\n",
"best_score = result$best\n",
"print(tail(best_score))"
]
},
{
"cell_type": "code",
"execution_count": 291,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] 0 0 0 0 0 0\n"
]
}
],
"source": [
"result = go_evolve(runs = 1000)\n",
"high_scores = result$population\n",
"best_score = result$best\n",
"print(tail(best_score))"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Hemos encontrado una solución que devuelve el mismo resultado en *total* que la que nos dan los datos."
]
},
{
"cell_type": "code",
"execution_count": 300,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
]
}
],
"source": [
"sol <- high_scores[1,2:26]\n",
"scores_guess = get_scores(correct_answers = sol)\n",
"print( scores_real - scores_guess )"
]
},
{
"cell_type": "code",
"execution_count": 301,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"?sample"
]
},
{
"cell_type": "code",
"execution_count": 293,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAANlBMVEUAAAAzMzNNTU1oaGh8\nfHyMjIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enr6+vw8PD////agy6EAAAACXBIWXMA\nABJ0AAASdAHeZh94AAAaoElEQVR4nO3djZIb15WlURiiRMltkar3f9ku/pikiUoSuMhN5Km9\nToTldoRn9Z7K+w1lid1zenLO3X2nRw9w7jWckJzb4YTk3A4nJOd2OCE5t8MJybkdTkjO7XBC\ncm6HWw7pX865HUL6+b/l/ar9EHaaa27SvZIV0nzX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX\n3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX\n3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX\n3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX3KQrpBrX\n3KQrpBrX3KR7qJBC///TDvskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6Dfsk\nXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6Dfsk\nXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6Dfsk\nXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6Dfsk\nXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6Dfsk\nXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSFdL6DfskXmaSrQjpfaak\nYZ/Ey0yyQlq/YZ/Ey0yyQlq/YZ/Ey0yyQlq/YZ/Ey0yyQlq/YZ/Ey0yyQlq/YZ/Ey0yyryCk\n9z+/0xX/Hufmnl+R5rvmJl1/alfjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0\nhVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0hVTjmpt0QyGdP/7h+V4itscIKeiam3QzIX0M6FNM\nLxDbY4QUdM1NupGQzk9COp5rbtJNhHR+EtIBXXOT7i8J6V8f7/3P73TFv8e5uXdLSOcnvyId\n0TU36e7/K9KXfoR0LNfcpBsI6dMJ6WiuuUk3+PeRhHQs19ykK6Qa19yk63c21LjmJl2/167G\nNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnG\nNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnGNTfpCqnG\nNTfpHiyk51v1f8DuT050zU26xwrpHv/HbOKGueYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYm\nXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYm\nXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYm\nXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYm\nXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYm\nXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYm\nXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYm\nXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYmXSHVuOYm3eOF9PlW/9tssIkb\n5pqbdA8X0r3/bX7M7nrDXHOTrpBqXHOTrpBqXHOTrpBqXHOTrpBqXHOTrpBqXHOT7lFD2rOk\nYZ/Ey0yyQlq/YZ/Ey0yyQlq/YZ/Ey0yyQlq/YZ/Ey0yyQlq/YZ/Ey0yyQlq/YZ/Ey0yyfSHt\nV9KwT+JlJtm6kHb8JWnYJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Ey\nk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Ey\nk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Ey\nk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Ey\nk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk6yQ1m/YJ/Eyk+wrCOn9bXe68d/v3PHPr0jzXXOTrj+1q3HN\nTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHN\nTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHNTbpCqnHN\n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\nCqnGFVLSFVKNK6SkK6QaV0hJV0g1rpCSrpBqXCElXSHVuEJKukKqcYWUdIVU4wop6QqpxhVS\n0hVSjSukpCukGldISVdINa6Qkq6QalwhJV0h1bhCSrpCqnEfHdKd94vnhlghzXdnzxXSJbF5\nXlDSnT1XSJfE5nlBSXf2XCFdEpvnBSXd2XOFdElsnheUdGfPFdIlsXleUNKdPVdIl8TmeUFJ\nd/ZcIV0Sm+cFJd3Zc4V0SWyeF5R0Z88V0iWxeV5Q0p09V0iXxOZ5QUl39lwhXRKb5wUl3dlz\nhXRJbJ4XlHRnzxXSJbF5XlDSnT1XSJfE5nlBSXf2XCFdEpvnBSXd2XOFdElsnheUdGfPFdIl\nsXleUNKdPVdIl8TmeUFJd/ZcIV0Sm+cFJd3Zc4V0SWyeF5R0Z88V0iWxeV5Q0p09V0iXxOZ5\nQUl39lwhXRKb5wUl3dlzhXRJbJ4XlHRnzxXSJbF5XlDSnT1XSJfE5nlBSXf2XCFdEpvnBSXd\n2XOFdElsnheUdGfPFdIlsXleUNKdPVdIl8TmeUFJd/ZcIV0Sm+cFJd3Zc4V0SWyeF5R0Z88V\n0iWxeV5Q0p09V0iXxOZ5QUl39lwhXRKb5wUl3dlzhXRJbJ4XlHRnzxXSJbF5XlDSnT1XSJfE\n5nlBSXf2XCFdEpvnBSXd2XOFdElsnheUdGfPFdIlsXleUNKdPVdIl8TmeUFJd/ZcIV0Sm+cF\nJd3Zc4V0SWyeF5R0Z88V0iWxeV5Q0p09V0iXxOZ5QUl39lwhXRKb5wUl3dlzhXRJbJ4XlHRn\nz20O6fx8LxH3jrn1hr0gP4aX2OKQzl/+8B1x75hbb9gL8mN4iRXSJXHvmFtv2AvyY3iJFdIl\nce+YW2/YC/JjeIkV0of/0x/vvXPLdxpwV/xfw69I811zk64/tatxzU26QqpxzU26QqpxzU26\nQqpxzU26fmdDjWtu0vV77Wpcc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpc\nc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpc\nc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpcc5OukGpc\nc5OukGpcc5OukGpcc5OukGpcc5PuLwzJOXd/SNe0FrQDZ27yXvtcIX05c5P32ucK6cuZm7zX\nPldIX87c5L32ucmQnKs5ITm3wwnJuR1OSM7tcEJybofLhXR+vhi+350/7/zv3EPP/rTs+6mH\nnfx17oCf8NZP9cq5sZDOX/5w7Dt/80/ng88+f113HjD58wOc8RPe+qleO1dI3/zTcT/zxzs/\njQrp/CSkHYcd/M7f/vNxP/PnGxXSd8uOP1dId9yXP4F/ejr8Zx4a0qCfsJCWb86r/HAjQ/r8\nh+PPfXqpdyHdcDM+89O4l3n+9r86/lwh3XszPvOTkLJ310+3PaQ5r/LDTQxpzNzz1z8K6eY7\nf/OPQ3/mjzfrZX5dNuEnfP7mn44U0lH/Bvb3N+a3CXy4z/+P5pTJk+aet34DxqN/Z4NzTSck\n53Y4ITm3wwnJuR1OSM7tcEJybocTknM7nJCc2+GE5NwOJyTndjghObfDCcm5HU5Izu1wQpp1\np9Pf5zfPf/z0X3/4x7vfT+e3j57lhDTrTqc3pz/+J6Tz6fmU9OgT0qz71My3Ib355+mv0wH/\nB3zKTkiz7vlP5Z7+N6Sv/9o98HyBWfc1of+G9PVfuweeLzDrhHTQ8wVm3TfhvBPSgc4XmHWf\nkjmf/v30zxshHeh8gVn3KZm3H/6S959COtD5ArPuczJvz6c//WekI50v4NwOJyTndjghObfD\nCcm5HU5Izu1wQnJuhxOSczuckJzb4YTk3A73//rmZ373iJvAAAAAAElFTkSuQmCC",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ggplot(\n",
" data = data.frame(run=1:length(best_score), \n",
" best=best_score), \n",
" aes(x=run, y=best)) + geom_line() + expand_limits(y=0) + theme_bw()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.3.2"
},
"name": "Manuel Lagunas Arto"
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment