• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Practica 1 Introduccion Al R
 

Practica 1 Introduccion Al R

on

  • 1,710 views

Pasos para una clase intriductoria de R

Pasos para una clase intriductoria de R

Statistics

Views

Total Views
1,710
Views on SlideShare
1,710
Embed Views
0

Actions

Likes
0
Downloads
19
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Practica 1 Introduccion Al R Practica 1 Introduccion Al R Document Transcript

    • Practica 1: Introduccion a R ┬┤ ┬┤ 1. Introducci┬┤n o R es un lenguaje de alto nivel y un entorno para el an┬┤lisis de datos y gr┬┤- a a ´Čücos. Puede descargarse libremente del sitio llamado CRAN (Comprehensive R Archive Network) en la siguiente direcci┬┤n: http://cran.r-project.org o o bien, simplemente buscando CRAN en Google. Al llegar a la pantalla anterior seguid para descargar el programa la si- guiente ruta: windows/base/R-2.7.2-win32.exe. Una vez instalado el progra- ma en entorno Windows, lo que vemos es la interfaz RGui (GUI es Graphical User Interface en ingl┬┤s), con el s┬┤ e ─▒mbolo > esperando la entrada de instruc- ciones, tal y como puede apreciarse en la ´Čügura siguiente: 1
    • El men┬┤ principal contiene entradas t┬┤ u ─▒picas de otras aplicaciones: Ar- chivo, Editar, Visualizar, Ventanas y Ayuda, m┬┤s otras dos Misc a y Paquetes. El men┬┤ de Ayuda ser┬┤ importante en esta fase inicial. Pa- u a ra obtener esta ayuda podemos tambi┬┤n optar por introducir instrucciones e directamente por teclado. Introduce por ejemplo: > help(vector) y aparecer┬┤ una ventana de ayuda con informaci┬┤n sobre el comando a o vector. Podemos acceder a la misma pantalla desde el men┬┤ Ayuda/Funciones u R (texto), aparecer┬┤ un cuadro en el que deberemos introducir la palabra a vector. Si no recordamos la graf┬┤ de una expresi┬┤n podemos utilizar la ex- ─▒a o presi┬┤n apropos poniendo entre par┬┤ntesis, y entre comillas, la funci┬┤n que o e o buscamos. 2
    • que nos da las expresiones que contienen el t┬┤rmino integer. Lo mismo se e puede conseguir con Ayuda/Sobre y en el cuadro de di┬┤logo que aparece a introducimos integer. R es un lenguaje orientado a objetos. Uno de los m┬┤s simples es vector. a Si queremos crear un vector con las componentes (2, 3, 8) y llamarlo x, tecleamos > x <- c(2, 3, 8) F┬┤─▒jate en que has de introducir el nombre del vector, x, los s┬┤ ─▒mbolos <-, la letra c (de concatenate en ingl┬┤s), y por ultimo las coordenadas del vector e ┬┤ entre par┬┤ntesis. Para ver el vector que hemos creado, simplemente, tecleamos e su nombre: > x [1] 2 3 8 Como ya se ha podido observar al crear el vector x, para hacer asignaci┬┤- o nes a las variables se utiliza una combinaci┬┤n de los s┬┤ o ─▒mbolos < y - (gui┬┤n). o Y, en esta ultima versi┬┤n, tambi┬┤n podemos utilizar el signo =. El signo = ┬┤ o e tambi┬┤n se utilizar┬┤ para asignar valores a par┬┤metros en las funciones. En e a a la salida anterior [1] indica que el 2 que le sigue es el primer elemento del vector. Si el vector ocupara m┬┤s de una l┬┤ a ─▒nea, cada una de las nuevas l┬┤ ─▒neas empezar┬┤ por [n], indicando n el lugar que ocupa dentro del vector la coor- ─▒a denada que le sigue. Las componentes del vector se referencian por medio de ┬┤ ─▒ndices entre corchetes. 3
    • > x <- c(2, 3, 8) > x [1] 2 3 8 > x[2] [1] 3 > x[3] [1] 8 Podemos asignar un nuevo valor a alguna de las componentes del vector como se muestra en el siguiente ejemplo: > x[2] <- -3 > x [1] 2 -3 8 Hemos reemplazado la segunda componente del vector x por el valor -3. Nota: Para corregir una instrucci┬┤n ya introducida, podemos acceder a ella o pulsando la tecla de ´Čéecha hacia arriba, las veces que sea necesario. Para dejar una instrucci┬┤n a medias podemos pulsar la tecla Escape. o 2. Operaciones con vectores y fucniones a) Multiplicaci┬┤n de un vector por un n┬┤mero o u > 2 * x [1] 4 -6 16 b) Potencias > x^3 [1] 8 -27 512 c) Longitud Devuelve la dimensi┬┤n de un vector o > length(x) 4
    • [1] 3 d) Suma y sumas acumuladas Devuelve la suma de las componentes del vector y la suma acumulada de las componentes > sum(x) [1] 7 > cumsum(x) [1] 2 -1 7 e) Valor m┬┤ximo y m┬┤ a ─▒nimo Devuelven los valores m┬┤ximo y m┬┤ a ─▒nimo de las componentes de un vector > max(x) [1] 8 > min(x) [1] -3 f) Media, mediana, cuasivarianza y cuasidesviaci┬┤n t┬┤ o ─▒pica de las compo- nentes Calculan la media, mediana, cuasivarianza, y cuasidesviaci┬┤n o t┬┤ ─▒pica de las componentes del vector > mean(x) [1] 2.333333 > median(x) [1] 2 > var(x) [1] 30.33333 > sd(x) [1] 5.50757 5
    • g) Producto de las componentes y productos acumulados > prod(x) [1] -48 > cumprod(x) [1] 2 -6 -48 h) Cuartiles de x > quantile(x) 0% 25% 50% 75% 100% -3.0 -0.5 2.0 5.0 8.0 i) Ordenaci┬┤n creciente de las componentes del vector o > sort(x) [1] -3 2 8 j) Colocar las componentes de un vector en orden inverso a como han sido introducidas > rev(x) [1] 8 -3 2 ┬┐C┬┤mo ordenar┬┤ en orden decreciente? o ─▒as k) Suma de vectores > x <- c(2, -3, 8) > y <- c(1, 2, 3) > x + y [1] 3 -1 11 l) Combinaci┬┤n lineal de dos vectores o > 5 * x - 2 * y 6
    • [1] 8 -19 34 m) Producto y cociente de vectores > x * y [1] 2 -6 24 > x/y [1] 2.000000 -1.500000 2.666667 n) Covarianza y coe´Čüciente de correlaci┬┤n o > cov(x, y) [1] 3 > cor(x, y) [1] 0.5447048 3. Funciones de uso general 3.1. Exponenciales y logar┬┤ ─▒tmicas Logaritmos neperianos de las componentes > log(y) [1] 0.0000000 0.6931472 1.0986123 Logaritmos en diferentes bases (por ejemplo, base 10) > log(y, 10) [1] 0.0000000 0.3010300 0.4771213 Potencias de base e > exp(y) [1] 2.718282 7.389056 20.085537 7
    • Potencias en cualquier otra base (por ejemplo, 2) > 2^y [1] 2 4 8 3.2. Ra┬┤ ─▒ces cuadradas > sqrt(y) [1] 1.000000 1.414214 1.732051 3.3. Funciones trigonom┬┤tricas e R considera que el argumento viene dado en radianes > sin(y) [1] 0.8414710 0.9092974 0.1411200 > cos(y) [1] 0.5403023 -0.4161468 -0.9899925 > tan(y) [1] 1.5574077 -2.1850399 -0.1425465 > z <- c(0.5, 0.7, 0.2) > z [1] 0.5 0.7 0.2 > asin(z) [1] 0.5235988 0.7753975 0.2013579 > acos(z) [1] 1.0471976 0.7953988 1.3694384 > atan(z) [1] 0.4636476 0.6107260 0.1973956 Todas estas funciones se pueden aplicar directamente sobre valores nu- m┬┤ricos. e > log(3) [1] 1.098612 8
    • 3.4. Otras funciones choose(m,n) da el n┬┤mero de combinaciones de m elementos de orden u n > choose(10, 2) [1] 45 factorial(n) da el factorial de un n┬┤mero (n), o lo que es lo mismo, u calcula las permutaciones de n elementos > factorial(6) [1] 720 runif(n) genera al azar n valores comprendidos entre 0 y 1 > runif(5) [1] 0.2358614 0.5683257 0.9992840 0.2920381 0.2061905 4. Funciones generadas por el usuario Vamos a crear una funci┬┤n que a cada componente de un vector le reste o la media de todas las componentes del vector: desvia<-function(x)x-mean(x) > desvia <- function(x) { + x - mean(x) + } function es la instrucci┬┤n para crear una funci┬┤n. La x que le sigue es o o el argumento de la funci┬┤n y entre llaves est┬┤ lo que la funci┬┤n hace con el o a o argumento. En este ejemplo a cada componente del vector le resta la media de todas las componentes. Para ejecutar la funci┬┤n basta con introducir el o nombre de la misma seguido del argumento entre par┬┤ntesis e > desvia(x) [1] -0.3333333 -5.3333333 5.6666667 Recordemos que 9
    • > x [1] 2 -3 8 > mean(x) [1] 2.333333 ┬┐C┬┤mo calcular┬┤ la media creando tu propia funci┬┤n? ┬┐C┬┤mo calcular┬┤ o ─▒as o o ─▒as la varianza creando tu propia funci┬┤n? Despu┬┤s de intentar dar una respuesta, o e mira las soluciones al ´Čünal de este documento, si lo consideras necesario. 5. Introducci┬┤n de datos o Cuando necesitamos introducir pocos datos, podemos hacerlo como hasta ahora > a <- c(2, 6, 8, 3, 5, 0, 9, 7, 6, 1) Para cantidades no muy grandes de datos podemos utilizar scan() > b<-scan() 1: 1.25 2: 2.56 3: 3.5 4: 2.11 5: 6.32 6: 5.22 7: 6.41 8: Read 7 items Al introducir la instrucci┬┤n nos aparece 1 y el programa queda a la espera o de que introduzcamos un valor, lo hacemos y damos a Enter y aparece 2 para que introduzcamos el siguiente valor. As┬┤ continuaremos hasta el ´Čünal. Para ─▒ indicar que terminamos y que ya no hay m┬┤s datos debemos hacer Enter a sin introducir ning┬┤n valor. Si queremos editar una variable ya introducida u podemos usar la funci┬┤n data.entry(b), que abre una ventana como la o siguiente: 10
    • Podemos agregar un nuevo valor en la ´Čüla 8 y cerrar la ventana. De esta forma el nuevo valor quedar┬┤ incorporado al vector b: a > b [1] 1.25 2.56 3.50 2.11 6.32 5.22 6.41 Podemos observar que ya hay 8 valores. El ultimo que acabamos de ┬┤ introducir es 3.21. Para introducir datos en una variable nueva con da- ta.entry(x), creamos un vector vac┬┤ Por ejemplo: ─▒o. > w <- numeric() Podemos ver el resultado: > w numeric(0) A continuaci┬┤n, tecleamos: o > data.entry(w) Se nos desplegar┬┤ una ventana como la anterior, en la que la primera a columna estar┬┤ encabezada por el nombre del vector vac┬┤ que hemos creado. a ─▒o En dicha columna podremos introducir los valores que queramos. 11
    • Para introducir un n┬┤mero grande de datos podemos utilizar EXCEL, u copiar los datos, volver a R , teclear x<-scan(), y en la entrada 1 pegar los datos. Pulsamos Enter y quedan introducidos. > x<-scan() 1: 2.4 2: 5.6 3: 3.5 4: 1.8 5: 4.5 6: 6.1 7: Read 6 items Hay que tener cuidado con la con´Čüguraci┬┤n del separador decimal de EX- o CEL, que debe estar puesto en ÔÇť.ÔÇŁ, y no en ÔÇť,ÔÇŁ, pues de lo contrario, R nos dar┬┤ error. Si el separador est┬┤ puesto en ÔÇť,ÔÇŁ puede cambiarse desde He- a a rramientas/Opciones/Internacional, donde pondremos el separador decimal con punto y los millares con coma. En pr┬┤cticas posteriores importaremos datos desde EXCEL, SPSS, archi- a vos de texto,etc. Tambi┬┤n se puede utilizar el Bloc de notas de Windows e 6. Dos generadores de datos especiales Si queremos generar un vector con los 100 primeros n┬┤meros naturales, u basta con introducir esta orden: 12
    • > x <- 1:100 Al teclear x obtendremos: > x [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 [91] 91 92 93 94 95 96 97 98 99 100 Hay que ´Čüjarse en que cada ´Čüla est┬┤ encabezada por el n┬┤mero que in- a u dica la posici┬┤n del primer elemento de la ´Čüla. Hasta ahora hemos hecho o la asignaci┬┤n de valores a la variable y la visualizaci┬┤n de los mismos con o o dos instrucciones diferentes. Esto mismo se puede conseguir con una sola instrucci┬┤n poni┬┤ndola entre par┬┤ntesis: o e e > x <- -3:5 > x [1] -3 -2 -1 0 1 2 3 4 5 Tambi┬┤n se pueden generar valores sin asignarlos a ninguna variable, con e lo cual aparecen en pantalla pero no se pueden volver a llamar y, por lo tanto, a utilizar. Nota: El operador : tiene prelaci┬┤n sobre +, -, *, /. Por ejemplo: o > 4 * 1:25 [1] 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 [20] 80 84 88 92 96 100 genera los n┬┤meros del 1 al 25 y los multiplica despu┬┤s por 4. u e Sin embargo > (4 * 1):25 [1] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 multiplica el 1 por 4 y despu┬┤s genera n┬┤meros desde el 4 al 25 e u Otro generador de vectores es la funci┬┤n seq(a,b,r). Con esta instrucci┬┤n o o se genera una lista de n┬┤meros que empieza en a y termina en b, yendo de r u en r. Por ejemplo: > seq(4, 10, 2) 13
    • genera una lista de n┬┤meros que empieza en 4 y termina en 10, yendo de dos u en dos: > seq(4, 10, 2) [1] 4 6 8 10 Otra cosa es seq(a,b,lenght=r). Con esta instrucci┬┤n se generan r n┬┤- o u meros entre a y b a distancias iguales. Por ejemplo: > seq(4, 10, length = 8) [1] 4.000000 4.857143 5.714286 6.571429 7.428571 8.285714 9.142857 [8] 10.000000 7. Gr┬┤´Čücos en R a 7.1. Diagrama de barras Sea > x <- c(1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 4) La funci┬┤n table tabula los datos en x table(x) produce: o > table(x) x 1 2 3 4 3 4 1 3 Este resultado nos indica que el 1 aparece tres veces, el 2 cuatro veces, el 3 una vez y el 4 tres veces. La instrucci┬┤n barplot(table(x)) muestra el o diagrama de barras: > barplot(table(x)) 14
    • 4 3 2 1 0 1 2 3 4 El diagrama se puede completar con t┬┤ ─▒tulos, subt┬┤ ─▒tulos y etiquetas en los ejes. > barplot(table(x), main = "T┬┤tulo principal", sub = "Subt┬┤tulo", ─▒ ─▒ + xlab = "Texto en x", ylab = "Texto en y") Si tenemos los datos en un vector x y las frecuencias correspondientes en otro vector y, podemos tambi┬┤n obtener el diagrama de barras procediendo e de la siguiente forma: > x <- c(1, 2, 3, 4) > y <- c(3, 4, 1, 3) > barplot(y, names.arg = x) 15
    • 4 3 2 1 0 1 2 3 4 7.2. Histograma Consideremos una variable con 100 valores generados de la siguiente for- ma: > set.seed(111) > x <- rnorm(100) rnorm(100) genera 100 cien valores y set.seed(111) hace que en todos los ordenadores los n┬┤meros generados sean los mismos. Probemos: u > x [1] 0.23522071 -0.33073587 -0.31162382 -2.30234566 -0.17087604 0.14027823 [7] -1.49742666 -1.01018842 -0.94847560 -0.49396222 -0.17367413 -0.40659878 [13] 1.84563626 0.39405411 0.79752850 -1.56666536 -0.08585101 -0.35913948 [19] -1.19360897 0.36418674 0.36166245 0.34696437 0.18973653 -0.15957681 [25] 0.32654924 0.59825420 -1.84153430 2.71805560 0.19124439 -1.30129607 [31] -3.11321730 -0.94135740 1.40025878 -1.62047003 -2.26599596 1.16299359 [37] -0.11615504 0.33425601 -0.62085811 -1.30984491 -1.17572604 -1.12121553 [43] -1.36190448 0.48112458 0.74197163 0.02782463 0.33137971 0.64411413 16
    • [49] 2.48566156 1.95998171 0.19166338 1.55254427 0.91424229 0.35862537 [55] 0.17509564 -0.84726777 0.97823166 1.80586826 0.12291480 -0.12977203 [61] -0.21642866 1.44647817 0.40970980 0.91091657 1.43035817 -0.38129196 [67] 0.20230718 -0.80619919 0.29463418 1.40488308 1.02376685 0.47612606 [73] -0.67033033 0.15923432 -0.38271538 0.93576259 -0.63153227 -0.09830608 [79] 1.03198498 0.38780843 -1.25612931 -0.78695273 0.42981155 -0.37641622 [85] -1.21622907 1.02927851 0.43039700 -1.24557402 -0.60272849 0.66006939 [91] 2.05074953 0.49080818 -1.73147942 0.71088366 0.01382291 -1.40104160 [97] 1.25912367 -0.12747752 -0.72938651 -1.21136136 El histograma se puede obtener con la instrucci┬┤n hist(). Para obtener o el n┬┤mero de intervalos se usa la f┬┤rmula de Sturges. u o > hist(x) Si queremos usar amplitudes de intervalos dados por la f┬┤rmula de Scott , o siendo s la cuasidesviaci┬┤n t┬┤ o ─▒pica, o bien la de Freedman-Diaconis , siendo IQ el rango intercuart┬┤─▒lico, debemos utilizar el par┬┤metro breaks. Por ejemplo: a > hist(x, breaks = "Scott") > hist(x, breaks = "FD") Histogram of x Histogram of x 25 30 20 Frequency Frequency 15 20 10 10 5 0 0 Ôłĺ4 Ôłĺ3 Ôłĺ2 Ôłĺ1 0 1 2 3 Ôłĺ3 Ôłĺ2 Ôłĺ1 0 1 2 3 x x Podemos elegir nuestros propios intervalos. Por ejemplo: > hist(x, breaks = c(-4, -2, 0, 1.5, 3)) 17
    • Histogram of x 0.30 0.25 0.20 Density 0.15 0.10 0.05 0.00 Ôłĺ4 Ôłĺ3 Ôłĺ2 Ôłĺ1 0 1 2 3 x Se pueden a╦ťadir t┬┤ n ─▒tulos, subt┬┤ ─▒tulos, etc. de la misma forma que con barplot(): > hist(x, breaks = c(-4, -2, 0, 1.5, 3), main = "T┬┤tulo Principal", ─▒ + sub = "Subt┬┤tulo", xlab = "Etiqueta x", ylab = "Etiqueta y") ─▒ 7.3. Diagramas de cajas y bigotes Con boxplot() generamos diagramas de cajas y bigotes > boxplot(x, main = "Principal", sub = "Subt┬┤tulo", ylab = "Etiqueta y") ─▒ Podemos ver dos valores at┬┤ ─▒picos (outliers), uno por cada extremo. 7.4. Diagrama de tallos y hojas Con las instrucciones siguientes, vamos a generar 40 valores entre 0.1 y 10. > set.seed(111) > y <- ceiling(100 * runif(40))/10 18
    • > y [1] 6.0 7.3 3.8 5.2 3.8 4.2 0.2 5.4 4.4 1.0 5.6 6.0 0.7 0.5 1.6 4.5 1.8 9.7 3.2 [20] 6.2 4.4 2.9 3.5 3.9 9.7 3.3 6.6 2.9 7.9 6.0 0.6 5.1 4.7 4.7 3.6 7.2 1.2 7.9 [39] 6.5 8.1 Con la instrucci┬┤n ceiling(100*runif(40))/10 primero, con runif() se o generan 40 valores aleatorios entre 0 y 1. Al multiplicar por 100, los n┬┤meros u se encontrar┬┤n entre 0 y 100 y con ceiling, obtendremos el entero mayor m┬┤s a a pr┬┤ximo. Por ultimo, al dividir por 10, los n┬┤meros quedan entre 0 y 10. El o ┬┤ u diagrama de tallos y hojas lo generamos con la instrucci┬┤n stem(): o > stem(y) The decimal point is at the | 0 | 2567 1 | 0268 2 | 99 3 | 2356889 4 | 244577 5 | 1246 6 | 000256 7 | 2399 8 | 1 9 | 77 7.5. Diagrama de puntos Utilizaremos stripchart(y,method="stack",pch=1). pch nos indica el tipo de marca que aparecer┬┤ en el diagrama (c┬┤ a ─▒rculo, tri┬┤ngulo, cuadrado, a etc.). Si no especi´Čücamos nada, el cuadrado es el tipo de marca por defecto. El m┬┤todo "stack" concatena m┬┤ltiples vectores en uno solo, con un factor e u que indica d┬┤nde est┬┤ el inicio de cada observaci┬┤n. o a o > stripchart(y, method = "stack", pch = 2) 19
    • 0 2 4 6 8 10 7.6. Diagrama de sectores Es preciso disponer de dos vectores. Uno con los valores y el otro con los nombres. Por ejemplo: > z <- c(15, 25, 36, 40) > z.nombres <- c("ni~os", "j┬┤venes", "maduros", "ancianos") n o Con la instrucci┬┤n pie() generamos el diagrama de sectores. o > pie(z, labels = z.nombres) 8. Soluciones Ordenaci┬┤n en orden decreciente o > rev(sort(x)) 20
    • [1] 2.71805560 2.48566156 2.05074953 1.95998171 1.84563626 1.80586826 [7] 1.55254427 1.44647817 1.43035817 1.40488308 1.40025878 1.25912367 [13] 1.16299359 1.03198498 1.02927851 1.02376685 0.97823166 0.93576259 [19] 0.91424229 0.91091657 0.79752850 0.74197163 0.71088366 0.66006939 [25] 0.64411413 0.59825420 0.49080818 0.48112458 0.47612606 0.43039700 [31] 0.42981155 0.40970980 0.39405411 0.38780843 0.36418674 0.36166245 [37] 0.35862537 0.34696437 0.33425601 0.33137971 0.32654924 0.29463418 [43] 0.23522071 0.20230718 0.19166338 0.19124439 0.18973653 0.17509564 [49] 0.15923432 0.14027823 0.12291480 0.02782463 0.01382291 -0.08585101 [55] -0.09830608 -0.11615504 -0.12747752 -0.12977203 -0.15957681 -0.17087604 [61] -0.17367413 -0.21642866 -0.31162382 -0.33073587 -0.35913948 -0.37641622 [67] -0.38129196 -0.38271538 -0.40659878 -0.49396222 -0.60272849 -0.62085811 [73] -0.63153227 -0.67033033 -0.72938651 -0.78695273 -0.80619919 -0.84726777 [79] -0.94135740 -0.94847560 -1.01018842 -1.12121553 -1.17572604 -1.19360897 [85] -1.21136136 -1.21622907 -1.24557402 -1.25612931 -1.30129607 -1.30984491 [91] -1.36190448 -1.40104160 -1.49742666 -1.56666536 -1.62047003 -1.73147942 [97] -1.84153430 -2.26599596 -2.30234566 -3.11321730 Funci┬┤n para calcular la media o > media <- function(x) { + sum(x)/length(x) + } Funci┬┤n para calcular la varianza o ^ varianza<-function(x)sum((x-mean(x))2)/length(x) 21