Sub muestras de forma aleatoria

Es muy sencillo generar un sub muestra de forma aleatoria. En este caso usaremos una base de datos llamaba “funds” que contiene 3,000 observaciones y 21 variables.

dim(funds)
[1] 3000   21

Supongamos que quiero dividir la muestra original en dos sub muestras, donde cada una tenga la misma cantidad de observaciones.

El primer paso es generar números de forma aleatoria que van a servir como indicador de qué observaciones serán consideradas en cada una de estas sub muestras.

Para hacer esta generación de número aleatorios usaremos la función sample() en donde, en su versión más sencilla, solo utiliza dos argumentos.

El primero será la cantidad de observaciones que hay en total o el límite superior para generar los número de forma aleatoria. El segundo argumento será la cantidad de números que se van a generar de manera aleatoria. Por ejemplo sample(total, cantidad) usado de la siguiente forma sample(100, 20) generará 20 número de forma aleatoria siendo el 100 el número máximo en poder salir seleccionado.

En nuestro ejemplo sabemos que existen 3,000 observaciones y queremos dividir la muestra en dos submuestas de mismo tamaño, por lo que usando la función sample(3000, 1500)podríamos generar un vector con 1,500 números aleatorios que puede ir desde el 1 hasta el 3,000.

Sin embargo, para evitar errores lo mejor es dejar esta información como una característica de la base de datos a dividir. Si usamos la función nrow(base_de_datos) podemos identificar el número de observaciones que tiene una base de datos.

Por lo tanto, realizaremos lo siguiente:

objeto1 <- sample(nrow(funds), nrow(funds)/2)
head(objeto1)
[1]  125 1869 2463 2760 2270 2895

Con este script generamos “objeto1” que contienen 1,500 valores. Usando la función heads() podemos ver los primeros valores de este vector.

Ya que tenemos los números aleatorios es necesario dividir genera la submuestra con las observaciones que acabamos de generar.

Esto lo hacemos de la siguiente manera:

submuestra1 <- funds[objeto1, ]
dim(submuestra1)
[1] 1500   21

Al realizar esto, estamos generando una submuestra, llamada “submuestra1”, donde le pedimos que ingrese de la base de datos “funds” solo las observaciones que coinciden con nuestro vector de números aleatorios y toda las variables. Recordar que: base[renglones u observaciones, columnas o variables].

Para generar la base de datos que falta, la que tiene las otras observaciones que no son consideradas en el vector de números aleatorios, debemos realizar lo siguiente:

submuestra2 <- funds[-objeto1, ]
dim (submuestra2)
[1] 1500   21

Utilizando el signo (-) le indicamos a R que no considere las observaciones que corresponde al vector de números aleatorios.

Podemos ver que son dos bases de datos completamente diferentes. Vamos a comparar la media de una de las variables en cada una de las bases de datos.

summary(submuestra1$home_value)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    0.0   552.8   812.0  1131.9  1333.0  5926.0 
summary(submuestra2$home_value)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    0.0   557.0   824.5  1154.7  1342.0  5945.0 

Si quisieramos realizar una partición diferente, por ejemplo 80% para generar las estimaciones de los coeficientes y 20% para evaluar la predicción de los modelos, cambiaríamos la cantidad de observaciones generadas en el primer paso con la función sample.

En caso de querer hacer esta división de la muestra, tendríamos que:

objeto2 <- sample(nrow(funds), nrow(funds)*0.80)
head(objeto2)
[1]  124 1028 1123 2278 1504 1940

Y los demás pasos serían exactamente lo mismo.

