{"id":1773,"date":"2019-04-12T11:35:55","date_gmt":"2019-04-12T16:35:55","guid":{"rendered":"https:\/\/naps.com.mx\/blog\/?p=1773"},"modified":"2019-04-16T17:38:01","modified_gmt":"2019-04-16T22:38:01","slug":"prueba-de-corridas-en-java","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/prueba-de-corridas-en-java\/","title":{"rendered":"Prueba de corridas arriba y abajo: implementaci\u00f3n en Java"},"content":{"rendered":"<p>La <strong>prueba de corridas arriba y abaj<\/strong>o permite determinar si un conjunto de n\u00fameros pseudoaleatorios son independientes. En \u00e9ste art\u00edculo explicamos esa prueba y su implementaci\u00f3n en el lenguaje de programaci\u00f3n Java.<\/p>\n<p><!--more--><\/p>\n<div id=\"attachment_1794\" style=\"width: 650px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2019\/04\/Prueba-de-corridas.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1794\" class=\"size-full wp-image-1794\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2019\/04\/Prueba-de-corridas.jpg\" alt=\"Prueba de corridas\" width=\"640\" height=\"426\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2019\/04\/Prueba-de-corridas.jpg 640w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2019\/04\/Prueba-de-corridas-300x200.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><p id=\"caption-attachment-1794\" class=\"wp-caption-text\">Aprende a aplicar la Prueba de corridas<\/p><\/div>\n<h2>Prueba de corridas arriba y abajo<\/h2>\n<h3>Escribir una cadena de ceros y unos.<\/h3>\n<p>Primero se recorre la lista de <strong>n\u00fameros pseudoaleatorio<\/strong>s. Si el n\u00famero i es menor o igual al n\u00famero i-1 (el anterior), se anota un 0 (cero), de lo contrario se anota un 1.<\/p>\n<p>Por ejemplo, en los siguientes 15 n\u00fameros:<\/p>\n<p>0.6129, 0.7097, 0.9355, 0.7742, 0.7419, 0.3226, 0.0323, 0.3871, 0.8710, 0.9677, 0.1613, 0,<\/p>\n<p>1, 0.5806, 0.2903<span class=\"Apple-converted-space\">\u00a0 \u00a0<\/span><\/p>\n<p>Se observa que 0.6129 es menor que 0.7097, por lo que anotamos un 1.<\/p>\n<p>Se observa que 0.7097 es menor que 0.9355, por lo que anotamos un 1.<\/p>\n<p>Se observa que 0.9355 es mayor que 0.7742, por lo que anotamos un 0.<\/p>\n<p>La cadena completa de unos y ceros quedar\u00eda as\u00ed:<\/p>\n<p>11000011100100<\/p>\n<h3>Contar las corridas<\/h3>\n<p>De la cadena anterior de ceros y unos, <strong>procedemos a contar las corridas<\/strong>. Si escribimos de nuevo la cadena separando los grupos de unos de los grupos de ceros, nos quedar\u00eda as\u00ed:<\/p>\n<p>11-0000-111-00-1-00<\/p>\n<p>Vemos que hay 6 grupos de ceros o unos. Esos grupos se les llama <strong>corridas<\/strong>.<\/p>\n<p>Corridas = 6<\/p>\n<h3>C\u00e1lculo de la media<\/h3>\n<p>Se calcula el <strong>valor esperado<\/strong> usando la siguiente formula:<\/p>\n<span class=\"wp-katex-eq\" data-display=\"false\">\\mu_{Co}=\\frac{2n-1}{3}<\/span>\n<p>Por lo que la <strong>media<\/strong> es:<\/p>\n<span class=\"wp-katex-eq\" data-display=\"false\">\\mu_{Co}=\\frac{2(15)-1}{3}=9.6666<\/span>\n<p>Se calcula la <strong>varianza<\/strong> usando la siguiente f\u00f3rmula:<\/p>\n<span class=\"wp-katex-eq\" data-display=\"false\">\\sigma^2_{Co}=\\frac{16n-29}{90}<\/span>\n<p>Por lo que la varianza es:<\/p>\n<span class=\"wp-katex-eq\" data-display=\"false\">\\sigma^2_{Co}=\\frac{16(15)-29}{90}=2.34<\/span>\n<p>Se obtiene el <strong>estad\u00edstico Z<\/strong> mediante la siguiente ecuaci\u00f3n:<\/p>\n<span class=\"wp-katex-eq\" data-display=\"false\">Z_0=\\left|{\\frac{Co-\\mu_{Co}}{\\sigma_{Co}}}\\right| <\/span>\n<p>Por lo que el estad\u00edstico Z es:<\/p>\n<span class=\"wp-katex-eq\" data-display=\"false\">Z_0=\\left|{\\frac{6-9.66}{\\sqrt{2.34}}}\\right|=2.39 <\/span>\n<p>&nbsp;<\/p>\n<p>Comparamos el valor obtenido del estad\u00edstico Z con el valor de la <strong>tabla de distribuci\u00f3n normal<\/strong> para <span class=\"wp-katex-eq\" data-display=\"false\">\\alpha<\/span>\/2. Consideramos que <span class=\"wp-katex-eq\" data-display=\"false\">\\alpha<\/span>\u00a0es 0.05, es decir, utilizamos un \u00edndice de confianza de 95%, por lo que <span class=\"wp-katex-eq\" data-display=\"false\">\\alpha<\/span>\/2 es 0.025. El dato a buscar en la tabla de distribuci\u00f3n normal es 1-0.025, esto es, 0.9750. El valor de Z en la tabla de distribuci\u00f3n normal para 0.9750 es 1.96. Si el valor obtenido con la f\u00f3rmula, es mayor al valor de la tabla, se concluye que los n\u00fameros no son independientes.<\/p>\n<p>Como podemos observar, el valor del estad\u00edstico Z obtenido de la prueba de corridas al conjunto de 15 n\u00fameros pseudoaleatorios utilizado en este ejemplo es 2.39, \u00a0es mayor a 1.96 por lo que \u00e9ste conjunto de n\u00fameros<strong> no pasa la prueba de corridas<\/strong> y no se puede afirmar que sean n\u00fameros independientes (por lo que no se deber\u00edan utilizar en un sistema de simulaci\u00f3n).<\/p>\n<p>Esto en parte se debe a que hay una cadena constante de ceros en la prueba:<\/p>\n<p>11-0000-111-00-1-00<\/p>\n<p>Esto ocurri\u00f3 porque hay 4 n\u00fameros pseudoaleatorios que aparecen en forma decreciente. Esa clase de tendencia pueden hacer que un sistema de simulaci\u00f3n <strong>no se comporte en forma aleatoria<\/strong>\u00a0dando lugar a resultados no esperados.<\/p>\n<h2>Implementaci\u00f3n en Java<\/h2>\n<p>Se propone la siguiente soluci\u00f3n en el lenguaje Java:<\/p>\n<h3>N\u00fameros a probar y variables a utilizar<\/h3>\n<pre class=\"lang:java decode:true \">static double datos[] = {\r\n                         0.6129,\r\n                         0.7097,\r\n                         0.9355,\r\n                         0.7742,\r\n                         0.7419,\r\n                         0.3226,\r\n                         0.0323,\r\n                         0.3871,\r\n                         0.8710,\r\n                         0.9677,\r\n                         0.1613,\r\n                         0,\r\n                         1,\r\n                         0.5806,\r\n                         0.2903   \r\n       };\r\n    final static double confianza = .95;\r\n    static  double alfa = 1-confianza;<\/pre>\n<h3>Procedimiento<\/h3>\n<pre class=\"lang:java decode:true \">static public void pruebacorridas(){\r\n    \/\/Creamos una lista para guardar los ceros y unos.\r\n    ArrayList&lt;Integer&gt; bits = new ArrayList&lt;&gt;();\r\n    int i, corridas, dato;\r\n    double  media, varianza, z;\r\n    \/\/Revisa si cada dato actual es menor al dato anterior. \r\n    \/\/Si es as\u00ed, se guarda un 0, de lo contrario, se guarda un 1\r\n    for (i=1; i&lt;datos.length; i++){\r\n        if (datos[i]&lt;=datos[i-1]){\r\n            bits.add(0);\r\n        }\r\n        else{\r\n            bits.add(1);\r\n        }                \r\n    }\r\n    \r\n    \/\/Imprimimos la cadena de ceros y unos\r\n    for (i=0; i&lt;bits.size(); i++){\r\n        System.out.print(bits.get(i));\r\n    }\r\n\r\n    \/\/Contamos las corridas. \r\n    corridas = 1;\r\n    \/\/Comenzamos observando el primer d\u00edgito\r\n    dato= bits.get(0);\r\n    \/\/Comparamos cada d\u00edgito con el observado, cuando cambia es \r\n    \/\/una nueva corrida\r\n    for (i=1; i&lt;bits.size(); i++){\r\n        if (bits.get(i) != dato){\r\n            corridas++;\r\n            dato = bits.get(i);\r\n        }\r\n    }\r\n    System.out.println(\"Corridas \" + corridas);\r\n    \r\n    \/\/Aplicamos las f\u00f3rmulas para media, varianza y Z.\r\n    media = (2*datos.length-1)\/ (double)3;\r\n    System.out.println(\"Media: \" +media);        \r\n    varianza = (16*datos.length-29)\/(double) 90;\r\n    System.out.println(\"Varianza: \" + varianza);\r\n    z= Math.abs((corridas-media)\/Math.sqrt(varianza));\r\n    System.out.println(\"Z=\" + z);     \r\n\r\n    \/\/Obtenemos el valor Z de la tabla de distribuci\u00f3n normal\r\n    NormalDistribution normal = new NormalDistribution();\r\n    double  zn =  normal.inverseCumulativeProbability(1-alfa\/2);\r\n    \/\/Comparamos: si es mayor mi valor Z al de la tabla, no pasa\r\n    if (z &lt; zn){\r\n        System.out.println(\"No se rechaza que son independientes. \" );\r\n    }\r\n    else{\r\n        System.out.println(\"No Pasa la prueba de corridas\");\r\n    }\r\n \r\n}<\/pre>\n<p>Ejecuci\u00f3n<\/p>\n<div id=\"attachment_1791\" style=\"width: 792px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2019\/04\/Prueba-de-corridas.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1791\" class=\"size-full wp-image-1791\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2019\/04\/Prueba-de-corridas.png\" alt=\"Prueba de corridas\" width=\"782\" height=\"272\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2019\/04\/Prueba-de-corridas.png 782w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2019\/04\/Prueba-de-corridas-300x104.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2019\/04\/Prueba-de-corridas-768x267.png 768w\" sizes=\"auto, (max-width: 782px) 100vw, 782px\" \/><\/a><p id=\"caption-attachment-1791\" class=\"wp-caption-text\">Prueba de corridas<\/p><\/div>\n<h2>Referencias<\/h2>\n<ol>\n<li>Dunna, E. G., Reyes, H. G., &amp; Barr\u00f3n, L. E. C. (2006). <a href=\"https:\/\/books.google.com.mx\/books?id=VuEfwtFr1QMC&amp;printsec=frontcover&amp;hl=es#v=onepage&amp;q&amp;f=false\"><strong><i>Simulaci\u00f3n y an\u00e1lisis de sistemas con ProModel<\/i><\/strong><\/a>. Pearson Educaci\u00f3n.<\/li>\n<\/ol>\n<h2>C\u00f3mo citar \u00e9ste art\u00edculo<\/h2>\n<p>Si utilizas \u00e9sta informaci\u00f3n se agradece citar su fuente:<\/p>\n<p>&#8211;&gt;Garc\u00eda, F. G (2019).\u00a0<strong>Prueba de corridas arriba y abajo: implementaci\u00f3n en Java<\/strong>. Disponible en [https:\/\/naps.com.mx\/blog\/prueba-de-corridas-en-java\/] &lt;&#8211;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La prueba de corridas arriba y abajo permite determinar si un conjunto de n\u00fameros pseudoaleatorios son independientes. En \u00e9ste art\u00edculo explicamos esa prueba y su implementaci\u00f3n en el lenguaje de programaci\u00f3n Java.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[216],"tags":[213,125,253,53],"class_list":["post-1773","post","type-post","status-publish","format-standard","hentry","category-simulacion-ciencias","tag-numeros-pseudo-aleatorios","tag-programas-en-java","tag-pruebas-de-independencia","tag-simulacion"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1773","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=1773"}],"version-history":[{"count":28,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1773\/revisions"}],"predecessor-version":[{"id":1825,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1773\/revisions\/1825"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=1773"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=1773"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=1773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}