Skip to content

Commit 6d45a18

Browse files
committed
Merge branch 'master' of https://github.com/joanby/r-basic
2 parents d0ae553 + 0bf83a0 commit 6d45a18

3 files changed

Lines changed: 536 additions & 4 deletions

File tree

data/datacrab.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"input" "color.spine" "width" "satell" "weight"
1+
"input" "color" "spine" "width" "satell" "weight"
22
"1" 3 3 28.3 8 3050
33
"2" 4 3 22.5 0 1550
44
"3" 2 1 26 9 2300

teoria/Tema7.Rmd

Lines changed: 240 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,14 +173,22 @@ clientela
173173
**Ejercicio.** Calculad todas las frecuencias y comprobad que son exactamente estas.
174174
</div>
175175

176+
## Frecuencia relativa acumulada
177+
178+
Los gráficos para frecuencias absolutas y relativas absolutas de variables ordinales son exactamente los mismos que para las variables cualitativas.
179+
180+
También podemos utilizar diagramas de barras para describir frecuencias acumuladas: en este caso, la altura de cada barra debe ser igual a la frecuencia acumulada del nivel respectivo. Además, estos niveles deben de aparecer ordenados de manera ascendente, de forma que las alturas de las barras también tengan un orden ascendente.
181+
182+
No obstante, se recomienda no hacer uso de diagramas circulares a la hora de representar frecuencias acumuladas, debido a que éstos no representan la información sobre la acumulación de datos de forma fácil de entender a simple vista.
183+
176184

177185
# Descripción de datos ordinales con R
178186

179187
## Función cumsum()
180188

181189
¿Recordáis la función `cumsum()`? Pues esta puede ser utilizada a la hora de calcular frecuencias acumuladas.
182190

183-
Retomemos el ejemplo anterior y calculemos y representemos en un diagrama de barras las frecuencias acumuladas de la muestra de notas.
191+
Retomemos el ejemplo anterior de las notas de los estudiantes y calculemos y representemos en un diagrama de barras las frecuencias acumuladas de la muestra de notas.
184192

