{"id":5933,"date":"2018-02-16T23:43:44","date_gmt":"2018-02-16T22:43:44","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=5933"},"modified":"2018-02-17T15:44:53","modified_gmt":"2018-02-17T14:44:53","slug":"i1m2017-ejercicios-de-estadistica-descriptiva-con-las-librerias-de-haskell","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2017-ejercicios-de-estadistica-descriptiva-con-las-librerias-de-haskell\/","title":{"rendered":"I1M2017: Ejercicios de estad\u00edstica descriptiva con las librer\u00edas de Haskell"},"content":{"rendered":"<p>En la tercera parte de la clase de hoy de <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-17\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> hemos comentado las soluciones a los ejercicios de la relaci\u00f3n 23 sobre estad\u00edstica descriptiva usando las librer\u00edas de Haskell.<\/p>\n<p>Las librer\u00edas de estad\u00edstica utilizadas son <a href=\"http:\/\/bit.ly\/2GdvkF5\">Statistics.Sample<\/a> y <a href=\"http:\/\/bit.ly\/2HimtmU\">Statistics.LinearRegression<\/a>.<\/p>\n<p>Los ejercicios y su soluci\u00f3n se muestran a continuaci\u00f3n<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\n-- ---------------------------------------------------------------------\n-- Introducci\u00f3n                                                       --\n-- ---------------------------------------------------------------------\n\n-- El objetivo de esta relaci\u00f3n es redefinir algunas medidas\n-- estad\u00edsticas de centralizaci\u00f3n vista en la relaci\u00f3n anterior usando \n-- las librer\u00edas de estad\u00edstica\n--    Statistics.Sample           http:\/\/bit.ly\/2GdvkF5\n--    Statistics.LinearRegression http:\/\/bit.ly\/2HimtmU\n--\n-- Se pueden instalar con cabal\n--    cabal install statistics statistics-linreg\n\n-- ---------------------------------------------------------------------\n-- Librer\u00edas auxiliares                                               --\n-- ---------------------------------------------------------------------\n\nimport Data.Vector (fromList)\nimport Statistics.Sample\nimport Statistics.LinearRegression\nimport Data.Function (on)\n\n-- ---------------------------------------------------------------------\n-- Medidas de centralizaci\u00f3n                                          --\n-- ---------------------------------------------------------------------\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 1. Definir la funci\u00f3n\n--    media :: [Double] -> Double\n-- tal que (media xs) es la media aritm\u00e9tica de los n\u00fameros de la lista\n-- xs. Por ejemplo,\n--    media [4,8,4,5,9]  ==  6.0\n-- ---------------------------------------------------------------------\n\nmedia :: [Double] -> Double\nmedia = mean . fromList\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 6. La media geom\u00e9trica de una lista de n n\u00fameros es la\n-- ra\u00edz n-\u00e9sima del producto de todos los n\u00fameros.\n-- \n-- Definir la funci\u00f3n\n--    mediaGeometrica :: [Double] -> Double\n-- tal que (mediaGeometrica xs) es la media geom\u00e9trica de xs. Por\n-- ejemplo, \n--    mediaGeometrica [2,18]   ==  6.0\n--    mediaGeometrica [3,1,9]  ==  3.0000000000000004\n-- ---------------------------------------------------------------------\n\nmediaGeometrica :: [Double] -> Double\nmediaGeometrica = geometricMean . fromList\n\n-- ---------------------------------------------------------------------\n-- Medidas de dispersi\u00f3n                                              --\n-- ---------------------------------------------------------------------\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 8. El recorrido (o rango) de una lista de valores es la\n-- diferencia entre el mayor y el menor.\n-- \n-- Definir la funci\u00f3n \n--    [Double] -> Double\n-- tal que (rango xs) es el rango de xs. Por ejemplo,\n--    rango [4,2,4,7,3]  ==  5.0\n-- ---------------------------------------------------------------------\n\nrango :: [Double] -> Double\nrango = range . fromList\n \n-- ---------------------------------------------------------------------\n-- Ejercicio 10. La varianza de una lista datos es la media de los\n-- cuadrados de las distancias de los datos a la media. Por ejemplo, la\n-- varianza de [4,8,4,5,9] es 4.4 ya que la media de [4,8,4,5,9] es 6 y\n--      ((4-6)^2 + (8-6)^2 + (4-6)^2 + (5-6)^2 + (9-6)^2) \/ 5\n--    = (4 + 4 + 4 + 1 + 9) \/ 5\n--    = 4.4\n-- \n-- Definir la funci\u00f3n\n--    varianza :: [Double] -> Double\n-- tal que (desviacionMedia xs) es la varianza de xs. Por ejemplo, \n--    varianza [4,8,4,5,9]       ==  4.4\n--    varianza (replicate 10 3)  ==  0.0\n-- ---------------------------------------------------------------------\n\nvarianza :: [Double] -> Double\nvarianza = fastVariance . fromList\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 11. La desviaci\u00f3n t\u00edpica de una lista de datos es la ra\u00edz\n-- cuadrada de su varianza.  \n-- \n-- Definir la funci\u00f3n \n--    desviacionTipica :: [Double] -> Double\n-- tal que (desviacionTipica xs) es la desviaci\u00f3n t\u00edpica de xs. Por\n-- ejemplo, \n--    desviacionTipica [4,8,4,5,9]       ==  2.0976176963403033\n--    desviacionTipica (replicate 10 3)  ==  0.0\n-- ---------------------------------------------------------------------\n\ndesviacionTipica :: [Double] -> Double\ndesviacionTipica = fastStdDev . fromList\n\n-- ---------------------------------------------------------------------\n-- Regresi\u00f3n lineal                                                   --\n-- ---------------------------------------------------------------------\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 12. Dadas dos listas de valores \n--    xs = [x(1), x(2), ..., x(n)]\n--    ys = [y(1), y(2), ..., y(n)]\n-- la ecuaci\u00f3n de la recta de regresi\u00f3n de ys sobre xs es y = a+bx, \n-- donde\n--    b = (n\u03a3x(i)y(i) - \u03a3x(i)\u03a3y(i)) \/ (n\u03a3x(i)\u00b2 - (\u03a3x(i))\u00b2)\n--    a = (\u03a3y(i) - b\u03a3x(i)) \/ n\n-- \n-- Definir la funci\u00f3n \n--    regresionLineal :: [Double] -> [Double] -> (Double,Double)\n-- tal que (regresionLineal xs ys) es el par (a,b) de los coeficientes\n-- de la recta de regresi\u00f3n de ys sobre xs. Por ejemplo, para los\n-- valores \n--    ejX, ejY :: [Double]\n--    ejX = [5,  7, 10, 12, 16, 20, 23, 27, 19, 14]\n--    ejY = [9, 11, 15, 16, 20, 24, 27, 29, 22, 20]\n-- se tiene\n--    \u03bb> regresionLineal ejX ejY\n--    (5.195045748716805,0.9218924347243919)\n-- ---------------------------------------------------------------------\n\nejX, ejY :: [Double]\nejX = [5,  7, 10, 12, 16, 20, 23, 27, 19, 14]\nejY = [9, 11, 15, 16, 20, 24, 27, 29, 22, 20]\n\n-- 1\u00aa definici\u00f3n\nregresionLineal :: [Double] -> [Double] -> (Double,Double)\nregresionLineal xs ys = \n  linearRegression (fromList xs) (fromList ys) \n\n-- 2\u00aa definici\u00f3n\nregresionLineal2 :: [Double] -> [Double] -> (Double,Double)\nregresionLineal2 = linearRegression `on` fromList\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la tercera parte de la clase de hoy de Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas hemos comentado las soluciones a los ejercicios de la relaci\u00f3n 23 sobre estad\u00edstica descriptiva usando las librer\u00edas de Haskell. Las librer\u00edas de estad\u00edstica utilizadas son Statistics.Sample y Statistics.LinearRegression. Los ejercicios y su soluci\u00f3n se muestran a continuaci\u00f3n<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[265],"tags":[270,316],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/5933"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/comments?post=5933"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/5933\/revisions"}],"predecessor-version":[{"id":5934,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/5933\/revisions\/5934"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=5933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=5933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=5933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}