Cargamos los datos con los que trabajaremos principalmente:
library(readr)
library(tidyverse)
Datos <- read_csv("datosECV_Aragon.csv")
Datos <- Datos %>% select(3:10)
Datos <- Datos %>% rename("genero"="datosECVmas16.gen",
"provincia"="nomprov", "ingresos"="ingnorm")
head(Datos)
provincia | genero | edad | nac | neduc | sitlab | ingresos | horas |
---|---|---|---|---|---|---|---|
Huesca | 1 | 3 | 1 | 3 | 1 | 21237.1 | 36.42 |
Huesca | 2 | 2 | 1 | 2 | 1 | 17810.8 | 31.72 |
Huesca | 1 | 1 | 1 | 2 | 1 | 11889.1 | 31.88 |
Huesca | 1 | 1 | 1 | 2 | 1 | 16000.5 | 38.18 |
Huesca | 1 | 1 | 1 | 2 | 3 | 21169.6 | 0.00 |
Huesca | 1 | 2 | 1 | 2 | 1 | 16001.3 | 34.52 |
Las definiciones de las variables son las siguientes:
provincia: indica la provincia de la comunidad de Aragón a la que pertenecen los individuos de la muestra.
genero: indica el sexo de los individuos de la muestra. Si es masculino toma valor 1, si es femenino toma 2.
edad: indica el rango de edad de los individuos de la muestra. Toma el valor 1 si la edad esta entre 16 y 24 años, el 2 si la edad esta entre 25 y 49 años, el 3 si la edad esta entre 50 y 64 años, y el 4 si la edad es mayor o igual a 65 años
nacionalidad (nac): indica la nacionalidad de los individuos de la muestar. Si es española toma el valor 1, si es otra nacionalidad toma el 2.
situacion laboral (sitlab): indica la situacion laboral de los individuos de la muestra. Toma el valor 1 si la persona trabaja, el 2 si esta desempleado, y el 3 si esta inactivo.
ingresos : indica los ingresos de los individuos de la muestra.
horas : indica el numero de horas que trabajan los individuos de la muestra.
es una variable estadística porque es un vector con los valores/observaciones de la variable \(X_k\) para \(n\) indiviuos/elementos de una muestra.
Donde: \(x_{ik}\) es el valor u observación de la variable \(X_k\) para el elemento \(i\) de la muestra (\(i\)-esima observación de la variable \(X_k\)).
En general, si hemos observado \(p\) variables sobre una muestra \(\varepsilon\) de \(n\) elementos o individuos ,
La matriz de datos \(X\) de las variables \(X_1,...,X_p\) medidas sobre los \(n\) individuos o elementos de \(\varepsilon\) es: \[\begin{gather*} X= \begin{pmatrix} x_{11} & x_{12}&...&x_{1p}\\ x_{21} & x_{22}&...&x_{2p}\\ ...&...&...&...\\ x_{n1}& x_{n2}&...&x_{np} \end{pmatrix} \end{gather*}\]
Observación: \(X\) es una matriz \(nxp\)
Donde:
\(x_i ^t = (x_{i1}, x_{i2}, ..., x_{ip} )\) es el vector con los valores de las \(p\) variables \(X_1,...,X_p\) para el individuo/elemento \(i\) de la muestra, con \(i=1,...,n\)
Podemos expresar:
\[\begin{gather*} X= (X_1 , X_2 ,..., X_p ) \end{gather*}\]Donde: \[\begin{gather*} X_k= \begin{pmatrix} x_{1k} \\ x_{2k}\\ ... \\ x_{nk} \end{pmatrix} \end{gather*}\]
para \(k=1,2,...,p\)
El recorrido de una variable estadistica \(X_k\) es el conjunto de valores que puede tomar la variable.
En funcion del recorrido de una variable podemos determinar si es cuantitativa o categorica. Clasificación que tiene una relevancia central en la estadística.
Ejemplos:
\(X_k =\) Ingresos de 1000 empleados de Amazon \(\Rightarrow\) \(Recorrido(X_k) =[0, \infty )\)
\(X_k =\) Marca del coche de 50 futbolistas \(\Rightarrow\) \(Recorrido(X_k) = \lbrace Mercedes, Audi, ... \rbrace\)
\(X_k =\) Numero de chalets de 10 urbanizaciones \(\Rightarrow\) \(Recorrido(X_k) = \lbrace 0, 1, 2,... \rbrace\)
Tipos de variables estadísticas:
La variable \(X_k\) es cuantitativa si los elementos de su recorrido son conceptualmente numeros
La variable \(X_k\) es categorica si los elementos de su recorrido son etiquetas o categorías (pueden ser numeros a nivel símbolico pero no a nivel conceptual)
En este trabajo se asumira que el recorrido de las variables categoricas son numeros, puesto que esto permitirá poder aplicarle algunos conceptos que no podrian aplicarse si su recorrido no fueran numeros, aunque, como se ha comentado, actuarán como etiquetas o categorías.
Sea \(X_k\) una variable {cuantitativa},
La variable \(X_k\) es discreta si su recorrido es un conjunto numerable
La variable \(X_k\) es continua si su recorrido no es numerable
Observación:
En particular, variables cuyo recorrido sea un conjunto finito serán discretas.
Variables cuyo recorrido sea un conjunto infinito serán continuas.
Sea \(X_k\) una variable categorica ,
\(X_k\) es r-aria si su recorrido tiene r elementos que son categorias o etiquetas
En estadistica tienen particular importancia las variables categoricas binarias (2-aria).
Sea \(X_k\) una variable categorica \(r\)-aria,
La variable \(X_k\) es nominal si no existe una ordenacion entre las \(r\) categorias de su recorrido
La variable \(X_k\) es ordinal si existe una ordenacion entre las \(r\) categorias de su recorrido.
Ejemplos:
\(Recorrido(X_k)= \lbrace Apple , Samsung, Oppo \rbrace \Rightarrow X_k\) es categorica nominal
\(Recorrido(X_k)= \lbrace mal , regular, bien \rbrace \Rightarrow X_k\) es categorica ordinal
Un estadistico descriptivo es una funcion de los elementos de una muestra.
En general, toda funcion aplicada sobre una variable estadistica \(X_k\) es un estadistico.
A continuacion veremos algunos de los estadisticos descriptivos mas utilizados.
La media aritmetica de la variable \(X_k\) se define como: \[\begin{gather*} \overline{X_k}= \frac{1}{n} \cdot \sum_{i=1}^{n} x_{ik} \end{gather*}\]
Observación: en general a la media aritmetica se le llama simplemente media.
Propiedades:
\[\begin{gather*} \sum_{i=1}^{n} \left( x_{ik} - \overline{X_k} \right) = 0 \end{gather*}\]
mean(Datos$ingresos)
## [1] 14078.77
Dada una matriz de datos \(X\) de tamaño \(nxp\),
El vector de medias de X es: \[\begin{gather*} \overline{X}=( \overline{X_1} , \overline{X_2} , ... , \overline{X_p} ) ^t \end{gather*}\]
La expresión matricial del vector de medias de X es: \[\begin{gather*} \overline{X}= \dfrac{1}{n} \cdot X\hspace{0.05cm}^t \cdot \overrightarrow{1}_{nx1} \end{gather*}\]
Dada la variable \(X_k=(x_{1k}, x_{2k},...,x_{nk})^t\)
Dados unos pesos para cada una de las n observaciones de la variable \(X_k\) : \(w=(w_1,w_2,...,w_n)^t\)
La media ponderada de la variable \(X_k\) con el vector de pesos \(w\) es: \[\begin{gather*} \overline{X_k} (w) = \dfrac{\sum_{i=1}^{n} x_{ik}\cdot w_i }{ \sum_{i=1}^{n} w_{i} } \end{gather*}\]
Dada la variable \(X_k=(x_{1k}, x_{2k},...,x_{nk})^t\)
La media geometrica de la variable \(X_k\) es: \[\begin{gather*} \overline{X_k}_{geom} = \sqrt{\Pi_{i=1}^{n} x_{ik}} = \sqrt{x_{1k}\cdot x_{2k}\cdot...\cdot x_{nk}} \end{gather*}\]
La mediana de la variable \(X_k\) es un valor tal que la {mitad} de las observaciones de \(X_k\) son inferiores a él.
Dada la variable \(X_k=(x_{1k}, x_{2k},...,x_{nk})^t\)
Ordenamos sus valores de menor a mayor \(x_{(1)k} < x_{(2)k} < ...< x_{(n)k}\)
La mediana de la variable \(X_k\) es:
\[\begin{equation*} Mediana(X_k)= \left\lbrace\begin{array}{l} \dfrac{ x_{(n/2)k} + x_{(n/2 + 1)k} }{2} \hspace{0.3cm},\text{ si n es {par}} \\ x_{(\lceil n/2 \rceil)k} \hspace{0.3cm},\text{ si n es {impar} } \end{array}\right. \end{equation*}\]
Podemos calcular la mediana en R usando la función
median(Datos$ingresos)
## [1] 12331
Podemos comprobar que efectivamente la mitad de las observaciones de la variable ingresos son menores que la mediana.
sum(Datos$ingresos < median(Datos$ingresos) )/length(Datos$ingresos)
## [1] 0.5
El cuantil de orden \(p\) de la variable \(X_k\) es el valor \(Q(p, X_k)\) tal que la proporcion de observaciones de \(X_k\) que son menores que \(Q(p, X_k)\) es \(p\)
Más formalmente:
\(Q(p, X_k)\) es el cuantil \(p\) de \(X_k\) \(\Leftrightarrow\) \(\dfrac{\# \lbrace i=1,..,n \hspace{0.15cm} / \hspace{0.15cm} x_{ik} < Q(p, X_k) \rbrace}{n} = p\)
Observación: la mediana el es cuantil de orden \(p=0.5\)
quantile(Datos$ingresos)
## 0% 25% 50% 75% 100%
## -999.50 8310.60 12331.00 18269.38 58470.40
quantile(Datos$ingresos, 0.85)
## 85%
## 21840.8
quantile(Datos$ingresos, 0.37)
## 37%
## 10329.74
La varianza de la variable \(X_k\) es: \[\begin{equation*} \sigma^2(X_k)= \dfrac{1}{n} \sum_{i=1}^{n} (x_{ik} - \overline{x_k})^2 \end{equation*}\]
La desviación típica de la variable \(X_k\) es: \[\begin{equation*} \sigma(X_k)= \sqrt{\dfrac{1}{n} \sum_{i=1}^{n} (x_{ik} - \overline{x_k})^2} \end{equation*}\]
var(Datos$ingresos)
## [1] 67924827
sd(Datos$ingresos)
## [1] 8241.652
Dada una matriz de datos $X $ de tamaño \(nxp\)
\(X\) es centrada \(\Leftrightarrow\) la media de sus variables ( columnas) es cero
Operación de centrado:
La operacion para centrar \(X\) es la siguiente: \[\begin{gather*} X - \overrightarrow{1}_{nx1} \cdot \overline{x}\hspace{0.05cm}^t =H_{n}\cdot X_{nxp} \end{gather*}\]
es una matriz centrada (la media de sus columnas es cero).
Donde:
\[\begin{gather*} H_{n}=I_n - \dfrac{1}{n} \cdot \overrightarrow{1}_{nx1} \cdot \overrightarrow{1^t} \end{gather*}\]es la matriz de centrado.
Dada la variable cuantitativa \(X_k\)
\(X_k^{scale}\) es la variable \(X_k\) escalada, si se cumple que:
\[\begin{equation*} x_{ik}^{scale}= \dfrac{ x_{ik} - \overline{X_k} }{ \sigma(X_k)} \end{equation*}\]para \(i=1,...,n\)
Sea \(X=(X_1,...,X_p)\) una matriz de datos de \(p\) variables,
\(X^{scale}=(X_1^{scale},...,X_p^{scale})\) es la matriz de datos \(X\) escalada.
Dadas las variables \(X_k=(x_{1k},
x_{2k},...,x_{nk})^t\) y \(X_r=(x_{1r},
x_{2r},...,x_{nr})^t\)
La covarianza entre las variables \(X_j\) y \(X_r\) se define como:
\[\begin{gather*} S(X_k, X_r) = \frac{1}{n} \cdot \sum_{i=1}^{n} (x_{ik} - \overline{x_k})\cdot (x_{ir} - \overline{x_r}) \end{gather*}\]
\(S(X_k,X_r) \hspace{0.1cm} = \hspace{0.1cm} \dfrac{1}{n} \sum_{i=1}^{n} (x_{ik} \cdot x_{ir}) - \overline{x_k} \cdot \overline{x_r} \hspace{0.2cm} = \hspace{0.2cm} \overline{x_k\cdot x_r} - \overline{x_k} \cdot \overline{x_r}\)
\(S(X_k, a + b\cdot X_r) = b\cdot S(X_k,X_r)\)
\(S(X_k,X_r) = S(X_r,X_k)\)
\(S(X_k,X_r) > 0 \Rightarrow\) Relación creciente entre \(X_k\) y \(X_r\)
\(S(X_k,X_r) < 0 \Rightarrow\) Relación decreciente entre \(X_k\) y \(X_r\)
\(S(X_k,X_r) = 0 \Rightarrow\) No hay relación entre \(X_k\) y \(X_r\)
cov(Datos$ingresos , Datos$horas)
## [1] 32453.53
La matriz de covarianzas de una matriz de datos \(X\) es:
\[\begin{gather*} S_X = \left( \hspace{0.2cm} S(X_k , X_r) \hspace{0.2cm} \right)_{k,r=1,...,p} \end{gather*}\]
Expresión matricial de la matriz de covarianzas:
\[\begin{gather*} S_X=\dfrac{1}{n} \cdot X\hspace{0.1cm}^t \cdot H \cdot X \end{gather*}\]Donde: \(H\) es la matriz de centrado
X1<-rnorm(30)
X2<-rnorm(30)
X3<-rnorm(30)
X4<-rnorm(30)
cov(cbind(X1,X2,X3,X4))
## X1 X2 X3 X4
## X1 1.21658347 -0.06154167 0.14548120 -0.3579662
## X2 -0.06154167 1.10326428 -0.08654819 0.2827292
## X3 0.14548120 -0.08654819 0.43705601 -0.2504242
## X4 -0.35796619 0.28272919 -0.25042418 1.2638200
Dadas las variables \(X_k=(x_{1k}, x_{2k},...,x_{nk})^t\) y \(X_r=(x_{12r}, x_{2r},...,x_{nr})^t\)
La correlacion lineal de Pearson entre las variables \(X_k\) y \(X_r\) se define como:
\[\begin{equation*} r(X_k,X_r) = \frac{S(X_k,X_r)}{S(X_k) \cdot S(X_r)} \end{equation*}\]
\(r(X_k,X_r) = \pm 1 \Rightarrow\) Relacion Lineal Perfecta entre \(X_k\) e \(X_r\)
\(r(X_k,X_r) = 0 \Rightarrow\) No Existe Relacion Lineal entre \(X_k\) e \(X_r\)
cor(Datos$ingresos, Datos$horas , method = "pearson")
## [1] 0.2308945
La matriz de correlaciones de Pearson de la matriz de datos X es:
\[\begin{gather*} R_X = \left( \hspace{0.2cm} r(X_k , X_r) \hspace{0.2cm} \right)_{k,r=1,...,p} \end{gather*}\]Expresión matricial de la matriz de correlaciones
\[\begin{gather*} R_X= D_s^{-1} \cdot S_X \cdot D_s^{-1} \end{gather*}\]Donde: \[\begin{gather*} D_s = diag \left( \sigma(X_1) , \sigma(X_2) ,..., \sigma(X_p) \right) \end{gather*}\]
cor(cbind(X1,X2,X3,X4))
## X1 X2 X3 X4
## X1 1.00000000 -0.05312006 0.1995112 -0.2886878
## X2 -0.05312006 1.00000000 -0.1246378 0.2394353
## X3 0.19951124 -0.12463777 1.0000000 -0.3369497
## X4 -0.28868781 0.23943535 -0.3369497 1.0000000
Dada una variable \(X_k=(x_{1k}, x_{2k},...,x_{nk})^t\) y \(a \in Recorrido(X_k)\)
La frecuencia absoluta del elemento \(a\) en \(X_k\) se define como:
\[\begin{gather*} Fabs(a ,X_k) \hspace{0.1cm}=\hspace{0.1cm} \# \lbrace i / x_{ik}=a \rbrace \hspace{0.1cm} = \\ \hspace{0.1cm} =\hspace{0.1cm} \text{nº de observaciones de la variable $X_k$ que coinciden con el valor $a$ } \end{gather*}\]
Por ejemplo: \(F(a=1000, X_k)\) podria ser el numero de empleados de cierta empresa con un salario de \(a=1000\) euros.
Observación:
Si \(X_k\) es continua lo normal es que \(Fabs(a,X_k) = 0\) para muchos valores \(a\)
Frecuencia absoluta para un elemento \(\Rightarrow\) util para variables categoricas
frecuencia_absoluta_elemento <-
function( variable, elemento){
frecuencia_absoluta_elemento <-
sum(variable == elemento)
return(frecuencia_absoluta_elemento)
}
frecuencia_absoluta_elemento( round(Datos$ingresos, 3),
8736.2)
## [1] 1
frecuencia_absoluta_elemento( round(Datos$ingresos, 3),
8736)
## [1] 0
frecuencia_absoluta_elemento(Datos$genero , 1)
## [1] 615
frecuencia_absoluta_elemento(Datos$neduc , 3)
## [1] 202
Dada una variable \(X_k=(x_{1k},
x_{2k},...,x_{nk})^t\) y \(A \subset
Recorrido(X_k)\)
La frecuencia absoluta del conjunto \(A\) en \(X_k\) se define como:
\[\begin{gather*} Fabs(A, X_k) = \sum_{a \in A} Fabs(a , X_k ) = \\ = \text{ nº de observaciones de $X_k$ que pertenecen a $A$} \end{gather*}\]
Por ejemplo: \(Fabs(A=[500,1500] , X_k)\) podria ser el numero de empleados con un salario entre 500 y 1500 euros.
Observación:
\(Fabs([b_1,b_2], X_k)\) es un caso particular de \(Fabs(A, X_k)\) con \(A=[b_1,b_2]\)
Frecuencia absoluta para un intervalo (conjunto continuo) \(\Rightarrow\) util para variables cuantitativas (sobre todo continuas)
frecuencia_absoluta_intervalo <-
function( variable, cota_inferior, cota_superior ){
frecuencia_absoluta_intervalo <-
sum(variable >= cota_inferior &
variable <= cota_superior)
return(frecuencia_absoluta_intervalo)
}
frecuencia_absoluta_intervalo(Datos$ingresos , 8000, 12000)
## [1] 305
frecuencia_absoluta_intervalo(Datos$neduc , 3, 4)
## [1] 202
Frecuencia absoluta para un conjunto discreto \(\Rightarrow\) util para variables categoricas y cuantitativas discretas
frecuencia_absoluta_conjunto_discreto <-
function(variable, conjunto){
cont=0
for( i in conjunto){
if( any(variable == i) ) {
cont = cont + sum(variable==i)
}
}
return(cont)
}
A=c(3, 4)
frecuencia_absoluta_conjunto_discreto(Datos$neduc , A)
## [1] 202
A=c(1,3,4)
frecuencia_absoluta_conjunto_discreto(Datos$neduc , A)
## [1] 645
Dada una variable \(X_k=(x_{1k}, x_{2k},...,x_{nk})^t\) y \(a \in Recorrido(X_k)\)
La frecuencia relativa del elemento \(a\) en \(X_k\) se define como:
\[\begin{gather*} Fre(a,X_k) = \dfrac{Fabs(a,X_k) }{n} = \\ =\text{ proporcion de observaciones de $X_k$ que coinciden con el valor $a$} \end{gather*}\]
Por ejemplo: \(Fre(a=1000,X_k)\) podria ser la proporcion de empleados de cierta empresas con un salario de 1000 euros.
Dada una variable \(X_k=(x_{1k}, x_{2k},...,x_{nk})^t\) y \(A \subset Recorrido(X_k)\)
La frecuencia relativa del conjunto \(A\) en \(X_k\) se define como: \[\begin{gather*} Fre(A,X_k) = \dfrac{Fabs(A ,X_k) }{n} = \\ = \text{ proporción de observaciones de $X_k$ que pertenecen a $A$} \end{gather*}\]
Por ejemplo: \(Fre(A=[500,1500],X_k)\) podria ser la proporcion de empleados de cierta empresas con un salario entre 500 y 1500 euros.
frecuencia_relativa_elemento <-
function( variable , elemento ){
frecuencia_relativa_elemento <-
frecuencia_absoluta_elemento(variable , elemento)/
length(variable)
return(frecuencia_relativa_elemento)
}
frecuencia_relativa_elemento(Datos$genero, 1)
## [1] 0.4975728
frecuencia_relativa_intervalo <-
function( variable, cota_inferior, cota_superior ){
frecuencia_relativa_intervalo <-
frecuencia_absoluta_intervalo(variable ,
cota_inferior, cota_superior)/
length(variable)
return(frecuencia_relativa_intervalo)
}
frecuencia_relativa_intervalo(Datos$ingresos, 8000, 12000)
## [1] 0.2467638
frecuencia_relativa_conjunto_discreto <-
function( variable, conjunto ){
frecuencia_relativa_conjunto_discreto <-
frecuencia_absoluta_conjunto_discreto(variable,conjunto)/
length(variable)
return(frecuencia_relativa_conjunto_discreto)
}
A=c(1, 3)
frecuencia_relativa_conjunto_discreto(Datos$neduc, A)
## [1] 0.5218447
La frecuencia absoluta acumulada del elemento \(a\) en \(X_k\) se define como:
\[\begin{gather*} Fabscum(a ,X_k)=Fabs \left( \lbrace i=1,...,n / x_{ik} \leq a \rbrace , X_k \right) = \\ = \text{nº de observaciones de $X_k$ que son menores o iguales que $a$} \end{gather*}\]
La frecuencia relativa acumulada del elemento \(a\) en \(X_k\) se define como: \[\begin{gather*} Frecum(a,X_k)= \dfrac{Fabscum(a,X_k)}{n} \\ = \text{proporcion de observaciones de $X_k$ que son menores o iguales que $a$} \end{gather*}\]
frecuencia_absoluta_acumulada <-
function(variable, elemento){
frecuencia_absoluta_acumulada <-
frecuencia_absoluta_intervalo(variable,-Inf,elemento)
return(frecuencia_absoluta_acumulada)
}
frecuencia_absoluta_acumulada(Datos$ingresos, 8000)
## [1] 289
frecuencia_relativa_acumulada <-
function(variable, elemento){
frecuencia_relativa_acumulada <-
frecuencia_absoluta_acumulada(variable,elemento)/
length(variable)
return(frecuencia_relativa_acumulada)
}
frecuencia_relativa_acumulada(Datos$ingresos, 8000)
## [1] 0.2338188
Vamos a crear una función en R a la que le metemos una variable y nos debuelve una tabla con las frecuencias de esa variable.
Las caracteristicas de la función son las siguientes:
Entrada: matriz de datos \(X\)
Entrada: variable \(V1\) de \(X\)
\(V1\) debe estar cargadas en R como vector
\(V1\) puede ser una variable categorica o cuantitativa categorizada
El recorrido de \(V1\) tiene que ser \(0:p1\) , con \(p1=1,2,3,...\)
Entrada: \(p1\)
Tabla_Frecuencias <- function(X, V1 ,p1 ){
tabla<- matrix(NA, nrow=p1+1, ncol= 4 )
X<- cbind(X, V1)
for(i in 0:p1){
tabla[i+1, 1 ] <- dim( ( X %>% filter(V1==i ) ) )[1]
}
for(i in 0:p1){
tabla[i+1, 2 ] <- ( dim( ( X %>% filter(V1==i ) ) )[1] / dim(X)[1] )
}
for(i in 0:p1){
tabla[i+1, 3] <- cumsum(tabla[1:(i+1) ,1])[i+1]
}
for(i in 0:p1){
tabla[i+1, 4] <- cumsum(tabla[1:(i+1) ,2])[i+1]
}
rownames(tabla)<-0:p1
colnames(tabla)<-c("F.Abs","F.Rel", "F.Abs.Cum","F.Rel.Cum")
tabla <- as.data.frame(tabla)
return(tabla)
}
Para usar esta funcion primero debomos redefinir correctamente la variable usada:
La variable escogida debe estar cargada en R
Usando una variable categorica \(\Rightarrow\) sus categorias deben ser \(0,1,...,p1\)
# neduc es una variable categorica 3-aria --> debe recodificarse para que sus categorias sean 0,1,2
Datos$neduc<-recode(Datos$neduc, "1"="0", "2"="1", "3"="2")
neduc<- Datos$neduc
Tabla_Frecuencias(X=Datos, V1=neduc, p1=2)
F.Abs | F.Rel | F.Abs.Cum | F.Rel.Cum | |
---|---|---|---|---|
0 | 443 | 0.3584142 | 443 | 0.3584142 |
1 | 591 | 0.4781553 | 1034 | 0.8365696 |
2 | 202 | 0.1634304 | 1236 | 1.0000000 |
Para usar la función Tabla_Frecuencias() primero debemos redefinir correctamente la variable usada:
La variable escogida debe estar cargada en R
Usando una variable cuantitativa \(\Rightarrow\) hay que categorizarla usando alguna regla de categorización, como la regla de la media, mediana, cuartiles, Scott…
Dada una variable cuantitativa \(X_k=(x_{1k},...,x_{nk})^t\) , se trata de obtener su version categorizada \(X_k^{cat}=(x_{1k}^{cat},...,x_{nk}^{cat})^t\)
La version categorizada de una variable cuantitativa \(X_k\) es otra variable \(X_k^{cat}\) que es categorica, y que toma valores en funcion de las observaciones de \(X_k\).
La idea es la siguiente:
Dada una variable cuantitativa \(X_k\) ,
Hay que definir los intervalos de categorización de \(X_k\), que son una serie de intervalos \([L_{1},L_{2}), [L_{2}, L_{3}),..., [L_{\lambda},L_{\lambda+1})\) , tales que:
Son disjuntos dos a dos (no comparten elementos).
Toda observación/valor de \(X_k\) pertenece a algún intervalo.
Tienen la misma amplitud (mismo tamaño).
Una vez definidos los intervalos de categorizacion de \(X_k\) se aplica la siguiente regla para definir \(X_k^{cat}\)
\[\begin{equation*} x^{cat}_{ik} = \left\lbrace\begin{array}{l} 0, \text{ si $x_{ik} \in [L_{1},L_{2})$} \\ 1, \text{ si $x_{ik} \in [L_{2},L_{3}) $} \\ ... \\ \lambda, \text{ si $x_{ik} \in [L_{\lambda},L_{\lambda+1}) $} \end{array}\right. \end{equation*}\]
En definitiva:
\[\begin{equation*} x_{ik} \in [L_{r}, L_{r+1}] \ \Leftrightarrow \ x_{ik}^{cat} = r-1 \end{equation*}\]
para \(r=1,...,\lambda > 0\)
Donde:
\([L_{r}, L_{r+1}]\) es el intervalo \(r\)-esimo de los intervalos de categorizacion de \(X_k\)
Exiten diferentes reglas para definir los intervalos de categorizacion de una variable cuantitativa. En este trabajo veremos las reglas de la mediana, media, cuartiles y Scott.
Según la regla de la mediana los intervalos de categorización de \(X_k\) son:
\[\begin{gather*} [Min(X_k), Mediana(X_k)], (Mediana(X_k), Max(X_k)] \end{gather*}\]Por tanto, a partir de \(X_k\) se obtiene la variable \(X_k^{cat}\) definida como:
\[\begin{equation*} x^{cat}_{ik} = \left\lbrace\begin{array}{l} 0, \text{ si $x_{ik} \in [Min(X_k), Mediana(X_k)]$} \\ 1, \text{ si $x_{ik} \in (Mediana(X_k), Max(X_k)]$} \end{array}\right. \end{equation*}\]
Según la regla de la media los intervalos de categorización de \(X_k\) son:
\[\begin{gather*} \left[ Min(X_k) \hspace{0.02cm} ,\hspace{0.02cm} \overline{x_k} \right], \left(\overline{x_k} \hspace{0.02cm},\hspace{0.02cm} Max(X_k)\right] \end{gather*}\]Por tanto, a partir de \(X_k\) se obtiene la variable \(X_k^{cat}\) definida como:
\[\begin{equation*} x^{cat}_{ik} = \left\lbrace\begin{array}{l} 0, \text{ si $x_{ik} \in [Min(X_k)\hspace{0.02cm},\hspace{0.02cm} \overline{x_k} ]$} \\ 1, \text{ si $x_{ik} \in (\overline{x_k} \hspace{0.02cm},\hspace{0.02cm} Max(X_k)] $} \end{array}\right. \end{equation*}\]
Según la regla de la cuartiles los intervalos de categorización de \(X_k\) son:
\[\begin{gather*} \left[ Min(X_k) \hspace{0.03cm} ,\hspace{0.03cm} Q(0.25,X_k) \right], \left(Q(0.25,X_k) \hspace{0.02cm},\hspace{0.02cm} Q(0.50,X_k)\right] , \\ \left(Q(0.50,X_k) \hspace{0.02cm},\hspace{0.02cm} Q(0.75,X_k)\right], \left(Q(0.75,X_k) \hspace{0.02cm},\hspace{0.02cm} Max(X_k)\right] \end{gather*}\]Por tanto, a partir de \(X_k\) se obtiene la variable \(X_k^{cat}\) definida como:
\[\begin{equation*} x^{cat}_{ik} = \left\lbrace\begin{array}{l} 0, \text{ si $x_{ik} \in \left[ Min(X_k) \hspace{0.03cm} ,\hspace{0.03cm} Q(0.25,X_k) \right] $} \\ 1, \text{ si $x_{ik} \in \left[ Q(0.25 , X_k) , Q(0.50 , X_k)\right] $} \\ 2, \text{ si $x_{ik} \in (Q(0.50 , X_k) , Q(0.75 , X_k)] $} \\ 3, \text{ si $x_{ik} \in \left(Q(0.75,X_k) \hspace{0.02cm},\hspace{0.02cm} Max(X_k)\right] $} \end{array}\right. \end{equation*}\]
Según la regla de la Scott los intervalos de categorización de \(X_k\) son: \([L_{1},L_{2}), [L_{2}, L_{3}),...,[L_{ \lambda},L_{ \lambda+1})\)
Por tanto, a partir de \(X_k\) se obtiene la variable \(X_k^{cat}\) definida como:
\[\begin{equation*} x^{cat}_{ik} = \left\lbrace\begin{array}{l} 0, \text{ si $x_{ik} \in [L_{1},L_{2})$} \\ 1, \text{ si $x_{ik} \in [L_{2},L_{3}) $} \\ ... \\ \lambda, \text{ si $x_{ik} \in [L_{\lambda},L_{\lambda+1}) $} \end{array}\right. \end{equation*}\]
El procedimiento para calcular los intervalos de Scott es el siguiente:
Primero hay que determinar la \(A_t\) de las clases, que se calcula como:
\[\begin{equation*} A_{t} = 3.5 \cdot S (X_k) \cdot n^{-1/3} \end{equation*}\]El será: \[\begin{equation*} \lambda=\left\lceil \frac{Max(X_k)-Min(X_k)}{A_{t}} \right\rceil \end{equation*}\]
La de los intervalos \(A\) será la misma para todos ellos y viene definida por:
\[\begin{equation*} A=\left\lceil \frac{Max(X_k)-Min(X_k)}{\lambda} \right\rceil \end{equation*}\]
Los intervalos serán: \([L_{1},L_{2}), [L_{2}, L_{3}),...,[L_{ \lambda},L_{ \lambda+1})\)
Donde \(L_{i}, L_{i+1}\) son los intervalos inferior y superior, respectivamente, del intevalo \(i\)-esimo.
La regla de Scott para determinar los extremos de los intervalos es la siguiente:
\[\begin{gather*} L_{1}= Min(X_k) - c \\ L_{2}=L_{1} + A \\ L_{3}=L_{2} + A\\ ... \\ L_{\lambda+1}=L_{\lambda} + A \end{gather*}\]Donde: \(c \geq 0\) debe ser elegido a conveniencia del analista.
En general:
\[\begin{gather*} L_{i}=L_{1} + (i-1)\cdot A \hspace{0.5cm} i=1,...,\lambda+1 \end{gather*}\]
La regla de Scott Modificada es una variacion de la regla de Scott que permite escoger el número de intervalos de categorizacion.
Según la regla de la Scott Modificada los intervalos de categorización de \(X_k\) son: \([L_{1},L_{2}), [L_{2}, L_{3}),...,[L_{ \lambda},L_{ \lambda+1})\)
Por tanto, a partir de \(X_k\) se obtiene la variable \(X_k^{cat}\) definida como:
\[\begin{equation*} x^{cat}_{ik} = \left\lbrace\begin{array}{l} 0, \text{ si $x_{ik} \in [L_{1},L_{2})$} \\ 1, \text{ si $x_{ik} \in [L_{2},L_{3}) $} \\ ... \\ \lambda, \text{ si $x_{ik} \in [L_{\lambda},L_{\lambda+1}) $} \end{array}\right. \end{equation*}\]
El procedimiento para calcular los intervalos de Scott Modificados es el siguiente:
Esta es la gran diferencia entre la regla de Scott simple y la modificada.
El número de intervalos \(\lambda\) se escoge segun el criterio del analista.
La de los intervalos \(A\) será la misma para todos ellos y viene definida por:
\[\begin{equation*} A=\left\lceil \frac{Max(X_k)-Min(X_k)}{\lambda} \right\rceil \end{equation*}\]
Los intervalos serán: \([L_{1},L_{2}), [L_{2}, L_{3}),...,[L_{ \lambda},L_{ \lambda+1})\)
Donde \(L_{i}, L_{i+1}\) son los intervalos inferior y superior, respectivamente, del intevalo \(i\)-esimo.
La regla de Scott para determinar los extremos de los intervalos es la siguiente:
\[\begin{gather*} L_{1}= Min(X_k) - c \\ L_{2}=L_{1} + A \\ L_{3}=L_{2} + A\\ ... \\ L_{\lambda+1}=L_{\lambda} + A \end{gather*}\]Donde: \(c \geq 0\) debe ser elegido a conveniencia del analista.
En general:
\[\begin{gather*} L_{i}=L_{1} + (i-1)\cdot A \hspace{0.5cm} i=1,...,\lambda+1 \end{gather*}\]
Para categorizar variables cuantitativas vamos a servirnos de la función cut() de R. Se recomienda leer la ayuda de esta función.
cut(variable, breaks)
breaks puede ser un número, por ejemplo 3 \(\Rightarrow\) cut() genera 3 intervalos que cubren las observaciones de la variable y son disjuntos, y con la misma amplitud, y devuelve a que intervalo pertenece cada observación de la variable.
breaks también puede ser un vector, por ejemplo c(1, 3, 8, 9, 12) \(\Rightarrow\) cut() genera los intervalos (1,3] (3,8], (8,9] (9,12], y devuelve a qué intervalo pertenece cada observación de la variable.
La funcion cut() es muy util para calcular frecuencias absolutas y relativas en variables cuantitativas.
Para calcular las frecuencias absolutas de una variable cuantitativa en 3 intervalos:
table(cut(Datos$ingresos, breaks = 3))
##
## (-1.06e+03,1.88e+04] (1.88e+04,3.86e+04] (3.86e+04,5.85e+04]
## 947 271 18
Para calcular las frecuencias relativas de una variable cuantitativa en 3 intervalos:
table(cut(Datos$ingresos, breaks = 3))/length(Datos$ingresos)
##
## (-1.06e+03,1.88e+04] (1.88e+04,3.86e+04] (3.86e+04,5.85e+04]
## 0.76618123 0.21925566 0.01456311
Categorizamos la variable ingresos usando la regla de la mediana:
Recordemos que segun la regla de la mediana los intervalos de categorización son: \([Min(X_k), Mediana(X_k)], (Mediana(X_k), Max(X_k)]\)
median(Datos$ingresos)
## [1] 12331
Vector con los extremos de los intervalos:
L <- c(min(Datos$ingresos), median(Datos$ingresos), max(Datos$ingresos))
levels( cut(Datos$ingresos, breaks = L , include.lowest = T) )
## [1] "[-1e+03,1.23e+04]" "(1.23e+04,5.85e+04]"
Categorizamos la variable ingresos, generando una nueva variable que indica el intervalo al que pertenece cada observación. Si la observacion \(j\)-esima de la variable ingresos pertenece al intervalo \(i\)-esimo, el valor \(j\)-esimo de la nueva variable será \(i-1\) , en este caso para \(i=1,2\) puesto que solo hay 2 intervalos de categorización.
a<-cut(Datos$ingresos, breaks = L , include.lowest = T)
ingresos_categorizados_regla_mediana <- ifelse( a == "[-1e+03,1.23e+04]" , 0 , 1 )
ingresos_categorizados_regla_mediana[1:20]
## [1] 1 1 0 1 1 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0
Ahora tenemos una nueva variable, la variable cuantitativa ingresos categorizada, la cual es binaria (toma valores 0,1). Por lo que podemos aplicar nuestra función Tabla_Frecuencias() a esta nueva variable:
Tabla_Frecuecias_Ingresos_Regla_Mediana <- Tabla_Frecuencias(Datos,ingresos_categorizados_regla_mediana, p1=1)
rownames(Tabla_Frecuecias_Ingresos_Regla_Mediana) <- levels(cut(Datos$ingresos, breaks = L, include.lowest = T, dig.lab=10))
Tabla_Frecuecias_Ingresos_Regla_Mediana
F.Abs | F.Rel | F.Abs.Cum | F.Rel.Cum | |
---|---|---|---|---|
[-999.5,12331] | 618 | 0.5 | 618 | 0.5 |
(12331,58470.4] | 618 | 0.5 | 1236 | 1.0 |
Calculamos los intervalos de Scott para la variable cuantitativa ingresos :
s=sd(Datos$ingresos)
n=length(Datos$ingresos)
max=max(Datos$ingresos)
min=min(Datos$ingresos)
#Amplitud teorica
At = 3.5*s*n^-(1/3)
#Numero de intervalos
lambda = ceiling((max-min)/At)
#Amplitud de los intervalos
A = ceiling((max-min)/lambda)
#Primer extremo
L1 = min
#Vector con los extremos de los intervalos
L = L1 + 0:lambda * A
El número de intervalos obtenidos con la regla de Scott es:
lambda
## [1] 23
El vector L con los extremos de los intervalos es:
L
## [1] -999.5 1586.5 4172.5 6758.5 9344.5 11930.5 14516.5 17102.5 19688.5
## [10] 22274.5 24860.5 27446.5 30032.5 32618.5 35204.5 37790.5 40376.5 42962.5
## [19] 45548.5 48134.5 50720.5 53306.5 55892.5 58478.5
Los intervalos obtenidos con la funcion cut aplicada sobre el vector L son:
levels(cut(Datos$ingresos, breaks = L , include.lowest = T))
## [1] "[-1e+03,1.59e+03]" "(1.59e+03,4.17e+03]" "(4.17e+03,6.76e+03]"
## [4] "(6.76e+03,9.34e+03]" "(9.34e+03,1.19e+04]" "(1.19e+04,1.45e+04]"
## [7] "(1.45e+04,1.71e+04]" "(1.71e+04,1.97e+04]" "(1.97e+04,2.23e+04]"
## [10] "(2.23e+04,2.49e+04]" "(2.49e+04,2.74e+04]" "(2.74e+04,3e+04]"
## [13] "(3e+04,3.26e+04]" "(3.26e+04,3.52e+04]" "(3.52e+04,3.78e+04]"
## [16] "(3.78e+04,4.04e+04]" "(4.04e+04,4.3e+04]" "(4.3e+04,4.55e+04]"
## [19] "(4.55e+04,4.81e+04]" "(4.81e+04,5.07e+04]" "(5.07e+04,5.33e+04]"
## [22] "(5.33e+04,5.59e+04]" "(5.59e+04,5.85e+04]"
La notación científica distorsiona los extremos de los intervalos. Usando el argumento dig.lab podemos desactivar la notacion cientifica, y asi obtener los intervalos con los extremos exactos:
levels(cut(Datos$ingresos, breaks = L , include.lowest = T, dig.lab=10))
## [1] "[-999.5,1586.5]" "(1586.5,4172.5]" "(4172.5,6758.5]"
## [4] "(6758.5,9344.5]" "(9344.5,11930.5]" "(11930.5,14516.5]"
## [7] "(14516.5,17102.5]" "(17102.5,19688.5]" "(19688.5,22274.5]"
## [10] "(22274.5,24860.5]" "(24860.5,27446.5]" "(27446.5,30032.5]"
## [13] "(30032.5,32618.5]" "(32618.5,35204.5]" "(35204.5,37790.5]"
## [16] "(37790.5,40376.5]" "(40376.5,42962.5]" "(42962.5,45548.5]"
## [19] "(45548.5,48134.5]" "(48134.5,50720.5]" "(50720.5,53306.5]"
## [22] "(53306.5,55892.5]" "(55892.5,58478.5]"
dig.lab=10 \(\Rightarrow\) se muestran los 10 primeros digitos de los intervalos sin recurrir a notacion cientifica, en este caso tienen menos digitos que 10, por lo que no se recurre a la notacion cientifica.
Como hay muchos intervalos, usar ifelse() para obtener la variable cuantitativa categorizada no es eficiente.
Pero existe una opción mucho más eficiente para tal proposito en estos casos.
El siguiente código asigna a cada intervalo un número (al \(i\)-esimo intervalo el número \(i\)), y muestra a que intervalo pertenece cada observación de la variable cuantitativa ingresos, usando para ello el argumento labels
cut(Datos$ingresos, breaks = L, include.lowest = T, labels=F)[1:20]
## [1] 9 8 5 7 9 7 2 6 7 3 2 2 3 6 7 3 3 3 4 5
Categorizamos la variable ingresos, generando una nueva variable que que indica el intervalo al que pertenece cada observación. Si la observacion \(j\)-esima de la variable ingresos pertenece al intervalo \(i\)-esimo, el valor \(j\)-esimo de la nueva variable será \(i-1\) , en este caso para \(i=1,2,...,23\), puesto que hay 23 intervalos de categorización.
a<-(cut(Datos$ingresos, breaks = L, include.lowest = T, labels=F))
ingresos_categorizados_regla_Scott <- a-1
ingresos_categorizados_regla_Scott[1:20]
## [1] 8 7 4 6 8 6 1 5 6 2 1 1 2 5 6 2 2 2 3 4
Calculamos la tabla de frecuencias de la variable ingresos usando la función Tabla_Frecuencias() , aplicada sobre la variable ingresos categorizada con la regla de Scott:
Tabla_Frecuencias_Ingresos_Regla_Scott <- Tabla_Frecuencias(Datos, ingresos_categorizados_regla_Scott, p1=22)
rownames(Tabla_Frecuencias_Ingresos_Regla_Scott) <- paste(levels(cut(Datos$ingresos, breaks = L,
include.lowest = T, dig.lab=10 )) , 0:22 , sep = " - ")
Tabla_Frecuencias_Ingresos_Regla_Scott <- round(Tabla_Frecuencias_Ingresos_Regla_Scott , 3)
Tabla_Frecuencias_Ingresos_Regla_Scott
F.Abs | F.Rel | F.Abs.Cum | F.Rel.Cum | |
---|---|---|---|---|
[-999.5,1586.5] - 0 | 14 | 0.011 | 14 | 0.011 |
(1586.5,4172.5] - 1 | 57 | 0.046 | 71 | 0.057 |
(4172.5,6758.5] - 2 | 141 | 0.114 | 212 | 0.172 |
(6758.5,9344.5] - 3 | 177 | 0.143 | 389 | 0.315 |
(9344.5,11930.5] - 4 | 199 | 0.161 | 588 | 0.476 |
(11930.5,14516.5] - 5 | 157 | 0.127 | 745 | 0.603 |
(14516.5,17102.5] - 6 | 128 | 0.104 | 873 | 0.706 |
(17102.5,19688.5] - 7 | 117 | 0.095 | 990 | 0.801 |
(19688.5,22274.5] - 8 | 71 | 0.057 | 1061 | 0.858 |
(22274.5,24860.5] - 9 | 61 | 0.049 | 1122 | 0.908 |
(24860.5,27446.5] - 10 | 32 | 0.026 | 1154 | 0.934 |
(27446.5,30032.5] - 11 | 20 | 0.016 | 1174 | 0.950 |
(30032.5,32618.5] - 12 | 15 | 0.012 | 1189 | 0.962 |
(32618.5,35204.5] - 13 | 17 | 0.014 | 1206 | 0.976 |
(35204.5,37790.5] - 14 | 9 | 0.007 | 1215 | 0.983 |
(37790.5,40376.5] - 15 | 5 | 0.004 | 1220 | 0.987 |
(40376.5,42962.5] - 16 | 5 | 0.004 | 1225 | 0.991 |
(42962.5,45548.5] - 17 | 3 | 0.002 | 1228 | 0.994 |
(45548.5,48134.5] - 18 | 4 | 0.003 | 1232 | 0.997 |
(48134.5,50720.5] - 19 | 2 | 0.002 | 1234 | 0.998 |
(50720.5,53306.5] - 20 | 0 | 0.000 | 1234 | 0.998 |
(53306.5,55892.5] - 21 | 1 | 0.001 | 1235 | 0.999 |
(55892.5,58478.5] - 22 | 1 | 0.001 | 1236 | 1.000 |
Esta tabla nos revela informacion muy util, como por ejemplo que hay 14 observaciones de la variable ingresos que caen en el intervalo, o equivalentemente, hay 14 ceros (0) entre los valores de la variable ingresoso categorizada con la regla de Scott.
Un histograma es un gráfico de barras apiladas empleado para representar las frecuencias absolutas o relativas de una variable cuantitativa.
Para representar el histograma de una variable cuantitativa, se necesitan las frecuencias absolutas o relativas de dicha variable, por lo que se necesitan obtener los intervalos de categorizacion de la variable cuantitativa. Para ello se pueden seguir las reglas de categorización antes vistas.
Una vez que tenemos los intervalos de categorizacion de la variable cuantitativa, el histograma se construye de la siguiente manera:
En el eje x contiene el recorrido de la variable cuantitativa. En el eje y las frecuencias absolutas o relativas de los intervalos de categorización en la variable cuantitativa.
En el interior del gráfico hay barras apiladas, tantas como intervalos, y la \(i\)-esima barra está asignada al intervalo \(i\)-esimo, con una altura igual a la frecuencia absoluta o relativa del intervalo i-esimo en la variable cuantitativa.
Generamos un histograma de la variable cuantitativa ingresos usando los intervalos de categorización que se obtienen con la regla de Scott.
ggplot(data = Datos, aes(x=ingresos ))+
geom_histogram(aes(y = after_stat(count / sum(count))) , breaks=L , fill="bisque3", color="black")+
scale_y_continuous( n.breaks = 15 )+
scale_x_continuous(n.breaks = 12)+
labs(x = "Ingresos",y = "Frecuencia Relativa")
Añadimos al histograma anterior lineas discontinuas verticales asociadas a los valores de algunos estadisticos descriptivos:
Un gráfico de barras es un gráfico de barras no apliladas empleado para representar las frecuencias absolutas o relativas de una variable categorica.
El gráfico de barras se construye de la siguiente manera:
En el eje x contiene el recorrido de la variable categorica. En el eje y las frecuencias absolutas o relativas de los intervalos de categorización en la variable cuantitativa.
En el interior del gráfico hay barras no apiladas, tantas como categorias tiene la variable categorica, cada barra está asignada a una categoria de la variable, y tiene una altura igual a la frecuencia absoluta o relativa de la categoria en la variable categorica.
Generamos un gráfico de barras de la variable categórica neduc (nivel de educación):
ggplot(data = Datos, aes(x=neduc ))+
geom_bar(aes(y = after_stat(count / sum(count))) ,
fill="bisque3", color="black")+
scale_y_continuous( n.breaks = 15 )+
labs(x = "Nivel de Educacion",
y = "Frecuencia Relativa")
Generamos un box-plot de la variable cuantitativa ingresos
ggplot(Datos) +
geom_boxplot( aes(x = ingresos), fill="bisque3",
color = 'black') +
xlab("Ingresos") +
ggtitle("Box-plot de la variable Ingresos ")+
scale_x_continuous(n.breaks = 12)
El box-plot o gráfico de caja es un gráfico para variables cuantitativas que contiene los siguientes elementos:
El extremos izquierdo de la caja (box) representa el valor \(Q(0.25, X_k)\)
El extremo derecho de la caja representa el valor \(Q(0.75, X_k)\)
La linea del interior de la caja representa el valor \(Mediana(X_k)\)
El extremo izquierdo de la linea horizontal es:
Donde: \(RIC= Q(0.75,X_k) - Q(0.25,X_k)\) es el rango intercuartilico de \(X_k\).
Añadimos lineas verticales discontinuas con valores relevantes sobre el gráfico anterior:
El coeficiente de asimetria de Fisher de la variable cuantitativa \(X_k\) es:
\[\begin{gather*} Asimetria(X_k) = \dfrac{\overline{x_{k}}_{3}}{S(X_k)^{3}} \end{gather*}\]donde: \[\begin{gather*} \overline{x_{k}}_{3}=\dfrac{1}{n}\sum_{i=1}^{n} (x_{ik})^{3} \end{gather*}\]
El coeficiente de asimetria de Fisher mide el grado de simetria de la distribucion de las observaciones de una variable respecto de su media aritmética.
Si \(Asimetria(X_k) > 0\) \(\Rightarrow\) la distribución de \(X_k\) es asimétrica a la derecha.
Si \(Asimetria(X_k) <0\) \(\Rightarrow\) la distribución de \(X_k\) es asimétrica a la izquierda.
Si la distribución es simétrica respecto de la media \(\Rightarrow\) \(Asimetria(X_k)=0\) . Pero el recíproco no es cierto.
library(moments)
skewness(Datos$ingresos)
## [1] 1.304721
El coeficiente de curtosis de la variable cuantitativa \(X_k\) es:
\[\begin{gather*} Curtosis(X_k) = \dfrac{\overline{x_k}_{4}}{S(X_k)^{4}} \end{gather*}\]Donde: \[\begin{gather*} \overline{x_k}_{4}=\frac{1}{n}\sum_{i=1}^{n} (X_i)^{4} \end{gather*}\]
El coeficiente de curtosis mide principalemte el grado de apuntamiento de la distribucion de las observaciones de una variable.
Si \(Curtosis(X_k) > 3\) \(\Rightarrow\) la distribucion de \(X_k\) es mas apuntada y con colas mas gruesas que la distribución normal.
Si \(Curtosis(X_k) < 3\) \(\Rightarrow\) la distribucion de \(X_k\) es menos apuntada y con colas menos gruesas que la distribución normal.
library(moments)
kurtosis(Datos$ingresos)
## [1] 5.630726
Vamos a crear una función en R a la que le metemos un par de variables y nos devuelve una tabla con las frecuencias relativas conjuntas de las dos variables.
Las caracteristicas de la función son las siguientes:
Entrada: matriz de datos \(X\)
Entrada: variables \(V1\) y \(V2\) de \(X\)
\(V1\) y \(V2\) deben estar cargadas en R como vectores
\(V1\) y \(V2\) pueden ser variables categoricas o cuantitativas categorizadas
El recorrido de \(V1\) tiene que ser \(0:p1\) , con \(p1=1,2,3,...\)
El recorrido de \(V2\) tiene que ser \(0:p2\) , con \(p2=1,2,3,...\)
Entrada: \(p1\) , \(p2\)
\(V1\) es la variable de la parte superior (columnas) de la tabla
\(V2\) es la variable de la parte inferior (filas) de la tabla
Tabla_Frecuencias_Relativas_Conjuntas_2_Variables <- function(X, V1, V2, p1, p2){
tabla<- matrix(NA, nrow=p2+1, ncol=p1+1 )
for(i in 0:p2){
for(j in 0:p1){
tabla[i+1,j+1] <- ( dim( ( X %>% select(V1,V2) %>% filter(V1==j & V2==i) ) )[1] / dim(X)[1] )
}
}
rownames(tabla)<-0:p2
colnames(tabla)<-0:p1
print("V1 esta en la parte superior (columnas) de la tabla y V2 en la parte inferior (filas)")
tabla <- as.data.frame(tabla)
return(tabla)
}
Ejemplo 1: Dos variables categoricas
Datos$edad <- recode(Datos$edad, "1"="0", "2"="1", "3"="2", "4"="3")
Datos$edad<- as.double( Datos$edad )
edad<-Datos$edad
Datos$genero <- recode(Datos$genero, "1"="0", "2"="1" )
Datos$genero <- as.double( Datos$genero )
genero <- Datos$genero
Tabla_Frecuencias_Relativas_Conjuntas_2_Variables(X=Datos, V1=edad , V2=genero, p1=3, p2=1 )
## [1] "V1 esta en la parte superior (columnas) de la tabla y V2 en la parte inferior (filas)"
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 0.0631068 | 0.2160194 | 0.1108414 | 0.1076052 |
1 | 0.0590615 | 0.2119741 | 0.1116505 | 0.1197411 |
Por ejemplo, la proporción de individuos que son hombres (genero=0) y mayores de 60 años (edad=3) es 0.107
Ejemplo 2: Una variable categorica y otra cuantitativa
Lo primero es categorizar la variable cuantitativa, para ello aplicamos una regla facil de categorizacion como la de la media
L<- c(min(Datos$ingresos), mean(Datos$ingresos), max(Datos$ingresos))
b<-cut(Datos$ingresos , breaks = L , include.lowest = T)
ingresos_categorizados_regla_media <- recode(b, "[-1e+03,1.41e+04]"=0 , "(1.41e+04,5.85e+04]"=1)
Hay que añadir la variable ingresos categorizada a la matriz de datos
Datos <- cbind(Datos, ingresos_categorizados_regla_media)
Tabla_Frecuencias_Relativas_Conjuntas_2_Variables(X=Datos, V1=ingresos_categorizados_regla_media , V2=genero, p1=1, p2=1 )
## [1] "V1 esta en la parte superior (columnas) de la tabla y V2 en la parte inferior (filas)"
0 | 1 | |
---|---|---|
0 | 0.2847896 | 0.2127832 |
1 | 0.2985437 | 0.2038835 |
Por ejemplo, la proporción de individuos que son hombres (genero=0) con ingresos superiores a la media (ingresos_categorizados_regla_media=1) es 0.21
Comprobación:
# Calculamos manualmente la entrada (V1=0, V2=0)
( dim( ( Datos %>% select(ingresos_categorizados_regla_media, genero) %>% filter(ingresos_categorizados_regla_media==0 & genero==0) ) )[1] / dim(Datos)[1] )
## [1] 0.2847896
Para dos variables cuantitativas seria un procedimiento analogo.
Vamos a crear una función en R a la que le metemos tres variables y nos devuelve una tabla con las frecuencias relativas conjuntas de las tres variables, pero considerando un valor fijo de una de ellas.
Las caracteristicas de la función son las siguientes:
Entrada: matriz de datos \(X\)
Entrada: variables \(V1\) , \(V2\) y \(V3\) de \(X\)
\(V1\) , \(V2\) y \(V3\) deben estar cargadas en R como vectores
\(V1\) , \(V2\) y \(V3\) pueden ser variables categoricas o cuantitativas categorizadas
El recorrido de \(V1\) tiene que ser \(0:p1\) , con \(p1=1,2,3,...\)
El recorrido de \(V2\) tiene que ser \(0:p2\) , con \(p2=1,2,3,...\)
El recorrido de \(V3\) tiene que ser \(0:p2\) , con \(p3=1,2,3,...\)
Entrada: \(p1\) , \(p2\), \(p3\)
\(V1\) es la variable de la parte superior (columnas) de la tabla
\(V2\) es la variable de la parte inferior (filas) de la tabla
\(V3\) es la variable cuyo valor se fija
Entrada el valor fijado de \(V3\) (valor_fijado_V3)
Tabla_Frecuencias_Relativas_Conjuntas_3_Variables <- function(X, V1, V2, p1, p2, V3, valor_fijado_V3){
tabla<- matrix(NA, nrow=p2+1, ncol=p1+1 )
for(i in 0:p2){
for(j in 0:p1){
tabla[i+1,j+1] <- ( dim( ( X %>% filter( V1==j & V2==i & V3==valor_fijado_V3 ) ) )[1] / dim(X)[1] )
}
}
rownames(tabla)<-0:p2
colnames(tabla)<-0:p1
print("Tabla de contingencia conjunta entre las variables V1 , V2 y V3, donde V1 esta en la parte superior (columnas) de la tabla y V2 en la inferior (filas), y V3 toma siempre un mismo valor fijado")
tabla <- as.data.frame(tabla)
return(tabla)
}
Ejemplo: una variable cuantitativa y dos variables categoricas
Tabla_Frecuencias_Relativas_Conjuntas_3_Variables(X=Datos, V1= ingresos_categorizados_regla_media , V2= genero , p1=1, p2=1, V3= edad, valor_fijado_V3=3)
## [1] "Tabla de contingencia conjunta entre las variables V1 , V2 y V3, donde V1 esta en la parte superior (columnas) de la tabla y V2 en la inferior (filas), y V3 toma siempre un mismo valor fijado"
0 | 1 | |
---|---|---|
0 | 0.0776699 | 0.0299353 |
1 | 0.0938511 | 0.0258900 |
Por ejemplo, la proporción de individuos que son hombres (genero=0) con ingresos superiores a la media (ingresos_categorizados_regla_media=1) y mayores de 60 años (edad=3) es 0.03
Comprobación:
# Calculamos manualmente la entrada (V1=0, V2=0, V3=3)
( dim( ( Datos %>% filter( ingresos_categorizados_regla_media==0 & genero==0 & edad==3 ) ) )[1] / dim(Datos)[1] )
## [1] 0.0776699
Se puede extender esta idea a mas dimensiones (4,5,6… variables), aunque no es habitual un analisis con mas de 3 varibles.
La idea es obtener una tabla de frecuencias relativas para 2 variables, \(V1\) y \(V2\), donde \(V1\) condiciona a \(V2\) , \((V2 | V1)\).
Las caracteristicas de la función son las siguientes:
Entrada: matriz de datos \(X\)
Entrada: variable \(V1\)
Entredas \(V2\_indice\) es el indice de la variable V2 , si la variable \(V2\) ocupa la columna 6 en \(X\), entonces V2_indice=6
\(V1\) debe estar cargada en R como vector
\(V1\) y \(V2\) pueden ser variables categoricas o cuantitativas categorizadas
El recorrido de \(V1\) tiene que ser \(0:p1\) , con \(p1=1,2,3,...\)
El recorrido de \(V2\) tiene que ser \(0:p2\) , con \(p2=1,2,3,...\)
Entrada: \(p1\) y \(p2\)
\(V1\) es la variable que condiciona, la de la parte superior (columnas) de la tabla
\(V2\) es la variable de la parte inferior (filas) de la tabla
Tabla_Frecuencias_Relativas_Condicionadas_2_Variables <- function(X, V1, V2_indice, p1, p2 ){
tabla<- matrix(NA, nrow=p2+1, ncol=p1+1 )
for(i in 0:p2){
for(j in 0:p1){
X_new <- X %>% filter( V1==j)
V2_new<- X_new[, V2_indice]
tabla[i+1,j+1] <- (dim( ( X_new %>% filter(V2_new==i) ) )[1] / dim(X_new)[1])
}
}
rownames(tabla)<-0:p2
colnames(tabla)<-0:p1
print(" V1 es la variable que condiciona y esta en la parte superior (columnas) de la tabla y V2 en la inferior (filas)")
tabla <- as.data.frame(tabla)
return(tabla)
}
Tabla_Frecuencias_Relativas_Condicionadas_2_Variables(Datos, V1=genero, V2_indice=9, p1=1, p2=1)
## [1] " V1 es la variable que condiciona y esta en la parte superior (columnas) de la tabla y V2 en la inferior (filas)"
0 | 1 | |
---|---|---|
0 | 0.5723577 | 0.5942029 |
1 | 0.4276423 | 0.4057971 |
# La variable V2 es la de indice 9 de la matriz de datos, que es la variable ingresos categorizada con la regla de la media.
Por ejemplo, la proporción de personas con ingresos superiores a la media (ingresos_categorizados_regla_media=1), dentro del grupo de los hombres (genero=0) es 0.43
Comprobación:
# Comprobamos cual es la variable V2 usada en el codigo anterior
names(Datos %>% select(9))
## [1] "ingresos_categorizados_regla_media"
# Calculamos manualmente la entrada (V1=0, V2=0)
dim((Datos %>% filter(genero==0))%>% filter(ingresos_categorizados_regla_media==0))[1] / dim((Datos %>% filter(genero==0)))[1]
## [1] 0.5723577
La idea es obtener una tabla de frecuencias relativas para 3 variables, \(V1\) , \(V2\) y \(V3\), donde \(V1\) y \(V3\) condicionan a \(V2\) , \((V2 | V1 , V3 )\), y \(V3\) tiene un valor fijado.
Las caracteristicas de la función son las siguientes:
Entrada: matriz de datos \(X\)
Entrada: variable \(V1\) y \(V3\)
Entredas \(V2\_indice\) es el indice de la variable V2 , si la variable \(V2\) ocupa la columna 6 en \(X\), entonces V2_indice=6
\(V1\) y \(V3\) debe estar cargada en R como vector
\(V1\), \(V2\) y \(V3\) pueden ser variables categoricas o cuantitativas categorizadas
El recorrido de \(V1\) tiene que ser \(0:p1\) , con \(p1=1,2,3,...\)
El recorrido de \(V2\) tiene que ser \(0:p2\) , con \(p2=1,2,3,...\)
El recorrido de \(V3\) tiene que ser \(0:p3\) , con \(p3=1,2,3,...\)
Entrada: \(p1\) , \(p2\)
\(V1\) es una de las dos variables que condicionan, la de la parte superior (columnas) de la tabla
\(V3\) es la otra variable que condiciona, pero tiene un valor fijado
\(V2\) es la variable de la parte inferior (filas) de la tabla
Tabla_Frecuencias_Relativas_Condicionadas_3_Variables <- function(X, V1, V2_indice, p1, p2 , V3, valor_fijado_V3 ){
tabla<- matrix(NA, nrow=p2+1, ncol=p1+1 )
for(i in 0:p2){
for(j in 0:p1){
X_new <- X %>% filter( V1==j & V3==valor_fijado_V3)
V2_new<- X_new[, V2_indice]
tabla[i+1,j+1] <- ( dim( ( X_new %>% filter(V2_new==i) ) )[1] / dim(X_new)[1] )
}
}
rownames(tabla)<-0:p2
colnames(tabla)<-0:p1
print("V1 y V3 condicionan a V2, V3 toma valor fijo, V1 está en la parte superior (columnas) de la tabla y V2 en la inferior (filas)")
tabla <- as.data.frame(tabla)
return(tabla)
}
Tabla_Frecuencias_Relativas_Condicionadas_3_Variables(Datos ,V1=genero, V2_indice=9, p1=1, p2=1, V3=edad, valor_fijado_V3 =3 )
## [1] "V1 y V3 condicionan a V2, V3 toma valor fijo, V1 está en la parte superior (columnas) de la tabla y V2 en la inferior (filas)"
0 | 1 | |
---|---|---|
0 | 0.7218045 | 0.7837838 |
1 | 0.2781955 | 0.2162162 |
Por ejemplo, la proporción de personas con ingresos superiores a la media (ingresos_categorizados_regla_media=1), dentro del grupo de los hombres (genero=0) mayores de 60 años (edad=3) es 0.28
Comprobación:
# Comprobamos cual es la variable V2 usada en el codigo anterior
names(Datos %>% select(9))
## [1] "ingresos_categorizados_regla_media"
# Calculamos manualmente la entrada (V1=0, V2=0, V3=3)
dim((Datos %>% filter(genero==0 & edad==3) )%>% filter(ingresos_categorizados_regla_media==0))[1] / dim((Datos %>% filter(genero==0 & edad==3) ))[1]
## [1] 0.7218045