[MÚSICA] [MÚSICA] [MÚSICA] R provee una gran cantidad de funciones para hacer operaciones matemáticas, estadísticas, de álgebra lineal, de conjuntos, e incluso algunas operaciones utilitarias. En esta lección aprenderemos qué tipo de funciones podemos acceder y además cómo podemos utilizar estas para llevar a cabo simulaciones. Los primeros tipos de funciones que veremos son las funciones matemáticas. Por ejemplo, la función exponencial, que lo que hace es recibe un vector numérico o un valor numérico y nos regresa el número e elevado a ese valor numérico. También está la función logarítmica que hace exactamente lo mismo, recibe un vector o un valor numérico y nos regresa el logaritmo en base e y también la función en base 10 del logaritmo, que son muy parecidas. Además también tenemos la función raíz cuadrada que saca la raíz cuadrada del número que introduzcamos o de todo el vector completo, también la función abs o valor absoluto que nos encuentra el valor absoluto del vector o número que estemos observando, también las funciones trigonométricas, las 6 básicas, seno, coseno, tangente, secante, cosecante y cotangente, y también las funciones mínimo y máximo, que nos encuentran el mínimo en un vector y el máximo en un vector completo. También tenemos las funciones which.min y which.max que nos indican el índice en donde se encuentra el valor mínimo y el valor máximo. Además, de que también tenemos las funciones pmin y pmax que reciben varios vectores, y entonces va sacando renglón a renglón el valor mínimo o máximo de ese conjunto de vectores, es decir nos regresa un vector con los valores mínimos del conjunto de varios al mismo tiempo. También tenemos un par de funciones que you hemos usado antes, sum y prod, estas reciben como entrada un vector y lo único que hacen es regresan la suma o el producto de todos los elementos de ese vector. En esa misma línea cumsum y cumprod son 2 funciones que hacen más o menos lo mismo, la primera lo que hace recibe un vector y nos regresa un vector donde cada uno de los elementos va acumulando la suma elemento a elemento de todos los elementos del vector original, mientras que cumprod lo que va haciendo es ir acumulando pero la multiplicación de los elementos elemento a elemento en ese vector inicial. También tenemos las funciones round, ceiling y floor. Estas lo que hacen es redondean al entero más cercano, pero depende de cada una. Round lo hace dependiendo del elemento más cercano numéricamente, mientras que floor lo que hace es redondea pero al entero hacia abajo y ceiling redondea al entero hacia arriba. Por supuesto el vector o valor numérico que va a recibir es un número que puede ser decimal. Finalmente una última función que veremos es la función factorial, esta lo que hace es calcula el factorial de x. Por lo tanto, el vector que tiene que recibir es un vector de valores enteros o al menos numéricos que estén redondeados a 0. Ahora veremos algunas funciones para álgebra lineal. you nos hemos topado un poco con el álgebra lineal porque trabajamos en general con vectores o matrices, pero también hemos visto que podemos multiplicar un escalar, es decir un valor numérico por un vector completo y también que podemos llevar a cabo la operación de multiplicación entre matrices utilizando el operador %*%. Otra función importante es crossprod, esa lo que hace es recibe 2 vectores con la misma dimensión y nos regresa el producto punto de esos 2 vectores, es decir que el producto punto se define como la multiplicación elemento a elemento de 2 vectores, y al final sumas todos los elementos para tener un único valor numérico. Una función muy importante dentro de las funciones de álgebra lineal es la función solve, esta lo que hace es resuelve sistemas de ecuaciones lineales o incluso puede resolver matrices inversas. Por ejemplo supongamos que tenemos el siguiente sistema de ecuaciones lineales, x1 + x2 igual a 2 y menos x1 + x2 igual a 4. Esto lo podemos expresar de manera matricial de la siguiente forma, primero una matriz 1, menos 1, 1, 1, multiplicada por un vector columna x1, x2 y eso igual a un vector columna 2, 4. Ahora, si quisiéramos resolver este sistema en R lo haríamos de la siguiente manera. Creamos nuestra matriz por supuesto, y luego generamos también nuestro vector de salida, que es el vector y 2,4 y luego simplemente decimos solve la matriz x y el vector columna y. Esto nos regresará la solución de ese sistema, en ese caso x1 igual a menos 1 y x2 igual a 3. La segunda llamada solve donde solo recibe como entrada la matriz x, nos dará la matriz inversa de x, y podemos ver o comprobar que es correcto you que al multiplicar la matriz inversa de x, es decir solve x con la matriz original x entonces nos dará la matriz identidad. Otras funciones que son útiles dentro del álgebra lineal es la función t que lo que nos da es una transpuesta de una matriz, la función qr que nos encuentra la descomposición qr de álgebra lineal de una matriz, y finalmente la función chol que nos encuentra la descomposición de Cholesky. Estas funciones nos pueden servir mucho para agilizar algunos cálculos cuando queremos encontrar matrices inversas. Otras 2 funciones que son muy útiles son det, que nos encuentra el determinante de una matriz y eigen, que nos encuentra los eigenvectores y los eigenvalores de una matriz. Esas son muy útiles porque si tuviéramos que escribir el código para ellas haciéndolo serialmente sería 1, muy complicado y 2, también nos haría el código demasiado largo. Otra función muy importante dentro de las funciones de álgebra lineal es la función diag, que nos ayuda a extraer la diagonal de una matriz cuadrada. En este ejemplo podemos ver que podemos extraer la diagonal de la función, de la matriz x y una vez creada podemos crear una función con esa diagonal usando también la función diag de nuevo, solo que nos llenará de ceros todo lo que no sea la diagonal. Otra manera de utilizar la función diag es indicándole con un valor numérico las dimensiones que queremos, es decir si utilizamos diag2 o diag3, los que nos generará es una matrix de 2 por 2 o de 3 por 3 identidad donde solo la diagonal está llena de unos y lo demás completamente lleno de ceros. La última función que veremos en las funciones de álgebra lineal es la función sweep, lo que hace esta función es hacer operaciones de barrido sobre matrices. Esta funciona muy parecido a la función apply donde teníamos que indicar el modo, que iba a ser si va a ser por renglones o por columnas. En el ejemplo lo que estamos observando es que estamos haciendo una operación renglón a renglón, y como le estamos pasando un vector, el vector 1, 2, 3, y una matriz, la matriz b, lo que va a hacer es operar la operación que decimos al final, es decir la suma, renglón por renglón, es decir una vez que se lleva a cabo va a ir sumando el elemento de ese vector que estamos poniendo el 1, 2, 3, a cada uno de los renglones que estamos observando de nuestra matriz. Ahora veremos un par de funciones que son utilitarias. Una de ellas pues es la función sort. Esta recibe un vector como argumento y nos regresa el mismo vector pero ordenado, por omisión nos regresa el vector ordenado de forma creciente, pero podemos utilizar el parámetro decreasing igual a true para que nos lo haga de forma decreciente. Luego tenemos la función choose donde recibe 2 parámetros n y k, ambos enteros donde nos da el posible números de subconjuntos de tamaño k de un conjunto de tamaño n. Esto es muy común cuando se están tratando de encontrar combinaciones por ejemplo. También podemos llevar a cabo operaciones con conjuntos, donde nuestros conjuntos pueden ser vectores. Las 3 primeras funciones que vamos a ver son la unión, que lo que hace es une el conjunto x con el conjunto y, la función intersección que nos regresan los elementos que son comunes a ambos conjuntos y la función diferencia que nos da la diferencia de conjuntos de 2 vectores. Las últimas 2 operaciones de conjuntos que vamos a ver son setequal, que esta nos regresa un valor lógico, verdadero o falso, donde nos da verdadero si los 2 vectores son iguales y falso si estos tienen algún elemento o varios elementos diferentes. También está el operador que también es una función en realidad, %in% que nos dice si el elemento que estamos poniendo primero pertenece al vector que estamos teniendo del lado derecho. Ahora veremos las funciones de distribuciones estadísticas en R. R prácticamente tiene toda función de distribución estadísticas conocida. Principalmente, las que son base de un curso de probabilidad básico. La convención para nombrarlas es usar un prefijo y luego el nombre de la función. Hay 4 prefijos, r para designar aquellas funciones que están generando números aleatorios de esa distribución, p para designar aquellas funciones que están designando la acumulada de esa función de distribución, d para las funciones que nos están dando la densidad de masa de esa función, y q para designar aquellas funciones donde estamos queriendo encontrar un cuantil de esa función de distribución. En realidad hay una gran cantidad de ellas, como las que estamos observando en este momento. Pero, solo para ejemplificar una, utilizaremos por ejemplo la función rnorm donde antes ponemos la semilla de esta función set.seed que you habíamos hablado antes, y luego generamos un número, un gran número de funciones, de valores provenientes de una normal con parámetros 0 y 1, es decir la media 0 y la varianza 1. Y una vez que tengamos eso sacamos la media de ella y encontraremos que el promedio es muy cercano a 1. En este otro ejemplo, estamos también utilizando la función qnorm para encontrar los cuantiles. En el primero, buscamos un valor de un cuantil que nosotros you conocemos para una función normal con parámetros 0 y 1. Sabemos que el cuantil 0.5, es decir donde la probabilidad se ha acumulado a 0.5 nos va a dar 0. Solo para comprobarlo, utilizamos la función qnorm y podemos observar que sí, efectivamente el valor es 0. Para un valor donde la probabilidad se ha acumulado más, es muy cerca a 1, podemos ver que después del valor 1.64 esa probabilidad you se ha acumulado, al igual también por ejemplo cuando nosotros pedimos el valor de la función cuando ha acumulado la probabilidad 1, podemos ver que es infinito, y cuando es 0, es menos infinito. Es decir, la función qnorm nos está dando los cuantiles correctos. [MÚSICA] [MÚSICA]