LS0tCnRpdGxlOiAiU3ViIG11ZXN0cmFzIGRlIGZvcm1hIGFsZWF0b3JpYSIKYXV0aG9yOiAiSkpHUyIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jX2Zsb2F0OiB0cnVlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKbGlicmFyeShyZWFkcikKZnVuZHMgPC0gcmVhZFJEUygifi9Ecm9wYm94L1VUIEN1cnNvL1N0YXRpc3RpY2FsIExlYXJuaW5nL1RyYWJham8gRmluYWwvZnVuZHJhaXNpbmcucmRzIikKZnV0dXJlIDwtIHJlYWRSRFMoIn4vRHJvcGJveC9VVCBDdXJzby9TdGF0aXN0aWNhbCBMZWFybmluZy9UcmFiYWpvIEZpbmFsL2Z1dHVyZV9mdW5kcmFpc2luZy5yZHMiKQpgYGAKCiMgey50YWJzZXR9CgojIyMgKipTdWIgbXVlc3RyYXMgZGUgZm9ybWEgYWxlYXRvcmlhKioKCkVzIG11eSBzZW5jaWxsbyBnZW5lcmFyIHVuIHN1YiBtdWVzdHJhIGRlIGZvcm1hIGFsZWF0b3JpYS4gRW4gZXN0ZSBjYXNvIHVzYXJlbW9zIHVuYSBiYXNlIGRlIGRhdG9zIGxsYW1hYmEgKioiZnVuZHMiKiogcXVlIGNvbnRpZW5lICoqMywwMDAgb2JzZXJ2YWNpb25lcyB5IDIxIHZhcmlhYmxlcyoqLgoKYGBge3J9CmRpbShmdW5kcykKYGBgCgpTdXBvbmdhbW9zIHF1ZSBxdWllcm8gZGl2aWRpciBsYSBtdWVzdHJhIG9yaWdpbmFsIGVuIGRvcyBzdWIgbXVlc3RyYXMsIGRvbmRlIGNhZGEgdW5hIHRlbmdhIGxhIG1pc21hIGNhbnRpZGFkIGRlIG9ic2VydmFjaW9uZXMuCgoKRWwgcHJpbWVyIHBhc28gZXMgKipnZW5lcmFyIG7Dum1lcm9zIGRlIGZvcm1hIGFsZWF0b3JpYSoqIHF1ZSB2YW4gYSBzZXJ2aXIgY29tbyBpbmRpY2Fkb3IgZGUgcXXDqSBvYnNlcnZhY2lvbmVzIHNlcsOhbiBjb25zaWRlcmFkYXMgZW4gY2FkYSB1bmEgZGUgZXN0YXMgc3ViIG11ZXN0cmFzLiAKIApQYXJhIGhhY2VyIGVzdGEgZ2VuZXJhY2nDs24gZGUgbsO6bWVybyBhbGVhdG9yaW9zIHVzYXJlbW9zIGxhIGZ1bmNpw7NuIGBzYW1wbGUoKWAgZW4gZG9uZGUsIGVuIHN1IHZlcnNpw7NuIG3DoXMgc2VuY2lsbGEsIHNvbG8gdXRpbGl6YSBkb3MgYXJndW1lbnRvcy4gCgpFbCBwcmltZXJvIHNlcsOhIGxhIGNhbnRpZGFkIGRlIG9ic2VydmFjaW9uZXMgcXVlIGhheSBlbiB0b3RhbCBvIGVsIGzDrW1pdGUgc3VwZXJpb3IgcGFyYSBnZW5lcmFyIGxvcyBuw7ptZXJvIGRlIGZvcm1hIGFsZWF0b3JpYS4gRWwgc2VndW5kbyBhcmd1bWVudG8gc2Vyw6EgbGEgY2FudGlkYWQgZGUgbsO6bWVyb3MgcXVlIHNlIHZhbiBhIGdlbmVyYXIgZGUgbWFuZXJhIGFsZWF0b3JpYS4gUG9yIGVqZW1wbG8gYHNhbXBsZSh0b3RhbCwgY2FudGlkYWQpYCB1c2FkbyBkZSBsYSBzaWd1aWVudGUgZm9ybWEgYHNhbXBsZSgxMDAsIDIwKWAgZ2VuZXJhcsOhIDIwIG7Dum1lcm8gZGUgZm9ybWEgYWxlYXRvcmlhIHNpZW5kbyBlbCAxMDAgZWwgbsO6bWVybyBtw6F4aW1vIGVuIHBvZGVyIHNhbGlyIHNlbGVjY2lvbmFkby4KCkVuIG51ZXN0cm8gZWplbXBsbyBzYWJlbW9zIHF1ZSBleGlzdGVuIDMsMDAwIG9ic2VydmFjaW9uZXMgeSBxdWVyZW1vcyBkaXZpZGlyIGxhIG11ZXN0cmEgZW4gZG9zIHN1Ym11ZXN0YXMgZGUgbWlzbW8gdGFtYcOxbywgcG9yIGxvIHF1ZSB1c2FuZG8gbGEgZnVuY2nDs24gYHNhbXBsZSgzMDAwLCAxNTAwKWBwb2Ryw61hbW9zIGdlbmVyYXIgdW4gdmVjdG9yIGNvbiAxLDUwMCBuw7ptZXJvcyBhbGVhdG9yaW9zIHF1ZSBwdWVkZSBpciBkZXNkZSBlbCAxIGhhc3RhIGVsIDMsMDAwLgoKU2luIGVtYmFyZ28sIHBhcmEgZXZpdGFyIGVycm9yZXMgbG8gbWVqb3IgZXMgZGVqYXIgZXN0YSBpbmZvcm1hY2nDs24gY29tbyB1bmEgY2FyYWN0ZXLDrXN0aWNhIGRlIGxhIGJhc2UgZGUgZGF0b3MgYSBkaXZpZGlyLiBTaSB1c2Ftb3MgbGEgZnVuY2nDs24gYG5yb3coYmFzZV9kZV9kYXRvcylgIHBvZGVtb3MgaWRlbnRpZmljYXIgZWwgbsO6bWVybyBkZSBvYnNlcnZhY2lvbmVzIHF1ZSB0aWVuZSB1bmEgYmFzZSBkZSBkYXRvcy4KClBvciBsbyB0YW50bywgcmVhbGl6YXJlbW9zIGxvIHNpZ3VpZW50ZToKYGBge3J9Cm9iamV0bzEgPC0gc2FtcGxlKG5yb3coZnVuZHMpLCBucm93KGZ1bmRzKS8yKQpoZWFkKG9iamV0bzEpCmBgYAoKQ29uIGVzdGUgc2NyaXB0IGdlbmVyYW1vcyAgKioib2JqZXRvMSIqKiBxdWUgY29udGllbmVuIDEsNTAwIHZhbG9yZXMuIFVzYW5kbyBsYSBmdW5jacOzbiBgaGVhZHMoKWAgcG9kZW1vcyB2ZXIgbG9zIHByaW1lcm9zIHZhbG9yZXMgZGUgZXN0ZSB2ZWN0b3IuCgpZYSBxdWUgdGVuZW1vcyBsb3MgbsO6bWVyb3MgYWxlYXRvcmlvcyBlcyBuZWNlc2FyaW8gZGl2aWRpciBnZW5lcmEgbGEgc3VibXVlc3RyYSBjb24gbGFzIG9ic2VydmFjaW9uZXMgcXVlIGFjYWJhbW9zIGRlIGdlbmVyYXIuCgpFc3RvIGxvIGhhY2Vtb3MgZGUgbGEgc2lndWllbnRlIG1hbmVyYToKCmBgYHtyfQpzdWJtdWVzdHJhMSA8LSBmdW5kc1tvYmpldG8xLCBdCmRpbShzdWJtdWVzdHJhMSkKYGBgCgpBbCByZWFsaXphciBlc3RvLCBlc3RhbW9zIGdlbmVyYW5kbyB1bmEgc3VibXVlc3RyYSwgbGxhbWFkYSAqKiJzdWJtdWVzdHJhMSIqKiwgZG9uZGUgbGUgcGVkaW1vcyBxdWUgaW5ncmVzZSBkZSBsYSBiYXNlIGRlIGRhdG9zICoqImZ1bmRzIioqIHNvbG8gbGFzIG9ic2VydmFjaW9uZXMgcXVlIGNvaW5jaWRlbiBjb24gbnVlc3RybyB2ZWN0b3IgZGUgbsO6bWVyb3MgYWxlYXRvcmlvcyB5IHRvZGEgbGFzIHZhcmlhYmxlcy4gUmVjb3JkYXIgcXVlOiBgYmFzZVtyZW5nbG9uZXMgdSBvYnNlcnZhY2lvbmVzLCBjb2x1bW5hcyBvIHZhcmlhYmxlc11gLgoKUGFyYSBnZW5lcmFyIGxhIGJhc2UgZGUgZGF0b3MgcXVlIGZhbHRhLCBsYSBxdWUgdGllbmUgbGFzIG90cmFzIG9ic2VydmFjaW9uZXMgcXVlIG5vIHNvbiBjb25zaWRlcmFkYXMgZW4gZWwgdmVjdG9yIGRlIG7Dum1lcm9zIGFsZWF0b3Jpb3MsIGRlYmVtb3MgcmVhbGl6YXIgbG8gc2lndWllbnRlOgoKYGBge3J9CnN1Ym11ZXN0cmEyIDwtIGZ1bmRzWy1vYmpldG8xLCBdCmRpbSAoc3VibXVlc3RyYTIpCmBgYAoKVXRpbGl6YW5kbyBlbCBzaWdubyAqKigtKSoqIGxlIGluZGljYW1vcyBhIGBSYCBxdWUgbm8gY29uc2lkZXJlIGxhcyBvYnNlcnZhY2lvbmVzIHF1ZSBjb3JyZXNwb25kZSBhbCB2ZWN0b3IgZGUgbsO6bWVyb3MgYWxlYXRvcmlvcy4KClBvZGVtb3MgdmVyIHF1ZSBzb24gZG9zIGJhc2VzIGRlIGRhdG9zIGNvbXBsZXRhbWVudGUgZGlmZXJlbnRlcy4gVmFtb3MgYSBjb21wYXJhciBsYSBtZWRpYSBkZSB1bmEgZGUgbGFzIHZhcmlhYmxlcyBlbiBjYWRhIHVuYSBkZSBsYXMgYmFzZXMgZGUgZGF0b3MuCgpgYGB7cn0Kc3VtbWFyeShzdWJtdWVzdHJhMSRob21lX3ZhbHVlKQpzdW1tYXJ5KHN1Ym11ZXN0cmEyJGhvbWVfdmFsdWUpCmBgYAoKClNpIHF1aXNpZXJhbW9zIHJlYWxpemFyIHVuYSBwYXJ0aWNpw7NuIGRpZmVyZW50ZSwgcG9yIGVqZW1wbG8gODAlIHBhcmEgZ2VuZXJhciBsYXMgZXN0aW1hY2lvbmVzIGRlIGxvcyBjb2VmaWNpZW50ZXMgeSAyMCUgcGFyYSBldmFsdWFyIGxhIHByZWRpY2Npw7NuIGRlIGxvcyBtb2RlbG9zLCBjYW1iaWFyw61hbW9zIGxhIGNhbnRpZGFkIGRlIG9ic2VydmFjaW9uZXMgZ2VuZXJhZGFzIGVuIGVsIHByaW1lciBwYXNvIGNvbiBsYSBmdW5jacOzbiBgc2FtcGxlYC4KCkVuIGNhc28gZGUgcXVlcmVyIGhhY2VyIGVzdGEgZGl2aXNpw7NuIGRlIGxhIG11ZXN0cmEsIHRlbmRyw61hbW9zIHF1ZToKCmBgYHtyfQpvYmpldG8yIDwtIHNhbXBsZShucm93KGZ1bmRzKSwgbnJvdyhmdW5kcykqMC44MCkKaGVhZChvYmpldG8yKQpgYGAKClkgbG9zIGRlbcOhcyBwYXNvcyBzZXLDrWFuIGV4YWN0YW1lbnRlIGxvIG1pc21vLgoKCgoKCgoKCgoKCgo=