185193
```{r}
186194
notas
@@ -217,3 +225,234 @@ Pero no podemos hacer `cumsum(prop.table(table(notas)))`.
217225
<div class = "exercise">
218226
**Ejercicio.** Pensad qué ha entendido R que queríamos hacer con esta última instrucción.
219227
</div>
228+
229+
## Función cumsum()
230+
231+
<div class = "example">
232+
233+
**Ejemplo 3**
234+
235+
Se ha evaluado el tamaño de los cuellos de 100 jirafas. Los niveles que se han utilizado se los considera ordenados de la siguiente manera:
236+
237+
$$\text{Muy.corto}<\text{Corto}<\text{Normal}<\text{Largo}<\text{Muy.largo}$$
238+
239+
Los valores obtenidos en dicho estudio han sido los siguientes
240+
241+
</div>
242+
243+
## Función cumsum()
244+
245+
```{r, echo = FALSE}
246+
set.seed(2018)
247+
longitud = sample(1:5,100, replace = TRUE)
248+
longitud = ordered(longitud)
249+
levels(longitud) = c("Muy.corto","Corto","Normal","Largo","Muy.largo")
250+
```
251+
252+
```{r}
253+
longitud
254+
set.seed(NULL)
255+
```
256+
257+
## Función cumsum()
258+
259+
<div class = "example">
260+
261+
**Ejemplo 3**
262+
263+
Estudiemos sus frecuencias
264+
265+
</div>
266+
267+
```{r}
268+
Fr.Abs = table(longitud)
269+
Fr.Abs
270+
Fr.Rel = prop.table(Fr.Abs)
271+
Fr.Rel
272+
```
273+
274+
## Función cumsum()
275+
276+
```{r}
277+
Fr.Acum = cumsum(Fr.Abs)
278+
Fr.Acum
279+
Fr.RAcum = cumsum(Fr.Rel)
280+
Fr.RAcum
281+
```
282+
283+
## Función cumsum()
284+
285+
<div class = "example">
286+
287+
**Ejemplo 3**
288+
289+
La instrucción `barplot` produce el siguiente diagrama de barras de frecuencias relativas acumuladas
290+
291+
</div>
292+
293+
```{r}
294+
barplot(Fr.RAcum, main = "Diagrama de frecuencias relativas acumuladas")
295+
```
296+
297+
## Función cumsum()
298+
299+
Para calcular frecuencias acumuladas en una tabla multidimensional, hay que aplicar a la tabla la función `cumsum` mediante la función `apply` que ya explicábamos para matrices. En este caso en concreto, la sintaxis de la instrucción sería
300+
301+
`apply(tabla, MARGIN=..., FUN=cumsum)`
302+
303+
donde el valor `MARGIN` ha de ser el de la dimensión en la que queremos acumular las frecuencias: 1 si queremos hacerlo por filas, 2 para hacerlo por columnas, etc. Lo veremos todo más claro con un ejemplo
304+
305+
306+
## Función cumsum(){.example}
307+
308+
**Ejemplo 4**
309+
310+
Supongamos que en el ejemplo anterior, el de las jirafas, estas provienen de 4 zonas diferentes, A,B,C y D, de manera que las 30 primeras son de la zona A, las 25 siguientes de la B, las 35 siguientes de la C y las 10 últimas de la D. Nos interesa estudiar la distribución de las longitudes según la zona.
311+
312+
Vamos a organizar todos estos datos en un data frame llamado `jirafas`. Para que nos sea más fácil visualizar la información, es conveniente que las filas de las tablas de frecuencias correspondan a las zonas. Por lo tanto, al definir el data frame, entraremos como primera variable la de la muestra las zonas. Así, conseguiremos que éstas aparezcan en las filas al aplicarle la función table.
313+
314+
## Función cumsum()
315+
316+
```{r}
317+
zonas = rep(c("A","B","C","D"), c(30,25,35,10))
318+
jirafas = data.frame(zonas,longitud)
319+
str(jirafas)
320+
head(jirafas)
321+
```
322+
323+
## Función cumsum()
324+
325+
<div class = "example">
326+
**Ejemplo 4**
327+
328+
Para calcular la tabla de frecuencias absolutas acumuladas de las longitudes por zonas y como las zonas definen las filas de la tabla anterior, debemos utilizar la función `apply` con `MARGIN = 1`.
329+
</div>
330+
331+
```{r}
332+
apply(table(jirafas), MARGIN = 1, FUN = cumsum)
333+
```
334+
335+
## Función cumsum()
336+
337+
<div class = "example">
338+
**Ejemplo 4**
339+
340+
Fijaos que la tabla se ha traspuesto. Resulta que cuando se aplica `apply` a una `table` bidimensional, R intercambia, en caso de ser necesario, filas por columnas en el resultado para que la dimensión de la tabla resultante en la que se haya aplicado la función sea la de las columnas.
341+
342+
Con lo cual, para volver a tener las zonas en las filas, hay que trasponer el resultado de la función `apply`.
343+
</div>
344+
345+
```{r}
346+
t(apply(table(jirafas), MARGIN = 1, FUN = cumsum))
347+
```
348+
349+
## Función cumsum()
350+
351+
<div class = "example">
352+
**Ejemplo 4**
353+
354+
Vamos ahora a calcular la tabla de frecuencias relativas acumuladas de las longitudes de cuello por zonas. Para conseguirlo, y en una única instrucción, primero calculamos la tabla de frecuencias relativas por filas, a continuación, con las funciones `apply` y `cumsum` las acumulamos y, finalmente, trasponemos el resultado.
355+
</div>
356+
357+
```{r}
358+
t(apply(prop.table(table(jirafas), margin = 1), MARGIN = 1, FUN = cumsum))
359+
```
360+
361+
## Función cumsum()
362+
363+
<div class = "example">
364+
**Ejemplo 4**
365+
366+
Vamos ahora a dibujar el diagrama de barras por bloques de esta tabla. Nos interesa que las barras de este diagrama se agrupen por zonas. Entonces, tendremos que aplicar `barplot` a la tabla sin trasponer.
367+
368+
Además, vamos a colocar la leyenda en la esquina superior izquierda para que no se superponga a ninguna barra. También reduciremos el tamaño del texto de la leyenda para que quepa completamente.
369+
370+
</div>
371+
372+
## Función cumsum()
373+
374+
```{r}
375+
Diagrama = apply(prop.table(table(jirafas), margin = 1), MARGIN = 1, FUN = cumsum)
376+
barplot(Diagrama, beside = TRUE, legend = TRUE, main = "Diagrama de barras de
377+
frecuencias relativas acumuladas de longitudes por zonas",
378+
args.legend=list(x="topleft", cex=0.55))
379+
```
380+
381+
## Función cumsum()
382+
383+
<div class = "example">
384+
**Ejemplo 5**
385+
386+
Consideremos el data frame `datacrab` y arreglemos los datos.
387+
</div>
388+
389+
```{r}
390+
crabs = read.table("../data/datacrab.txt", header = TRUE)
391+
crabs = crabs[,-1] #Omitimos la primera columna
392+
str(crabs)
393+
```
394+
395+
<div class = "example">
396+
La variable numérica `width` contiene la anchura de cada cangrejo
397+
</div>
398+
399+
400+
## Función cumsum()
401+
402+
```{r}
403+
table(crabs$width)
404+
```
405+
406+
407+
## Función cumsum()
408+
409+
<div class = "example">
410+
**Ejemplo 5**
411+
412+
Vamos a convertir a la variable `width` en una variable ordinal que agrupe las entradas de la variable original en niveles.
413+
414+
La manera más sencilla de llevarlo a cabo es utilizando la función `cut`, que estudiaremos en detalle en lecciones posteriores. Por ahora, basta con saber que la instrucción dividirá el vector numérico `crabs$width` en intervalos de extremos los puntos especificados en el argumento `breaks`. El parámetro `right = FALSE` sirve para indicar que los puntos de corte pertenecen la intervalo de su derecha, e `Inf` indica $\infty$.
415+
416+
Por lo tanto, nosotros llevaremos a cabo la siguiente instrucción
417+
</div>
418+
419+
```{r}
420+
intervalos = cut(crabs$width, breaks = c(21,25,29,33,Inf), right = FALSE,
421+
labels = c("21-25", "25-29", "29-33", "33-..."))
422+
```
423+
424+
## Función cumsum()
425+
426+
<div class = "example">
427+
**Ejemplo 5**
428+
429+
El resultado de la instrucción es un factor que tiene como niveles estos intervalos, identificados con las etiquetas especificadas en el parámetro `labels`. Como nostros vamos a usar estos intervalos como niveles de una variable ordinal, además convertiremos este factor en ordenado.
430+
</div>
431+
432+
```{r}
433+
crabs$width.rank = ordered(intervalos)
434+
str(crabs)
435+
```
436+
437+
## Función cumsum()
438+
439+
<div class = "example">
440+
**Ejemplo 5**
441+
442+
Nos interesa estudiar la distribución de las anchuras de los cangrejos según el número de colores. Por lo tanto, vamos a calcular las tablas bidimensionales de frecuencais relativas y relativas acumuladas de los intervalos de las anchuras en cada nivel de `color` y las representaremos por medio de diagramas de barras.
443+
444+
La tabla de frecuencias absolutas de los pares se puede obtener aplicando `table` al data frame formado por la primera y última columnas.
445+
446+
</div>
447+
448+
```{r}
449+
Tabla = table(crabs[,c(1,6)])
450+
Tabla
451+
```
452+
453+
## Función cumsum()
454+
455+
```{r}
456+
Fr.rel = round(prop.table(Tabla,margin = 1),3)
457+
Fr.rel
458+
```

teoria/Tema7.html

Lines changed: 295 additions & 2 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)