<- data.frame(var1 = c(NA, 5, 12, 1, 31), # NA como número
data1 var2 = as.factor(c(2, 1, NA, NA, 3)), # NA como factor)
var3 = c(10, 6, 0/0, 9, Inf), # NaN e Inf
var4 = c("Hola Mundo", "Texto NA", NA, "NA", NA)) # NA como texto
3 Manejo de Datos
3.1 Identificación y manejo de datos missing
3.2 Datos missing en R
El término Missing data o Missing value hace referencia al concepto de no tener el valor de un registro guardado, es decir, que se encuentre vacío.
Dependiendo del Software que se utilice y del tipo de variable al que pertenezca para el dato faltante pueden usarse diferentes términos.
En SQL por ejemplo cuando no se tiene información se utiliza NULL. En python por el contrario, se tiene una gestión de los valores faltantes más compleja. Se utiliza el objeto None según la documentación oficial para denotar la falta de valor. Pero al utilizar librerías más enfocadas a la ciencia de datos o análisis estadístico como pandas, para optimizar el uso de la memoria se tienen diferentes términos según el tipo de datos. np.nan es el término por defecto aunque internamente se comporta como un número de tipo doble, para fechas (datatime64) se utiliza NaT. Sin embargo, es posible aplicar las mismas funciones de detección de datos faltantes a ambos.
En R los valores faltantes se representan con el símbolo NA (Not Available). Los valores imposibles (por ejemplo, dividir por cero) se representan con el símbolo NaN (Not a Number). Esto no incluye los valores infinitos, que disponen de sus propios términos (-inf, inf).
Para un entendimiento mas adecuado se presentara el siguiente ejemplo.
3.3 Identificación de datos missing
Para explicar este tema se usará el ejemplo anterior y aunque en este ejemplo es fácil de identificar donde se encuentran los NA, en la mayoría de los casos prácticos el volumen de datos no permitirá que se identifique con facilidad la presencia de algún valor perdido. Sin embargo, en R la función is.na()
permite obtener un vector lógico con TRUE en los casos de valores perdidos. Al anidar la función any()
con la función is.na()
se verifica si hay algún valor perdido, además la función which()
permite identificar la posición de estos valores, mean()
el porcentaje de NA y sum()
la cantidad de NA.
Primero usaremos la funcion is.na()
para obtener un vector lógico con TRUE en los casos de valores perdidos (datos missing).
is.na(data1)
var1 var2 var3 var4
[1,] TRUE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE TRUE TRUE TRUE
[4,] FALSE TRUE FALSE FALSE
[5,] FALSE FALSE FALSE TRUE
Ahora anidaremos la función any()
con la función is.na()
para verificar si hay algún valor perdido en el ejemplo.
any(is.na(data1))
[1] TRUE
Una alternativa para este codigo es el siguiente:
anyNA(data1)
[1] TRUE
Con respecto a la función which()
esta permite identificar la posición de los datos missing.
which(is.na(data1))
[1] 1 8 9 13 18 20
Tambien podemos usar la funcion mean()
para hallar el porcentaje de datos missing.
mean(is.na(data1))
[1] 0.3
Finalmente podemos usar la funcion sum()
para identificar la cantidad de datos missing en el ejemplo.
sum(is.na(data1))
[1] 6
3.4 Manejo de datos missing
Estos son algunos manejos que se puede hacer con los datos missing.
3.4.1 Omitir datos missing
Se puede omitir valores NA mediante indexación lógica, por ejemplo:
!is.na(data1)] data1[
[1] " 5" "12" " 1" "31" "2"
[6] "1" "3" " 10" " 6" " 9"
[11] "Inf" "Hola Mundo" "Texto NA" "NA"
3.4.2 Imprimir un error de no encontrar datos missing
La función na.fail()
imprime un error en caso de encontrar valores perdidos, esta es usada como mensaje de advertencia en caso de condicionales o estructuras como las funciones:
na.fail(data) -> Error in na.fail.default(data) : missing values in object
3.4.3 Contabilizar datos missing
Una forma de contabilizar datos missing es mediante la función table()
, esta nos permite obtener una tabla de frecuencia de nuestros datos:
<-c(1, 0, 1, 1, 1, 0, NA, 0)
t table(t)
t
0 1
3 4
table(t, useNA = "always")
t
0 1 <NA>
3 4 1
<-c(24, 14, 17, 25, 12, NA, 11, NA) y
En el caso de bases datos, que son más frecuente que los vectores, podemos también identificar datos missing. Las siguientes líneas de códigos insertan una base de datos llamada data2, con los vectores creados anteriormente.
<- data.frame(mujer=t, edad=y)
data2 data2
mujer edad
1 1 24
2 0 14
3 1 17
4 1 25
5 1 12
6 0 NA
7 NA 11
8 0 NA
Mediante la función vectorizada apply()
, podemos obtener, por columna o variable, la cantidad, el porcentaje o la ubicación de los valores lógicos de nuestra base de datos. Esto se logra anidando esta función apply()
con la función is.na()
vista anteriormente. Verifique que si cambiamos el 2 por el 1, repite el ejercicio anterior para cada una de las observaciones.
apply(is.na(data2), 2, mean) # Porcentaje de NA por columna
mujer edad
0.125 0.250
apply(is.na(data2), 2, sum) # Cantidad de NA por columna
mujer edad
1 2
apply(is.na(data2), 2, which) # Posición de NA por columna
$mujer
[1] 7
$edad
[1] 6 8
Esta posición se puede verificar de forma directa para cada variable (columna):
which(is.na(data2[ , 2]))
[1] 6 8
Ahora bien, si queremos ambos operadores, lo que hacemos para que la función apply()
aplique dos funciones, es crear una nueva función que haga las dos tareas a la vez:
<-function(y) {
f1 <-mean(y);
a<-sum(y)
breturn(c(a,b))
}
apply(is.na(data2), 2, f1)
mujer edad
[1,] 0.125 0.25
[2,] 1.000 2.00
3.4.4 Verificar variables con datos missing
Primero para este manejo agregaremos una variable llamada peso a nuestra base de datos (data2), la cual, de manera intencional no contiene datos missing:
$peso <- c(70, 63, 68, 82, 74, 58, 63, 71) data2
La función apply()
, usando como argumento la función sum()
, nos permite verificar cuales variables tienen al menos un dato missing. Como ejemplo, creamos un vector lógico llamado f2 = TRUE en los casos donde la columna tenga al menos un dato missing. Posteriormente usamos la indexación lógica para acceder a los nombres de las columnas identificadas:
<- apply(is.na(data2), 2, sum)>=1
f2 f2
mujer edad peso
TRUE TRUE FALSE
==TRUE] f2[f2
mujer edad
TRUE TRUE
3.4.5 Obtener la cantidad de observaciones de la data, donde ninguna observación contiene datos missing
La función complete.case()
permite obtener la cantidad de observaciones en cualquier data, donde ninguna observación contiene datos missing. En este caso usaremos la data2, en tal caso, se utiliza el vector lógico complete.cases(data2) para poder indexar la data2, para poder acceder a estas observaciones, donde ninguna de las variables cumplen con ser NA.
complete.cases(data2)
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE
complete.cases(data2), ] data2[
mujer edad peso
1 1 24 70
2 0 14 63
3 1 17 68
4 1 25 82
5 1 12 74
De forma más directa, na.omit()
permite realizar esta tarea directamente:
na.omit(data2)
mujer edad peso
1 1 24 70
2 0 14 63
3 1 17 68
4 1 25 82
5 1 12 74
3.4.6 Acceder a las variables que tengan un dato missing
Adicionalmente a lo anteior, mediante el operador de negación (!) podemos acceder a las observaciones donde alguna de las variables tiene un dato missing.
!complete.cases(data2), ] data2[
mujer edad peso
6 0 NA 58
7 NA 11 63
8 0 NA 71
3.5 Identificación y manejo de datos outlier e inconsistentes
3.6 Datos outlier
Se denominan casos outliers u atípicos a aquellas observaciones con características diferentes de las demás. Este tipo de casos no pueden ser caracterizados categoricamente como benéficos o problemáticos sino que deben ser contemplados en el contexto del análisis y debe evaluarse el tipo de información que pueden proporcionar. Su principal problema radica en que son elementos que pueden no ser representativos de la población pudiendo distorsionar seriamente el comportamiento de los contrastes estadísticos. Por otra parte, aunque diferentes a la mayor parte de la muestra, pueden ser indicativos de las características de un segmento válido de la población y, por consiguiente, una señal de la falta de representatividad de la muestra.
3.7 Identificación de datos outlier
Para la identificación de datos outlier se mostrara 5 formas de identificar, pero antes se generará una variable aleatoria x con valores aleatorios de 100 edades de niños en un determinado centro escolar (x< sample(5:16,100,replace=T))
y se introducen tres valores atípicos intencionalmente en las observaciones [10,21,33] correspondiente a las edades de 21,31 y 40 años, respectivamente.
<-sample(5:16,100,replace=T)
xc(10,21,33)]<- c(21,31,40)
x[plot(x, type="b", pch=16)
3.7.1 Identificación a partir de gráficos
El gráfico de caja (boxplot) constituye una primera opción al momento de analizar e identificar datos atípicos, el mismo presenta la mediana, el primer y tercer cuartil, además del 1.5*iqr o rango intercuartílico. En el caso de R, se puede verificar que la opción boxplot.stats(x)$out
permite identificar los valores considerados como outliers y los valores utilizados para representar el boxplot.
boxplot(x)
boxplot.stats(x)
$stats
[1] 5 7 11 14 21
$n
[1] 100
$conf
[1] 9.894 12.106
$out
[1] 31 40
3.7.2 Normalización de variables: identificación a partir de la distancia de la media
Otra estrategia para la identificación de valores outliers, consiste en normalizar la variable de interés de la forma tradicional, lo que permite obtener una nueva variable zx, que se interpreta como el número de unidades (positivas o negativas, dependiendo del signo) en que se una observación se encuentre alejada de la media de la serie.
<- (x-mean(x))/sd(x) zx
Una vez tenemos la variable normalizada, se consideran como valores outliers las observaciones que se encuentren a más de 3 desviaciones estándar del promedio (abs(zx)>3)
. En tal sentido, verifique que las próximas líneas de instrucciones muestran:
i) La creación de la variable edad normalizada;
ii) El uso de la función which()
para identificar la posición de aquellas observaciones que cumplen la regla establecida (abs(zx)>3)
, en palabras, edades que se encuentren a más de 3 desviaciones desde su media;
iii) Por último, se utiliza el concepto de indexación, para acceder mediante las coordenadas de posición, a las edades que superan este margen [x[which(zx>3)]]
. Este valor se deriva del hecho que Zx~N(0,1), por tanto, una observación que diste de 3 desviaciones de la media se considera como un valor atípico.
which(abs(zx)>3)
[1] 21 33
which(zx>3)] x[
[1] 31 40
<-as.numeric(abs(zx)>3)
pch_siteplot(x, pch = pch_site, col = gray((1:4)/6)[abs(zx)])
<- (x + abs(min(x)))/max(x + abs(min(x)))
valcol plot(x, pch = 16, col = rgb(0, 0, valcol))
3.7.3 Identificación a partir de la prueba de Tukey
El problema de la identificación anterior es que los mementos a partir del cual se estandariza la variable, dependen del valor medio estimado, y por tanto, están incidido por los valores robustos. Una alternativa es utilizar una medida de dispersión robusta a valores atípicos o outliers, y posteriormente establecer los rangos que permitan la identificación de estos datos.
La prueba Tukey propone establecer un rango a partir del rango intercuartílico (IQR=q3-q1)
, que no depende de los valores extremos. Este no es una regla del universo, más bien es una convención o acuerdo entre los estadísticos. Posteriormente, se establece un rango para determinar datos atípicos a partir de los datos que excedan el intervalo:
<- quantile(x, 0.25)
q1 q1
25%
7
<- quantile(x, 0.75)
q3 q3
75%
14
<-q3-q1 # Rango = IQR(x)
iqr iqr
75%
7
<- x<(q1-1.5*iqr) | x>(q3+1.5*iqr)
tukey which(tukey)
[1] 21 33
x[tukey]
[1] 31 40
3.7.4 Identificación a partir de la prueba de Tukey ajustada
Como observan en el ejemplo anterior, las observaciones identificadas como outliers siguen siendo 21 y 33, donde se registran individuos con edades de 31 y de 40 años, por lo que, continua sin reconocer el valor de 21 años (insertado intencionalmente) como un outlier. Una alternativa práctica para aumentar la sensibilidad de la prueba, es obtener los quintiles a partir del vector de variables originales recortado a partir de los valores extremos. Es decir, desprendernos de un porcentaje determinado de los valores extremos (por ejemplo el 5% de los datos colocados en el extremo en ambas colas de la distribución de la variable) y a partir de este vector recortado [xrecortada<-x[x>w5_95[1]& x<x5_95[2]]]
, obtener los quantiles y el rango intercuartílico (quantile(xrecortada, 0.25))
, por tanto, obteniendo un rango más estrecho. Ahora, se obtienen los valores anormales, utilizando el rango creado a partir del vector recortado (tukeyR <- x<(q1a-1.5*iqra)| x>(q3a+1.5*iqra))
.
<- quantile(x, c(0.1, 0.90))) (x5_95
10% 90%
6 15
<-x[x>x5_95[1] & x<x5_95[2]] xrecortada
<- quantile(xrecortada, 0.25)) (q1a
25%
9
<- quantile(xrecortada, 0.75)) (q3a
75%
12
<-q3a-q1a # Rango = IQR(x)
iqra<- x<(q1a-1.5*iqra) | x>(q3a+1.5*iqra)
tukeyR which(tukeyR)
[1] 10 21 33
x[tukeyR]
[1] 21 31 40
plot(x, pch = 16, col = rgb(0, 0, valcol), ylim=c(-0,50))
abline(h=c(q1-1.5*iqr,q3+1.5*iqr), col="#FF4040")
abline(h=c(q1a-1.5*iqra,q3a+1.5*iqra), col="#1874CD", lwd=3, lty=2)
Las líneas discontinuas representan el rango creado a partir del vector recortado.
3.7.5 Identificación a partir de la distancia de Cooks
A partir del enfoque de regresión se puede utilizar el concepto de distancia de Cooks. Esta realiza la estimación del cambio de cada valor ajustado, con yhat sin la i-ésima observación. Por lo que, mide la influencia de cada observación. yhat(j) es el valor de la respuesta ajustada j, cuando se incluyen todas las observaciones; yhat(ji) es el valor de la observación j cuando no se incluye la observación i, P es el número de coeficientes en el modelo de regresión; por último, MSE es el error cuadrático medio del modelo con todas las observaciones.
Considere el siguiente ejemplo, donde solo se regresa la variable de interés en función de una constante (ln(x ~ 1))
, por lo que, el ajuste condicionado del modelo corresponde al promedio.
#Distancia de cooks
<- lm(x ~ 1)
mod <- cooks.distance(mod)
cooksd plot(cooksd, pch="*", cex=2)
abline(h = 4*mean(cooksd, na.rm=T), col="#008B8B")
text(x=1:length(cooksd)+1, y=cooksd,
labels=ifelse(cooksd > 4 * mean(cooksd, na.rm = TRUE),
names(cooksd),""),
col="#008B8B")
3.8 Manejo de datos outlier
3.8.1 Datos outliers univariados
En el caso univariado, cuando se tiene un conjunto de datos, se dice que un dato es un outlier, si es un punto que no esta de acuerdo con el conjunto de datos, o es un valor atípico o raro, o es una observación extrema. Datos reales que proporcionan gran información.
<-read.csv("C:/Users/Sebastian H/Documents/Trabajo Final PLE/duke-forest.csv",
CyCC.datastringsAsFactors = F)
names(CyCC.data)
[1] "address" "price" "bed" "bath" "area"
[6] "type" "year_built" "heating" "cooling" "parking"
[11] "lot" "hoa" "url"
boxplot(CyCC.data$area,
main = "Area",
boxwex = 0.5,col="#CAFF70")
3.8.1.1 Remplazar los valores outliers
<- function(x, removeNA = TRUE){
replace_outliers <- quantile(x, probs = c(0.25, 0.75), na.rm = removeNA)
qrts <- quantile(x, probs = c(.05, .95), na.rm = removeNA)
caps <- qrts[2]-qrts[1]
iqr <- 1.5 * iqr
h <qrts[1]-h] <- caps[1]
x[x>qrts[2]+h] <- caps[2]
x[x
x
}
<- replace_outliers(CyCC.data$area) capped_area
par(mfrow = c(1,2))
boxplot(CyCC.data$area, main = "Presión con outliers"
col=22)
,boxplot(capped_area, main = "Presión sin outliers",col=2)
3.8.2 Datos outliers multivariados
Según Gnanadesikan y Kettenring, los outliers multivariantes son observaciones que se consideran extrañas no por el valor que toman en una determinada variable, sino en el conjunto de aquellas.
with(cars, plot(x=speed, y=dist))
#Punto de balanceo
<- dim(cars)[1]
n <- rbind(cars, c(60, 218.3649))
mycars with(mycars, plot(x=speed, y=dist))
points(mycars[n + 1, ], pch=20, col='yellow')
<- lm(dist ~ speed, data=cars);abline(mod1) mod1
3.8.2.1 Punto de influencia
Es un punto que tiene impacto en las estimativas del modelo.
<- rbind(cars, c(25, 10))
mycars1 with(mycars1, plot(x=speed, y=dist,ylim = c(0,200),xlim = c(0,50),
points(25,10,col=2,pch=20)))
<- lm(dist ~ speed, data=mycars1);abline(mod1);abline(mod3,col=4) mod3
3.8.2.2 Eliminación de datos outliers
Para esto primero cargaremos una base de datos la cual es la siguiente:
<-read.csv("C:/Users/Sebastian H/Documents/Trabajo Final PLE/wage.csv")
dfnames(df)
[1] "X" "year" "age" "maritl" "race"
[6] "education" "region" "jobclass" "health" "health_ins"
[11] "logwage" "wage"
Realizamos un gráfico de caja de la variable age
<-boxplot(df$age, col="#2F4F4F", frame.plot=F) caja_c
Se puede ver que hay algunos outliers. Entonces si queremos conocer los outliers. sólo llamamos a los outliers con el comando $out
$out caja_c
[1] 80 80 80 80
Nos muestra cuatro outliers. Entonces un método de correción sería el de eliminar los outliers (en realidad, es el método que no debería de usarse. Es mejor considerar la discretización, que se verá posteriormente).
Entonces para eliminar los outliers usamos el operador pertenece %in%
que funciona igual que el símbolo matemático ∈ que se usa en la teoría de conjuntos.
<-df[!(df$age %in% caja_c$out),] df
Para comprobar que los outliers han sido eliminados volvamos a ver el gráfico de caja.
boxplot(df$age, col="#2F4F4F", frame.plot=F)
En efecto, los outliers han sido eliminados.
3.9 Limpieza de datos y preparación de datos
3.9.1 Limpieza de datos
La limpieza de datos es la parte dentro del proceso de la Ciencia de Datos que consume más tiempo. De acuerdo al paper de Dasu and Johnson (2003), el 80% del tiempo se consume en limpieza de datos.
¿Cómo aprender a limpiar data? Así como se aprende un nuevo lenguaje (alemán, francés, chino,etc), es necesario una cantidad importante de práctica y conocer los principios de la limpieza de datos.
3.9.1.1 Principios de Limpieza de datos
Los principios de limpieza de datos proveen un estándar para limpiar la data para no reinventar la rueda cada vez que tratamos de limpiar base de datos. La idea de la bases de datos limpias es hacer el análisis de datos más fácil, permitiendo enfocarnos en entender el problema y no la logística de la data.
Una base de datos limpia tiene las siguientes características:
Cada variable forma una columna.
Cada observación forma una fila.
Cada tipo de unidad observacional forma una tabla.
3.9.2 Paquetes para la limpieza de datos
Los paquetes mas usados para la limpieza de datos en R son los siguientes:
library(dplyr)
Warning: package 'dplyr' was built under R version 4.3.2
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
library(tidyr)
Warning: package 'tidyr' was built under R version 4.3.2
library(readxl)
Warning: package 'readxl' was built under R version 4.3.2
3.9.3 Importación de datos
Importa tus datos desde archivos o fuentes externas utilizando funciones como read.csv()
, read.table()
, read_excel()
, o paquetes específicos según el formato de tus datos.
Para esta sección se usara un archivo.csv extraído de kaggle.com el cual es “titanic_dataset”
<- read.csv("C:\\Users\\Sebastian H\\Documents\\Trabajo Final PLE\\titanic.csv") datos
3.9.4 Exploración inicial
Realiza una exploración inicial de tus datos para entender su estructura y contenido. Se utiliza funciones como head()
, summary()
, str()
, y colnames()
.
head(datos)
PassengerId Survived Pclass
1 1 0 3
2 2 1 1
3 3 1 3
4 4 1 1
5 5 0 3
6 6 0 3
Name Sex Age SibSp Parch
1 Braund, Mr. Owen Harris male 22 1 0
2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0
3 Heikkinen, Miss. Laina female 26 0 0
4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0
5 Allen, Mr. William Henry male 35 0 0
6 Moran, Mr. James male NA 0 0
Ticket Fare Cabin Embarked
1 A/5 21171 7.2500 S
2 PC 17599 71.2833 C85 C
3 STON/O2. 3101282 7.9250 S
4 113803 53.1000 C123 S
5 373450 8.0500 S
6 330877 8.4583 Q
summary(datos)
PassengerId Survived Pclass Name
Min. : 1.0 Min. :0.0000 Min. :1.000 Length:891
1st Qu.:223.5 1st Qu.:0.0000 1st Qu.:2.000 Class :character
Median :446.0 Median :0.0000 Median :3.000 Mode :character
Mean :446.0 Mean :0.3838 Mean :2.309
3rd Qu.:668.5 3rd Qu.:1.0000 3rd Qu.:3.000
Max. :891.0 Max. :1.0000 Max. :3.000
Sex Age SibSp Parch
Length:891 Min. : 0.42 Min. :0.000 Min. :0.0000
Class :character 1st Qu.:20.12 1st Qu.:0.000 1st Qu.:0.0000
Mode :character Median :28.00 Median :0.000 Median :0.0000
Mean :29.70 Mean :0.523 Mean :0.3816
3rd Qu.:38.00 3rd Qu.:1.000 3rd Qu.:0.0000
Max. :80.00 Max. :8.000 Max. :6.0000
NA's :177
Ticket Fare Cabin Embarked
Length:891 Min. : 0.00 Length:891 Length:891
Class :character 1st Qu.: 7.91 Class :character Class :character
Mode :character Median : 14.45 Mode :character Mode :character
Mean : 32.20
3rd Qu.: 31.00
Max. :512.33
str(datos)
'data.frame': 891 obs. of 12 variables:
$ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
$ Survived : int 0 1 1 1 0 0 0 0 1 1 ...
$ Pclass : int 3 1 3 1 3 3 1 3 3 2 ...
$ Name : chr "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
$ Sex : chr "male" "female" "female" "female" ...
$ Age : num 22 38 26 35 35 NA 54 2 27 14 ...
$ SibSp : int 1 1 0 1 0 0 0 3 0 1 ...
$ Parch : int 0 0 0 0 0 0 0 1 2 0 ...
$ Ticket : chr "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
$ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
$ Cabin : chr "" "C85" "" "C123" ...
$ Embarked : chr "S" "C" "S" "S" ...
colnames(datos)
[1] "PassengerId" "Survived" "Pclass" "Name" "Sex"
[6] "Age" "SibSp" "Parch" "Ticket" "Fare"
[11] "Cabin" "Embarked"
3.9.5 Agrupación y resumen
Si estás trabajando con conjuntos de datos grandes, puedes agrupar y resumir datos utilizando funciones como group_by()
y summarize()
del paquete dplyr
.
Para la agrupación y resumen se escogieron las siguientes variables las cuales son: “Ticket”, “PassengerId” y “Survived” respectivamente.
library(dplyr)
<- datos %>%
datos_resumidos group_by(Ticket) %>%
summarize(media = mean(PassengerId), total = sum(Survived))
datos_resumidos
# A tibble: 681 × 3
Ticket media total
<chr> <dbl> <int>
1 110152 508. 3
2 110413 469. 2
3 110465 294. 0
4 110564 431 1
5 110813 367 1
6 111240 171 0
7 111320 463 0
8 111361 427 2
9 111369 890 1
10 111426 605 1
# ℹ 671 more rows
3.9.6 Normalización o estandarización
En algunos casos, es útil normalizar o estandarizar variables numéricas para compararlas más fácilmente.
Para la estandarización se necesita una variable numérica y en este caso se escogió la variable “Survived” y sale lo siguiente:
$columna_estandarizada <- scale(datos$Survived)
datos
$columna_estandarizada datos
[,1]
[1,] -0.7888293
[2,] 1.2662786
[3,] 1.2662786
[4,] 1.2662786
[5,] -0.7888293
[6,] -0.7888293
[7,] -0.7888293
[8,] -0.7888293
[9,] 1.2662786
[10,] 1.2662786
[11,] 1.2662786
[12,] 1.2662786
[13,] -0.7888293
[14,] -0.7888293
[15,] -0.7888293
[16,] 1.2662786
[17,] -0.7888293
[18,] 1.2662786
[19,] -0.7888293
[20,] 1.2662786
[21,] -0.7888293
[22,] 1.2662786
[23,] 1.2662786
[24,] 1.2662786
[25,] -0.7888293
[26,] 1.2662786
[27,] -0.7888293
[28,] -0.7888293
[29,] 1.2662786
[30,] -0.7888293
[31,] -0.7888293
[32,] 1.2662786
[33,] 1.2662786
[34,] -0.7888293
[35,] -0.7888293
[36,] -0.7888293
[37,] 1.2662786
[38,] -0.7888293
[39,] -0.7888293
[40,] 1.2662786
[41,] -0.7888293
[42,] -0.7888293
[43,] -0.7888293
[44,] 1.2662786
[45,] 1.2662786
[46,] -0.7888293
[47,] -0.7888293
[48,] 1.2662786
[49,] -0.7888293
[50,] -0.7888293
[51,] -0.7888293
[52,] -0.7888293
[53,] 1.2662786
[54,] 1.2662786
[55,] -0.7888293
[56,] 1.2662786
[57,] 1.2662786
[58,] -0.7888293
[59,] 1.2662786
[60,] -0.7888293
[61,] -0.7888293
[62,] 1.2662786
[63,] -0.7888293
[64,] -0.7888293
[65,] -0.7888293
[66,] 1.2662786
[67,] 1.2662786
[68,] -0.7888293
[69,] 1.2662786
[70,] -0.7888293
[71,] -0.7888293
[72,] -0.7888293
[73,] -0.7888293
[74,] -0.7888293
[75,] 1.2662786
[76,] -0.7888293
[77,] -0.7888293
[78,] -0.7888293
[79,] 1.2662786
[80,] 1.2662786
[81,] -0.7888293
[82,] 1.2662786
[83,] 1.2662786
[84,] -0.7888293
[85,] 1.2662786
[86,] 1.2662786
[87,] -0.7888293
[88,] -0.7888293
[89,] 1.2662786
[90,] -0.7888293
[91,] -0.7888293
[92,] -0.7888293
[93,] -0.7888293
[94,] -0.7888293
[95,] -0.7888293
[96,] -0.7888293
[97,] -0.7888293
[98,] 1.2662786
[99,] 1.2662786
[100,] -0.7888293
[101,] -0.7888293
[102,] -0.7888293
[103,] -0.7888293
[104,] -0.7888293
[105,] -0.7888293
[106,] -0.7888293
[107,] 1.2662786
[108,] 1.2662786
[109,] -0.7888293
[110,] 1.2662786
[111,] -0.7888293
[112,] -0.7888293
[113,] -0.7888293
[114,] -0.7888293
[115,] -0.7888293
[116,] -0.7888293
[117,] -0.7888293
[118,] -0.7888293
[119,] -0.7888293
[120,] -0.7888293
[121,] -0.7888293
[122,] -0.7888293
[123,] -0.7888293
[124,] 1.2662786
[125,] -0.7888293
[126,] 1.2662786
[127,] -0.7888293
[128,] 1.2662786
[129,] 1.2662786
[130,] -0.7888293
[131,] -0.7888293
[132,] -0.7888293
[133,] -0.7888293
[134,] 1.2662786
[135,] -0.7888293
[136,] -0.7888293
[137,] 1.2662786
[138,] -0.7888293
[139,] -0.7888293
[140,] -0.7888293
[141,] -0.7888293
[142,] 1.2662786
[143,] 1.2662786
[144,] -0.7888293
[145,] -0.7888293
[146,] -0.7888293
[147,] 1.2662786
[148,] -0.7888293
[149,] -0.7888293
[150,] -0.7888293
[151,] -0.7888293
[152,] 1.2662786
[153,] -0.7888293
[154,] -0.7888293
[155,] -0.7888293
[156,] -0.7888293
[157,] 1.2662786
[158,] -0.7888293
[159,] -0.7888293
[160,] -0.7888293
[161,] -0.7888293
[162,] 1.2662786
[163,] -0.7888293
[164,] -0.7888293
[165,] -0.7888293
[166,] 1.2662786
[167,] 1.2662786
[168,] -0.7888293
[169,] -0.7888293
[170,] -0.7888293
[171,] -0.7888293
[172,] -0.7888293
[173,] 1.2662786
[174,] -0.7888293
[175,] -0.7888293
[176,] -0.7888293
[177,] -0.7888293
[178,] -0.7888293
[179,] -0.7888293
[180,] -0.7888293
[181,] -0.7888293
[182,] -0.7888293
[183,] -0.7888293
[184,] 1.2662786
[185,] 1.2662786
[186,] -0.7888293
[187,] 1.2662786
[188,] 1.2662786
[189,] -0.7888293
[190,] -0.7888293
[191,] 1.2662786
[192,] -0.7888293
[193,] 1.2662786
[194,] 1.2662786
[195,] 1.2662786
[196,] 1.2662786
[197,] -0.7888293
[198,] -0.7888293
[199,] 1.2662786
[200,] -0.7888293
[201,] -0.7888293
[202,] -0.7888293
[203,] -0.7888293
[204,] -0.7888293
[205,] 1.2662786
[206,] -0.7888293
[207,] -0.7888293
[208,] 1.2662786
[209,] 1.2662786
[210,] 1.2662786
[211,] -0.7888293
[212,] 1.2662786
[213,] -0.7888293
[214,] -0.7888293
[215,] -0.7888293
[216,] 1.2662786
[217,] 1.2662786
[218,] -0.7888293
[219,] 1.2662786
[220,] -0.7888293
[221,] 1.2662786
[222,] -0.7888293
[223,] -0.7888293
[224,] -0.7888293
[225,] 1.2662786
[226,] -0.7888293
[227,] 1.2662786
[228,] -0.7888293
[229,] -0.7888293
[230,] -0.7888293
[231,] 1.2662786
[232,] -0.7888293
[233,] -0.7888293
[234,] 1.2662786
[235,] -0.7888293
[236,] -0.7888293
[237,] -0.7888293
[238,] 1.2662786
[239,] -0.7888293
[240,] -0.7888293
[241,] -0.7888293
[242,] 1.2662786
[243,] -0.7888293
[244,] -0.7888293
[245,] -0.7888293
[246,] -0.7888293
[247,] -0.7888293
[248,] 1.2662786
[249,] 1.2662786
[250,] -0.7888293
[251,] -0.7888293
[252,] -0.7888293
[253,] -0.7888293
[254,] -0.7888293
[255,] -0.7888293
[256,] 1.2662786
[257,] 1.2662786
[258,] 1.2662786
[259,] 1.2662786
[260,] 1.2662786
[261,] -0.7888293
[262,] 1.2662786
[263,] -0.7888293
[264,] -0.7888293
[265,] -0.7888293
[266,] -0.7888293
[267,] -0.7888293
[268,] 1.2662786
[269,] 1.2662786
[270,] 1.2662786
[271,] -0.7888293
[272,] 1.2662786
[273,] 1.2662786
[274,] -0.7888293
[275,] 1.2662786
[276,] 1.2662786
[277,] -0.7888293
[278,] -0.7888293
[279,] -0.7888293
[280,] 1.2662786
[281,] -0.7888293
[282,] -0.7888293
[283,] -0.7888293
[284,] 1.2662786
[285,] -0.7888293
[286,] -0.7888293
[287,] 1.2662786
[288,] -0.7888293
[289,] 1.2662786
[290,] 1.2662786
[291,] 1.2662786
[292,] 1.2662786
[293,] -0.7888293
[294,] -0.7888293
[295,] -0.7888293
[296,] -0.7888293
[297,] -0.7888293
[298,] -0.7888293
[299,] 1.2662786
[300,] 1.2662786
[301,] 1.2662786
[302,] 1.2662786
[303,] -0.7888293
[304,] 1.2662786
[305,] -0.7888293
[306,] 1.2662786
[307,] 1.2662786
[308,] 1.2662786
[309,] -0.7888293
[310,] 1.2662786
[311,] 1.2662786
[312,] 1.2662786
[313,] -0.7888293
[314,] -0.7888293
[315,] -0.7888293
[316,] 1.2662786
[317,] 1.2662786
[318,] -0.7888293
[319,] 1.2662786
[320,] 1.2662786
[321,] -0.7888293
[322,] -0.7888293
[323,] 1.2662786
[324,] 1.2662786
[325,] -0.7888293
[326,] 1.2662786
[327,] -0.7888293
[328,] 1.2662786
[329,] 1.2662786
[330,] 1.2662786
[331,] 1.2662786
[332,] -0.7888293
[333,] -0.7888293
[334,] -0.7888293
[335,] 1.2662786
[336,] -0.7888293
[337,] -0.7888293
[338,] 1.2662786
[339,] 1.2662786
[340,] -0.7888293
[341,] 1.2662786
[342,] 1.2662786
[343,] -0.7888293
[344,] -0.7888293
[345,] -0.7888293
[346,] 1.2662786
[347,] 1.2662786
[348,] 1.2662786
[349,] 1.2662786
[350,] -0.7888293
[351,] -0.7888293
[352,] -0.7888293
[353,] -0.7888293
[354,] -0.7888293
[355,] -0.7888293
[356,] -0.7888293
[357,] 1.2662786
[358,] -0.7888293
[359,] 1.2662786
[360,] 1.2662786
[361,] -0.7888293
[362,] -0.7888293
[363,] -0.7888293
[364,] -0.7888293
[365,] -0.7888293
[366,] -0.7888293
[367,] 1.2662786
[368,] 1.2662786
[369,] 1.2662786
[370,] 1.2662786
[371,] 1.2662786
[372,] -0.7888293
[373,] -0.7888293
[374,] -0.7888293
[375,] -0.7888293
[376,] 1.2662786
[377,] 1.2662786
[378,] -0.7888293
[379,] -0.7888293
[380,] -0.7888293
[381,] 1.2662786
[382,] 1.2662786
[383,] -0.7888293
[384,] 1.2662786
[385,] -0.7888293
[386,] -0.7888293
[387,] -0.7888293
[388,] 1.2662786
[389,] -0.7888293
[390,] 1.2662786
[391,] 1.2662786
[392,] 1.2662786
[393,] -0.7888293
[394,] 1.2662786
[395,] 1.2662786
[396,] -0.7888293
[397,] -0.7888293
[398,] -0.7888293
[399,] -0.7888293
[400,] 1.2662786
[401,] 1.2662786
[402,] -0.7888293
[403,] -0.7888293
[404,] -0.7888293
[405,] -0.7888293
[406,] -0.7888293
[407,] -0.7888293
[408,] 1.2662786
[409,] -0.7888293
[410,] -0.7888293
[411,] -0.7888293
[412,] -0.7888293
[413,] 1.2662786
[414,] -0.7888293
[415,] 1.2662786
[416,] -0.7888293
[417,] 1.2662786
[418,] 1.2662786
[419,] -0.7888293
[420,] -0.7888293
[421,] -0.7888293
[422,] -0.7888293
[423,] -0.7888293
[424,] -0.7888293
[425,] -0.7888293
[426,] -0.7888293
[427,] 1.2662786
[428,] 1.2662786
[429,] -0.7888293
[430,] 1.2662786
[431,] 1.2662786
[432,] 1.2662786
[433,] 1.2662786
[434,] -0.7888293
[435,] -0.7888293
[436,] 1.2662786
[437,] -0.7888293
[438,] 1.2662786
[439,] -0.7888293
[440,] -0.7888293
[441,] 1.2662786
[442,] -0.7888293
[443,] -0.7888293
[444,] 1.2662786
[445,] 1.2662786
[446,] 1.2662786
[447,] 1.2662786
[448,] 1.2662786
[449,] 1.2662786
[450,] 1.2662786
[451,] -0.7888293
[452,] -0.7888293
[453,] -0.7888293
[454,] 1.2662786
[455,] -0.7888293
[456,] 1.2662786
[457,] -0.7888293
[458,] 1.2662786
[459,] 1.2662786
[460,] -0.7888293
[461,] 1.2662786
[462,] -0.7888293
[463,] -0.7888293
[464,] -0.7888293
[465,] -0.7888293
[466,] -0.7888293
[467,] -0.7888293
[468,] -0.7888293
[469,] -0.7888293
[470,] 1.2662786
[471,] -0.7888293
[472,] -0.7888293
[473,] 1.2662786
[474,] 1.2662786
[475,] -0.7888293
[476,] -0.7888293
[477,] -0.7888293
[478,] -0.7888293
[479,] -0.7888293
[480,] 1.2662786
[481,] -0.7888293
[482,] -0.7888293
[483,] -0.7888293
[484,] 1.2662786
[485,] 1.2662786
[486,] -0.7888293
[487,] 1.2662786
[488,] -0.7888293
[489,] -0.7888293
[490,] 1.2662786
[491,] -0.7888293
[492,] -0.7888293
[493,] -0.7888293
[494,] -0.7888293
[495,] -0.7888293
[496,] -0.7888293
[497,] 1.2662786
[498,] -0.7888293
[499,] -0.7888293
[500,] -0.7888293
[501,] -0.7888293
[502,] -0.7888293
[503,] -0.7888293
[504,] -0.7888293
[505,] 1.2662786
[506,] -0.7888293
[507,] 1.2662786
[508,] 1.2662786
[509,] -0.7888293
[510,] 1.2662786
[511,] 1.2662786
[512,] -0.7888293
[513,] 1.2662786
[514,] 1.2662786
[515,] -0.7888293
[516,] -0.7888293
[517,] 1.2662786
[518,] -0.7888293
[519,] 1.2662786
[520,] -0.7888293
[521,] 1.2662786
[522,] -0.7888293
[523,] -0.7888293
[524,] 1.2662786
[525,] -0.7888293
[526,] -0.7888293
[527,] 1.2662786
[528,] -0.7888293
[529,] -0.7888293
[530,] -0.7888293
[531,] 1.2662786
[532,] -0.7888293
[533,] -0.7888293
[534,] 1.2662786
[535,] -0.7888293
[536,] 1.2662786
[537,] -0.7888293
[538,] 1.2662786
[539,] -0.7888293
[540,] 1.2662786
[541,] 1.2662786
[542,] -0.7888293
[543,] -0.7888293
[544,] 1.2662786
[545,] -0.7888293
[546,] -0.7888293
[547,] 1.2662786
[548,] 1.2662786
[549,] -0.7888293
[550,] 1.2662786
[551,] 1.2662786
[552,] -0.7888293
[553,] -0.7888293
[554,] 1.2662786
[555,] 1.2662786
[556,] -0.7888293
[557,] 1.2662786
[558,] -0.7888293
[559,] 1.2662786
[560,] 1.2662786
[561,] -0.7888293
[562,] -0.7888293
[563,] -0.7888293
[564,] -0.7888293
[565,] -0.7888293
[566,] -0.7888293
[567,] -0.7888293
[568,] -0.7888293
[569,] -0.7888293
[570,] 1.2662786
[571,] 1.2662786
[572,] 1.2662786
[573,] 1.2662786
[574,] 1.2662786
[575,] -0.7888293
[576,] -0.7888293
[577,] 1.2662786
[578,] 1.2662786
[579,] -0.7888293
[580,] 1.2662786
[581,] 1.2662786
[582,] 1.2662786
[583,] -0.7888293
[584,] -0.7888293
[585,] -0.7888293
[586,] 1.2662786
[587,] -0.7888293
[588,] 1.2662786
[589,] -0.7888293
[590,] -0.7888293
[591,] -0.7888293
[592,] 1.2662786
[593,] -0.7888293
[594,] -0.7888293
[595,] -0.7888293
[596,] -0.7888293
[597,] 1.2662786
[598,] -0.7888293
[599,] -0.7888293
[600,] 1.2662786
[601,] 1.2662786
[602,] -0.7888293
[603,] -0.7888293
[604,] -0.7888293
[605,] 1.2662786
[606,] -0.7888293
[607,] -0.7888293
[608,] 1.2662786
[609,] 1.2662786
[610,] 1.2662786
[611,] -0.7888293
[612,] -0.7888293
[613,] 1.2662786
[614,] -0.7888293
[615,] -0.7888293
[616,] 1.2662786
[617,] -0.7888293
[618,] -0.7888293
[619,] 1.2662786
[620,] -0.7888293
[621,] -0.7888293
[622,] 1.2662786
[623,] 1.2662786
[624,] -0.7888293
[625,] -0.7888293
[626,] -0.7888293
[627,] -0.7888293
[628,] 1.2662786
[629,] -0.7888293
[630,] -0.7888293
[631,] 1.2662786
[632,] -0.7888293
[633,] 1.2662786
[634,] -0.7888293
[635,] -0.7888293
[636,] 1.2662786
[637,] -0.7888293
[638,] -0.7888293
[639,] -0.7888293
[640,] -0.7888293
[641,] -0.7888293
[642,] 1.2662786
[643,] -0.7888293
[644,] 1.2662786
[645,] 1.2662786
[646,] 1.2662786
[647,] -0.7888293
[648,] 1.2662786
[649,] -0.7888293
[650,] 1.2662786
[651,] -0.7888293
[652,] 1.2662786
[653,] -0.7888293
[654,] 1.2662786
[655,] -0.7888293
[656,] -0.7888293
[657,] -0.7888293
[658,] -0.7888293
[659,] -0.7888293
[660,] -0.7888293
[661,] 1.2662786
[662,] -0.7888293
[663,] -0.7888293
[664,] -0.7888293
[665,] 1.2662786
[666,] -0.7888293
[667,] -0.7888293
[668,] -0.7888293
[669,] -0.7888293
[670,] 1.2662786
[671,] 1.2662786
[672,] -0.7888293
[673,] -0.7888293
[674,] 1.2662786
[675,] -0.7888293
[676,] -0.7888293
[677,] -0.7888293
[678,] 1.2662786
[679,] -0.7888293
[680,] 1.2662786
[681,] -0.7888293
[682,] 1.2662786
[683,] -0.7888293
[684,] -0.7888293
[685,] -0.7888293
[686,] -0.7888293
[687,] -0.7888293
[688,] -0.7888293
[689,] -0.7888293
[690,] 1.2662786
[691,] 1.2662786
[692,] 1.2662786
[693,] 1.2662786
[694,] -0.7888293
[695,] -0.7888293
[696,] -0.7888293
[697,] -0.7888293
[698,] 1.2662786
[699,] -0.7888293
[700,] -0.7888293
[701,] 1.2662786
[702,] 1.2662786
[703,] -0.7888293
[704,] -0.7888293
[705,] -0.7888293
[706,] -0.7888293
[707,] 1.2662786
[708,] 1.2662786
[709,] 1.2662786
[710,] 1.2662786
[711,] 1.2662786
[712,] -0.7888293
[713,] 1.2662786
[714,] -0.7888293
[715,] -0.7888293
[716,] -0.7888293
[717,] 1.2662786
[718,] 1.2662786
[719,] -0.7888293
[720,] -0.7888293
[721,] 1.2662786
[722,] -0.7888293
[723,] -0.7888293
[724,] -0.7888293
[725,] 1.2662786
[726,] -0.7888293
[727,] 1.2662786
[728,] 1.2662786
[729,] -0.7888293
[730,] -0.7888293
[731,] 1.2662786
[732,] -0.7888293
[733,] -0.7888293
[734,] -0.7888293
[735,] -0.7888293
[736,] -0.7888293
[737,] -0.7888293
[738,] 1.2662786
[739,] -0.7888293
[740,] -0.7888293
[741,] 1.2662786
[742,] -0.7888293
[743,] 1.2662786
[744,] -0.7888293
[745,] 1.2662786
[746,] -0.7888293
[747,] -0.7888293
[748,] 1.2662786
[749,] -0.7888293
[750,] -0.7888293
[751,] 1.2662786
[752,] 1.2662786
[753,] -0.7888293
[754,] -0.7888293
[755,] 1.2662786
[756,] 1.2662786
[757,] -0.7888293
[758,] -0.7888293
[759,] -0.7888293
[760,] 1.2662786
[761,] -0.7888293
[762,] -0.7888293
[763,] 1.2662786
[764,] 1.2662786
[765,] -0.7888293
[766,] 1.2662786
[767,] -0.7888293
[768,] -0.7888293
[769,] -0.7888293
[770,] -0.7888293
[771,] -0.7888293
[772,] -0.7888293
[773,] -0.7888293
[774,] -0.7888293
[775,] 1.2662786
[776,] -0.7888293
[777,] -0.7888293
[778,] 1.2662786
[779,] -0.7888293
[780,] 1.2662786
[781,] 1.2662786
[782,] 1.2662786
[783,] -0.7888293
[784,] -0.7888293
[785,] -0.7888293
[786,] -0.7888293
[787,] 1.2662786
[788,] -0.7888293
[789,] 1.2662786
[790,] -0.7888293
[791,] -0.7888293
[792,] -0.7888293
[793,] -0.7888293
[794,] -0.7888293
[795,] -0.7888293
[796,] -0.7888293
[797,] 1.2662786
[798,] 1.2662786
[799,] -0.7888293
[800,] -0.7888293
[801,] -0.7888293
[802,] 1.2662786
[803,] 1.2662786
[804,] 1.2662786
[805,] 1.2662786
[806,] -0.7888293
[807,] -0.7888293
[808,] -0.7888293
[809,] -0.7888293
[810,] 1.2662786
[811,] -0.7888293
[812,] -0.7888293
[813,] -0.7888293
[814,] -0.7888293
[815,] -0.7888293
[816,] -0.7888293
[817,] -0.7888293
[818,] -0.7888293
[819,] -0.7888293
[820,] -0.7888293
[821,] 1.2662786
[822,] 1.2662786
[823,] -0.7888293
[824,] 1.2662786
[825,] -0.7888293
[826,] -0.7888293
[827,] -0.7888293
[828,] 1.2662786
[829,] 1.2662786
[830,] 1.2662786
[831,] 1.2662786
[832,] 1.2662786
[833,] -0.7888293
[834,] -0.7888293
[835,] -0.7888293
[836,] 1.2662786
[837,] -0.7888293
[838,] -0.7888293
[839,] 1.2662786
[840,] 1.2662786
[841,] -0.7888293
[842,] -0.7888293
[843,] 1.2662786
[844,] -0.7888293
[845,] -0.7888293
[846,] -0.7888293
[847,] -0.7888293
[848,] -0.7888293
[849,] -0.7888293
[850,] 1.2662786
[851,] -0.7888293
[852,] -0.7888293
[853,] -0.7888293
[854,] 1.2662786
[855,] -0.7888293
[856,] 1.2662786
[857,] 1.2662786
[858,] 1.2662786
[859,] 1.2662786
[860,] -0.7888293
[861,] -0.7888293
[862,] -0.7888293
[863,] 1.2662786
[864,] -0.7888293
[865,] -0.7888293
[866,] 1.2662786
[867,] 1.2662786
[868,] -0.7888293
[869,] -0.7888293
[870,] 1.2662786
[871,] -0.7888293
[872,] 1.2662786
[873,] -0.7888293
[874,] -0.7888293
[875,] 1.2662786
[876,] 1.2662786
[877,] -0.7888293
[878,] -0.7888293
[879,] -0.7888293
[880,] 1.2662786
[881,] 1.2662786
[882,] -0.7888293
[883,] -0.7888293
[884,] -0.7888293
[885,] -0.7888293
[886,] -0.7888293
[887,] -0.7888293
[888,] 1.2662786
[889,] -0.7888293
[890,] 1.2662786
[891,] -0.7888293
attr(,"scaled:center")
[1] 0.3838384
attr(,"scaled:scale")
[1] 0.4865925