class: center, middle, inverse, title-slide .title[ # Presentación y análisis descriptivo de datos con uso de software R ] .subtitle[ ## Variable cuantitativa ] .author[ ### Prof. Roberto Roque
RPub
] .institute[ ### Departamento de Matemática y Estatística, Universidad Catolica San Pablo ] --- <style type="text/css"> .remark-slide-content { font-size: 23px; padding: 1em 3.5em 1em 3.5em; } </style>
# Presentación de datos de una Variable Cuantitativa Frente a un conjunto de datos numéricos, el primer paso a dar, es expresarlo y clasificarlo en alguna manera simple que permita ver rápidamente todas las características posibles para obtener conclusiones útiles. Dicha clasificación se realiza en un cuadro o tabla, a las que en adelante llamaremos Tablas de Distribuciones de Frecuencias. --- # Distribución de Frecuencias de variables cuantitativas discretas Si `\(n\)` valores de una variable discreta `\(X\)` observados en una muestra de una población tiene `\(k(k\leq n)\)` valores distintos, `\(x_1,x_2,...,x_k\)`, que se repiten respectivamente `\(f_1,f_2,...,f_k\)` veces, entonces, la organización o agrupación de estos `\(n\)` datos origina la distribución de frecuencias del siguiente cuadro: --- <br> |Valores de la variable `\(X\)`|Frecuencia absoluta `\(f_i\)`|Frecuencia relativa `\(h_i\)`|Frecuencia porcentual `\(p_i\)`|Frecuencia absoluta acumulada `\(F_i\)`|Frecuencia relativa acumulada `\(H_i\)`|Frecuencia porcentual acumulada `\(P_i\)`| |:--:|:--:|:--:|:--:|:--:|:--:|:--:| |$$x_1$$|$$f_1$$|$$h_1$$|$$p_1$$|$$F_1$$|$$H_1$$|$$P_1$$| |$$x_2$$|$$f_2$$|$$h_2$$|$$p_2$$|$$F_2$$|$$H_2$$|$$P_2$$| |$$\vdots$$|$$\vdots$$|$$\vdots$$|$$\vdots$$|$$\vdots$$|$$\vdots$$|$$\vdots$$| |$$x_k$$|$$f_k$$|$$h_k$$|$$p_k$$|$$F_k=n$$|$$H_k=1$$|$$P_2=100$$| |Total|$$n$$|1|100| --- # Frecuencias - **Frecuencia absoluta (`\(f_i\)`):** es el número de datos que resulta del conteo en la categoría respectiva `\(C_i\)`, donde `\(i=1,2,...,k\)`. La suma de todas las frecuencias absolutas es igual a `\(n\)`, el total de datos observados. - **Frecuencia relativa (`\(h_i\)`):** se define en cada categoría `\(C_i\)` por `\(h_i=\frac{f_i}{n}\)`. La suma de todas las frecuencias relativas es igual a uno. - **Frecuencia porcentual (`\(p_i\)`):** se define en cada categoría `\(C_i\)` por `\(p_i=h_i\times 100\%\)`. La suma de todas las frecuencias porcentajes es igual a `\(100\%\)`. --- # Frecuencias acumuladas - **Frecuencia Acumulada Absoluta, `\(F_i\)` hasta el valor `\(x_i\)`** es la suma de las frecuencias absolutas `\(f_i\)` de todos los valores menores o iguales a `\(x_i\)`, esto es, `$$F_i=f_1+f_2+...+f_i.$$` - **Frecuencia Acumulada Relativa, `\(H_i\)` hasta el valor `\(x_i\)`** es la suma de las frecuencias relativas `\(h_i\)` de todos los valores menores o iguales a `\(x_i\)`, esto es, `$$H_i=h_1+h_2+...+h_i\quad\text{o}\quad H_i=\frac{F_i}{n}$$` - **Frecuencia Acumulada Porcentual, `\(P_i\)` hasta el valor `\(x_i\)`** es la suma de las frecuencias porcentuales `\(p_i\)` de todos los valores menores o iguales a `\(x_i\)`, esto es, `$$P_i=p_1+p_2+...+p_i\quad\text{o}\quad P_i=H_i\times100\%.$$` --- # Data > Considere la siguiente data: ``` r library("readxl") dato5 <- read_excel("D:/Backup/Documentos/Cursos/aModulo1/dato5.xlsx",sheet = "Hoja1") dato5 ``` ``` ## # A tibble: 50 × 7 ## Numero Sexo Hermanos Edad Peso Ciudad Puntaje ## <dbl> <chr> <dbl> <dbl> <dbl> <chr> <dbl> ## 1 1 F 1 18 60 Lima 69 ## 2 2 F 2 19 58 Arequipa 78 ## 3 3 M 0 18 59 Cuzco 68 ## 4 4 M 1 20 58 Tacna 69 ## 5 5 F 2 21 61 Moquegua 70 ## 6 6 M 2 22 62 Lima 68 ## 7 7 M 1 20 63 Cuzco 70 ## 8 8 F 3 21 58 Cuzco 74 ## 9 9 M 1 18 59 Arequipa 75 ## 10 10 F 0 19 60 Tacna 75 ## # ℹ 40 more rows ``` --- ### Diagrama de barras > Haga la tabla de distribución de frecuencias del número de hermanos .panelset[ .panel[.panel-name[Table] ``` ## frec frec_rel frec_porc Acum Rel_acum Porc_acum ## 0 4 0.08 8 4 0.08 8 ## 1 18 0.36 36 22 0.44 44 ## 2 21 0.42 42 43 0.86 86 ## 3 7 0.14 14 50 1.00 100 ``` ] .panel[.panel-name[Plot] <!-- --> ] .panel[.panel-name[R Code] ``` r frec<-table(dato5$Hermanos) tb=cbind(frec, frec_rel=prop.table(frec), frec_porc=prop.table(frec)*100, Acum=cumsum(frec), Rel_acum=cumsum(prop.table(frec)), Porc_acum=cumsum(prop.table(frec)*100) ) print(tb) g3=barplot(frec, main = "Diagrama de barras", xlab = "Número de hermanos", ylab = "Número de personas", col=rainbow(4), ylim = c(0,max(frec)*1.2)) text(x=g3,y=frec,labels=frec,pos=3) ``` ] ] --- # Nube de puntos .panelset[ .panel[.panel-name[R Code] ``` r x<-1:10 y<-c(1,3,2,6,3,5,8,6,7,5) plot(x,y,pch=19,col="red") ``` ] .panel[.panel-name[Plot] <!-- --> ] ] --- ### Diagrama de bastones > Grafique el diagrama de bastones del numero de hermanos .panelset[ .panel[.panel-name[Plot] <!-- --> ] .panel[.panel-name[R Code] ``` r frec<-table(dato5$Hermanos) plot(frec, type = "h", lwd = 3, ylim=c(0,max(frec)*1.2), col="blue") text(x=names(frec),y=frec,labels=frec,pos=3) ``` ] ] --- ### Poligono de frecuencias > Grafique el poligono de frecuencias del numero de hermanos .panelset[ .panel[.panel-name[Plot] <!-- --> ] .panel[.panel-name[R Code] ``` r frec<-table(dato5$Hermanos) valores=as.numeric(names(frec)) plot(c(min(valores)-1,valores,max(valores)+1), c(0,as.numeric(frec),0), type = "l", lwd = 3, col = "blue", main="Poligono de frecuencias", xlab = "Número de hermanos", ylab = "Nro de personas", ylim=c(0,max(frec)*1.2)) text(x=valores,y=as.numeric(frec),labels=frec,pos=3) ``` ] ] --- # Distribución de frecuencias para variable cuantitativa continua Finalmente estamos listos para proceder con la tabulación para determinar las frecuencias de cada uno de los intervalos de clase. <table border="1" cellspacing="0" cellpadding="5" style="border-collapse: collapse; text-align: center; font-size: 85%; margin: auto;"> <caption style="font-weight: bold; margin-bottom: 8px;"> Distribución de frecuencias de una variable continua </caption> <tr> <th rowspan="2">Intervalos</th> <th rowspan="2">Marca de clase<br> <i>x<sub>i</sub></i></th> <th colspan="3">Frecuencias</th> <th colspan="3">Frecuencias acumuladas</th> </tr> <tr> <th><i>f<sub>i</sub></i></th> <th><i>h<sub>i</sub></i></th> <th><i>p<sub>i</sub></i></th> <th><i>F<sub>i</sub></i></th> <th><i>H<sub>i</sub></i></th> <th><i>P<sub>i</sub></i></th> </tr> <tr> <td><i>I<sub>1</sub></i></td> <td><i>x<sub>1</sub></i></td> <td><i>f<sub>1</sub></i></td> <td><i>h<sub>1</sub></i></td> <td><i>p<sub>1</sub></i></td> <td><i>F<sub>1</sub></i></td> <td><i>H<sub>1</sub></i></td> <td><i>P<sub>1</sub></i></td> </tr> <tr> <td><i>I<sub>2</sub></i></td> <td><i>x<sub>2</sub></i></td> <td><i>f<sub>2</sub></i></td> <td><i>h<sub>2</sub></i></td> <td><i>p<sub>2</sub></i></td> <td><i>F<sub>2</sub></i></td> <td><i>H<sub>2</sub></i></td> <td><i>P<sub>2</sub></i></td> </tr> <tr> <td>⋮</td> <td>⋮</td> <td>⋮</td> <td>⋮</td> <td>⋮</td> <td>⋮</td> <td>⋮</td> <td>⋮</td> </tr> <tr> <td><i>I<sub>k</sub></i></td> <td><i>x<sub>k</sub></i></td> <td><i>f<sub>k</sub></i></td> <td><i>h<sub>k</sub></i></td> <td><i>p<sub>k</sub></i></td> <td><i>F<sub>k</sub> = n</i></td> <td><i>H<sub>k</sub> = 1</i></td> <td><i>P<sub>k</sub> = 100</i></td> </tr> <tr> <td>Total</td> <td></td> <td><i>n</i></td> <td>1</td> <td>100%</td> <td></td> <td></td> <td></td> </tr> </table> --- ### Construcción de la distribución de frecuencias Sean `\(n\)` valores de alguna variable cuantitativa `\(X\)` continua (o discreta con más de 20 valores distintos). Debemos calcular: - Rango `\(R\)`: Es la diferencia entre los límites reales de la muestra. `$$R=x_{\max}-x_{\min}$$` - Número de intervalos `\(k\)`: La formula de Sturges nos sirve para decidir el número de intervalos: `$$k=1+3.3\log_{10}(n),\;n>10$$` El resultado puede aproximarse por exceso, la regla no es absoluta, va a depender de la decisión del investigador. Se recomienda como mínimo 5 y como máximo 20 intervalos. - Amplitud `\(A\)`: es el tamaño de cada intervalo es `\(A=\frac{R}{k}\)`. Si el valor obtenido en `\(A\)` no coincide con el número de decimales de los datos, entonces `\(A\)` se aproxima por exceso. Por ejemplo: si los datos tienen 2 decimales y si `\(\frac{R}{k}=7.2516\)`, se elige `\(A=7.26\)`. --- <br> - Intervalos de clase: A partir del extremo inferior `\(x_{\min}\)` y de la amplitud `\(A\)`, definimos los intervalos de clase: <!-- Incluye MathJax en tu HTML --> <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <div style="font-size:90%; margin: 20px;"> \[ \begin{aligned} I_1 & = [x_{\min},\, x_{\min} + A), \\[6pt] I_2 & = [x_{\min} + A,\, x_{\min} + 2A), \\[6pt] & \;\;\vdots \\[6pt] I_k & = [x_{\min} + (k-1)A,\, x_{\min} + kA). \end{aligned} \] </div> - Marca de clase del intervalo `\(I_i=[L_i,U_i]\)`: Cada intervalo de clase tiene un punto marca de clase, denotado por `\(x_i\)`, que representa a cada intervalo, y es dado por `$$x_i=\frac{L_i+U_i}{2}.$$` --- #### Función para construir tabla de frecuencias ``` r tabHist<-function(x,k,A){ R=max(x)-min(x) if(A*k>R){ print("Si cumple que A*k>R") t<-seq(from=min(x),by=A,length.out=k+1) Intervalos<-cut(variable,breaks = t,right = FALSE) ##Marcas de clase M.clase<-seq((t[1]+t[2])/2,by=A,length.out=length(t)-1) frec<-table(Intervalos) respuesta=cbind(M.clase, frec.abs=frec, frec.rel=round(prop.table(frec),3), frec.porc=round(prop.table(frec),3)*100, abs.acum=cumsum(frec), porc.acum=cumsum(prop.table(frec)*100)) return(list(tabla = respuesta, particion = t, frec_intervalica =table(Intervalos))) } else{ return(print("No cumple A*k>R, cambie los valores de A y k")) } } ``` --- # Verificando Sturges ``` r variable<-dato5$Peso n=length(variable);n ``` ``` ## [1] 50 ``` ``` r R=max(variable)-min(variable);R ``` ``` ## [1] 5 ``` ``` r # k=1+3.3*log10(n);k ``` ``` ## [1] 6.606601 ``` ``` r ## Modifique el numero de intervalos: k=7 ``` --- <br> ``` r ## Amplitud A=R/k;A ``` ``` ## [1] 0.7142857 ``` ``` r ## Modifique la amplitud: A=1 ## Cumplir la desigualdad A*k>R ``` ``` ## [1] TRUE ``` ``` r ##Si es posible puede reducir el valor de k k=6;A=1;A*k>R ``` ``` ## [1] TRUE ``` ``` r g=tabHist(variable,k=6,A=1) ``` ``` ## [1] "Si cumple que A*k>R" ``` --- ### Tabla ``` r g$tabla ``` ``` ## M.clase frec.abs frec.rel frec.porc abs.acum porc.acum ## [58,59) 58.5 8 0.16 16 8 16 ## [59,60) 59.5 11 0.22 22 19 38 ## [60,61) 60.5 6 0.12 12 25 50 ## [61,62) 61.5 10 0.20 20 35 70 ## [62,63) 62.5 9 0.18 18 44 88 ## [63,64) 63.5 6 0.12 12 50 100 ``` --- ### Histograma .panelset[ .panel[.panel-name[Plot] <!-- --> ] .panel[.panel-name[R Code] ``` r hist(variable, breaks = g$particion, right = F, labels =as.character(g$frec_intervalica), ylim = c(0,max(g$frec_intervalica*1.1)), col="cyan", xaxt="n") axis(side = 1, at = g$particion) ``` ] ] --- ### Obteniendo tabla a partir de `hist()` > Grafique el histograma de los puntajes. Luego, a partir del histograma construya la tabla de frecuencias. .panelset[ .panel[.panel-name[Plot] <!-- --> ] .panel[.panel-name[Table] ``` ## Intervalo Frecuencia FrecRel ## 1 68 - 70 17 0.34 ## 2 70 - 72 14 0.28 ## 3 72 - 74 7 0.14 ## 4 74 - 76 9 0.18 ## 5 76 - 78 3 0.06 ``` ] .panel[.panel-name[R Code] ``` r variable<-dato5$Puntaje h <- hist(variable,plot = F,right = F) ymax=max(h$counts)*1.1 ## Arreglando ejey hist(variable,right = F,labels = T,ylim = c(0,ymax)) ## Tabla tabla <- data.frame( Intervalo = paste(h$breaks[-length(h$breaks)], h$breaks[-1], sep = " - "), Frecuencia = h$counts, FrecRel = h$counts / sum(h$counts) ) tabla ``` ] ] --- #Comparando histogramas .panelset[ .panel[.panel-name[Plot] ``` ## [1] "Si cumple que A*k>R" ``` <!-- --> ] .panel[.panel-name[R Code] ``` r variable<-dato5$Puntaje g=tabHist(variable,A=2,k=6) par(mfrow=c(2,2)) hist(variable,labels = T, main = "Right-open (left closed)") hist(variable,labels = T,right = F, main = "Right-closed (left open)") hist(variable,labels = T,right = F,ylim = c(0,20), main = "Eje y (ampliado)") hist(variable,labels = T,right = F,ylim = c(0,20),breaks = g$particion, main="Nuestra partición") ``` ] ] --- # Poligono de frecuencias > Grafique el poligono de frecuencias de los puntajes .panelset[ .panel[.panel-name[Plot] <!-- --> ] .panel[.panel-name[Table] ``` r tabla ``` ``` ## Intervalo Marca Frecuencia FrecRel ## 1 68 - 70 69 17 0.34 ## 2 70 - 72 71 14 0.28 ## 3 72 - 74 73 7 0.14 ## 4 74 - 76 75 9 0.18 ## 5 76 - 78 77 3 0.06 ``` ] .panel[.panel-name[R Code] ``` r variable<-dato5$Puntaje h=hist(variable,right = F,plot = F) ymax=max(h$counts)*1.1 A=diff(h$breaks)[1] tabla <- data.frame( Intervalo = paste(h$breaks[-length(h$breaks)], h$breaks[-1], sep = " - "), Marca=h$breaks[-length(h$breaks)]+A/2, Frecuencia = h$counts, FrecRel = h$counts / sum(h$counts) ) xi=c(tabla$Marca[1]-A,tabla$Marca,tabla$Marca[length(h$breaks)-1]+A) fi=c(0,tabla$Frecuencia,0) hist(variable,right = F,labels = T,ylim = c(0,ymax), xlim =c(min(xi),max(xi))) lines(xi,fi,lwd=3,col="blue") ``` ] ] --- ### Ejemplo > Grafique la Ojiva de la variable puntaje. .panelset[ .panel[.panel-name[Plot] <!-- --> ] .panel[.panel-name[Table] ``` ## Intervalo Marca Frecuencia Acumalada FrecRel ## 1 68 - 70 69 17 17 0.34 ## 2 70 - 72 71 14 31 0.28 ## 3 72 - 74 73 7 38 0.14 ## 4 74 - 76 75 9 47 0.18 ## 5 76 - 78 77 3 50 0.06 ``` ] .panel[.panel-name[R Code] ``` r variable<-dato5$Puntaje h=hist(variable,right = F,plot = F) A=diff(h$breaks)[1] ti=h$breaks Fi=c(0,cumsum(h$counts)) plot(ti,Fi, type = "b", main="Ojiva",xlab="Puntajes",ylab="Frec. Acumuladas", lwd=2,col="blue", ylim=c(0,max(Fi)*1.1)) text(x=ti[-1],y=Fi[-1], labels=cumsum(h$counts),pos = 3) tabla <- data.frame( Intervalo = paste(h$breaks[-length(h$breaks)], h$breaks[-1], sep = " - "), Marca=h$breaks[-length(h$breaks)]+A/2, Frecuencia = h$counts, Acumalada=cumsum(h$counts), FrecRel = h$counts / sum(h$counts)) ``` ] ]