I1M2017: Ejercicios de estadística descriptiva con las librerías de Haskell
En la tercera parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos comentado las soluciones a los ejercicios de la relación 23 sobre estadística descriptiva usando las librerías de Haskell.
Las librerías de estadística utilizadas son Statistics.Sample y Statistics.LinearRegression.
Los ejercicios y su solución se muestran a continuación
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
-- --------------------------------------------------------------------- -- Introducción -- -- --------------------------------------------------------------------- -- El objetivo de esta relación es redefinir algunas medidas -- estadísticas de centralización vista en la relación anterior usando -- las librerías de estadística -- Statistics.Sample http://bit.ly/2GdvkF5 -- Statistics.LinearRegression http://bit.ly/2HimtmU -- -- Se pueden instalar con cabal -- cabal install statistics statistics-linreg -- --------------------------------------------------------------------- -- Librerías auxiliares -- -- --------------------------------------------------------------------- import Data.Vector (fromList) import Statistics.Sample import Statistics.LinearRegression import Data.Function (on) -- --------------------------------------------------------------------- -- Medidas de centralización -- -- --------------------------------------------------------------------- -- --------------------------------------------------------------------- -- Ejercicio 1. Definir la función -- media :: [Double] -> Double -- tal que (media xs) es la media aritmética de los números de la lista -- xs. Por ejemplo, -- media [4,8,4,5,9] == 6.0 -- --------------------------------------------------------------------- media :: [Double] -> Double media = mean . fromList -- --------------------------------------------------------------------- -- Ejercicio 6. La media geométrica de una lista de n números es la -- raíz n-ésima del producto de todos los números. -- -- Definir la función -- mediaGeometrica :: [Double] -> Double -- tal que (mediaGeometrica xs) es la media geométrica de xs. Por -- ejemplo, -- mediaGeometrica [2,18] == 6.0 -- mediaGeometrica [3,1,9] == 3.0000000000000004 -- --------------------------------------------------------------------- mediaGeometrica :: [Double] -> Double mediaGeometrica = geometricMean . fromList -- --------------------------------------------------------------------- -- Medidas de dispersión -- -- --------------------------------------------------------------------- -- --------------------------------------------------------------------- -- Ejercicio 8. El recorrido (o rango) de una lista de valores es la -- diferencia entre el mayor y el menor. -- -- Definir la función -- [Double] -> Double -- tal que (rango xs) es el rango de xs. Por ejemplo, -- rango [4,2,4,7,3] == 5.0 -- --------------------------------------------------------------------- rango :: [Double] -> Double rango = range . fromList -- --------------------------------------------------------------------- -- Ejercicio 10. La varianza de una lista datos es la media de los -- cuadrados de las distancias de los datos a la media. Por ejemplo, la -- varianza de [4,8,4,5,9] es 4.4 ya que la media de [4,8,4,5,9] es 6 y -- ((4-6)^2 + (8-6)^2 + (4-6)^2 + (5-6)^2 + (9-6)^2) / 5 -- = (4 + 4 + 4 + 1 + 9) / 5 -- = 4.4 -- -- Definir la función -- varianza :: [Double] -> Double -- tal que (desviacionMedia xs) es la varianza de xs. Por ejemplo, -- varianza [4,8,4,5,9] == 4.4 -- varianza (replicate 10 3) == 0.0 -- --------------------------------------------------------------------- varianza :: [Double] -> Double varianza = fastVariance . fromList -- --------------------------------------------------------------------- -- Ejercicio 11. La desviación típica de una lista de datos es la raíz -- cuadrada de su varianza. -- -- Definir la función -- desviacionTipica :: [Double] -> Double -- tal que (desviacionTipica xs) es la desviación típica de xs. Por -- ejemplo, -- desviacionTipica [4,8,4,5,9] == 2.0976176963403033 -- desviacionTipica (replicate 10 3) == 0.0 -- --------------------------------------------------------------------- desviacionTipica :: [Double] -> Double desviacionTipica = fastStdDev . fromList -- --------------------------------------------------------------------- -- Regresión lineal -- -- --------------------------------------------------------------------- -- --------------------------------------------------------------------- -- Ejercicio 12. Dadas dos listas de valores -- xs = [x(1), x(2), ..., x(n)] -- ys = [y(1), y(2), ..., y(n)] -- la ecuación de la recta de regresión de ys sobre xs es y = a+bx, -- donde -- b = (nΣx(i)y(i) - Σx(i)Σy(i)) / (nΣx(i)² - (Σx(i))²) -- a = (Σy(i) - bΣx(i)) / n -- -- Definir la función -- regresionLineal :: [Double] -> [Double] -> (Double,Double) -- tal que (regresionLineal xs ys) es el par (a,b) de los coeficientes -- de la recta de regresión de ys sobre xs. Por ejemplo, para los -- valores -- ejX, ejY :: [Double] -- ejX = [5, 7, 10, 12, 16, 20, 23, 27, 19, 14] -- ejY = [9, 11, 15, 16, 20, 24, 27, 29, 22, 20] -- se tiene -- λ> regresionLineal ejX ejY -- (5.195045748716805,0.9218924347243919) -- --------------------------------------------------------------------- ejX, ejY :: [Double] ejX = [5, 7, 10, 12, 16, 20, 23, 27, 19, 14] ejY = [9, 11, 15, 16, 20, 24, 27, 29, 22, 20] -- 1ª definición regresionLineal :: [Double] -> [Double] -> (Double,Double) regresionLineal xs ys = linearRegression (fromList xs) (fromList ys) -- 2ª definición regresionLineal2 :: [Double] -> [Double] -> (Double,Double) regresionLineal2 = linearRegression `on` fromList |