load(url('https://bit.ly/39ewYXx'))
coches
: hoja de datos sobre una muestra de coches americanos, formada por las columnas:
efi
: eficiencia, en millas recorridas por galón de gasolina.ncil
: número de cilindros del motor.cil
: cilindrada total, en pulgadas cúbicas.pot
: potencia, en CV (caballos de vapor).peso
: peso, en miles de libras.tiempo
: tiempo, en segundos, en recorrer un cuarto de milla, desde parado.embrag
: tipo, automático o manual.marchas
: número de marchas (hacia adelante).carbur
: número de carburadores.iris
: hoja de datos con las medidas de flores y la especie:
Sepal.Length
: longitud de sépalo.Sepal.Width
: anchura de sépalo.Petal.Length
: longitud de pétalo.Petal.Width
: anchura de pétalo.Species
: especie de flor.titanic1012
: hoja de datos con datos sobre los tripulantes del malogrado Titanic:
Class
: primera, segunda o tercera clase (1st
, 2nd
, 3rd
) o bien formaban parte de la tripulación (Crew
).Sex
: si eran hombres o mujeres (Male
, Female
).Age
: franja de edad (Adult
, Child
).Survived
: si sobrevivió al accidente (Yes
, No
).matrix(data, nrow, ncol, byrow)
: define una matriz
data
: vector de entradas de la matriznrow
, ncol
: número de filas, columnasbyrow
: ¿se rellena por filas? Por defecto no (FALSE
).%*%
t()
hace la transpuesta su argumento[,]
lleva dos argumentos separados por una coma, para elegir filas y columnasm1 = matrix(data=1:6, ncol=3) # montamos matriz de 3 columnas
m1 # observa cómo se han colocado
m2 = matrix(data=1:6, ncol=3, byrow=TRUE) # lo mismo pero por filas
m2 # observa cómo se han colocado
m3 = t(m2) # matriz transpuesta
m3
m1[1,1] # elemento fila 1, col 1
m1[1,] # toda la fila 1 (se convierte en vector)
m1[,1] # toda la col 1 (se convierte en vector)
m1
m1[1:2, c(1,3)] # un bloque (sigue siendo matriz)
m1
m2
m1 + m2 # suma de matrices
m1
m2
m1 * m2 # producto entrada a entrada (NO EL HABITUAL!!!)
m1
2^m1
2^m1 < 10
m1
m1
m2
m1 %*% m2 # no se pueden multiplicar
m1 %*% m3 # sí se puede
EJERCICIO 1:
Sol.:
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 4 9 16 25 36 49 64 81 100
## [2,] 121 144 169 196 225 256 289 324 361 400
## [3,] 441 484 529 576 625 676 729 784 841 900
## [4,] 961 1024 1089 1156 1225 1296 1369 1444 1521 1600
## [5,] 1681 1764 1849 1936 2025 2116 2209 2304 2401 2500
FIN DE EJERCICIO 1
data.frame(...)
, poniendo los vectores columna como argumentos.read.table(...)
.str()
: estructura de la hoja de datos, indica cuántas observaciones en cuántas variables hay, la cabecera de cada columna, el tipo de datos que tiene y sus primeros valores.dim()
: devuelve vector de dimensiones (filas, columnas).row.names()
: devuelve vector de los nombres de las filas (si hay). Útil para identificar individuos.names()
: devuelve vector de las etiquetas de las columnas.head()
: primeras filas de la hoja de datos.tail()
: últimas filas de la hoja de datos.# Un vistazo a los datos y su naturaleza
str(coches)
# ¿Cuántos coches analizados? ¿cuántas variables?
dim(coches)
dim(coches)[1] # ¿cuántas filas? (coches)
dim(coches)[2] # ¿cuántas columnas? (variables)
length(coches) # CUIDADO!!! solo cuenta las columnas !!!
row.names(coches) # Nombres de las filas (coches)
names(coches) # Nombres de las columnas (variables)
head(coches) # visualiza primeras filas
tail(coches) # visualiza últimas filas
$
permite acceder a los datos de una columna de la hoja de datos (NombreHoja$NombreColumna
)attach
)detach
)str(coches) # cómo es la hoja de datos
head(coches) # vemos primeras filas
efi # da error pq no es una variable de R, solo "etiqueta" dentro de "coche"
coches$efi # vector con los datos de columna "efi"
attach(coches) # fijamos la hoja para poder usar nombres de columnas
efi # ya no da error
detach(coches) # retiramos la hoja
efi # vuelve a dar error
attach()
y detach()
con todas las hojas de datos para hacer la programación más cómoda y no tener problemas.$
: con la sintaxis hoja$etiqueta
, devuelve sólo el vector columna etiquetada con etiqueta
(ver ejemplos). Como es un vector, se puede indexar con el operador []
como se explica en la Practica 1.
attach()
con la hoja de datos, ya puedes usar directamente el nombre de la columna, sin usar el nombre de la hoja ni el dólar $
.# Toda la hoja de datos
coches
# fijamos para poder usar los nombres de columna
attach(coches)
# Datos de columna eficiencia (efi)
efi # es un vector
# Datos de columna embrague (embrag)
embrag # es un vector
# Datos de eficiencia para los 10 primeros coches
efi[1:10]
# Datos de eficiencia para coches de embrague automático
efi[embrag=='Autom']
# Datos de eficiencia para coches de embrague automático
# y 8 cilindros
efi[embrag=='Autom' & ncil==8]
# Nombres de los coches (filas) de transmisión automática
row.names(coches)[ embrag=='Autom' ]
# ¿Cuántos coches de embrague "manual" hay en la muestra?
length( embrag[ embrag=="Manual" ] )
# ¿Cuántos coches de embrague "manual" y de 4 cilindros hay?
length( embrag[ embrag=="Manual" & ncil==4 ] )
# Máxima "eficiencia" de TODOS los coches de la muestra
max(efi)
# Máxima "eficiencia" entre los coches "automáticos" de la muestra
max(efi[embrag=="Autom"])
# Nombre del coche de máxima eficiencia de la muestra
row.names(coches)[ efi == max(efi) ]
# Nombre del coche "automático" de máxima eficiencia de la muestra
row.names(coches)[ (efi == max(efi[embrag=="Autom"])) & embrag=="Autom" ]
[]
: con un argumento, selecciona SOLO COLUNMAS (por posición o etiqueta, o vector de posiciones o de etiquetas). Esto NO lo usaremos[,]
: con dos argumentos, selecciona FILAS Y COLUMNAS.
Hoja[ c(1:5, 7,11), ]
),Hoja[ c("Id1", "Id2", "Id5"), ]
, caso que fueran esos los nombre de algunas filas),Hoja[ , c(1,3:10) ]
),Hoja[ , c("Var3", "Var5")]
).# Visualiza la submuestra de coches automáticos (todas las variables)
coches[ embrag=='Autom', ]
# Visualiza la submuestra de las variables 'efi', 'ncil' y 'pot' (todos los coches)
coches[ ,c('efi','ncil','pot') ]
# Visualiza la submuestra de coches automáticos en las variables 'efi', 'ncil' y 'pot'
coches[ embrag=='Autom' , c('efi','ncil','pot') ]
EJERCICIO 2: Sobre los datos de los coches (hoja de datos coches
):
cil
)
FIN DE EJERCICIO 2
summary()
: aplicado a una hoja de datos, resume todas las columnas separadamente: las cualitativas por frecuencias, y las cuantitativas por estadísticos.# Resumen de todas las variables a una
summary(coches)
# Tabla de frecuencias del tipo de embrague
table(embrag)
# Potencia media de todos los coches (columna 'pot')
mean(pot)
# Potencia media de los coches automáticos
mean( pot[ embrag=='Autom' ] )
# Histograma de pesos de coches de 4 cilindros
# con 5 intervalos
hist(peso[ncil==4], breaks=1:6)
# Resumen de datos del titanic
summary(titanic1012)
# Resumen de datos de flores
summary(iris)
EJERCICIO 3: Sobre los datos de los coches (hoja de datos coches
):
tiempo
).
FIN DE EJERCICIO 3
table(...)
cut(x, breaks)
).# Tabla de frecuencias conjuntas
# del tipo de embrague y el número de marchas
table(coches[, c('embrag', 'marchas')])
table(embrag, marchas)
# Tabla de frecuencias conjuntas relativas
# del tipo de embrague y el número de marchas
table(coches[c('embrag', 'marchas')])/dim(coches)[1]
# Tabla de frecuencias conjuntas
# de la potencia y el número de marchas
# con 3 intervalos para la potencia
table(cut(pot, breaks=c(50, 150, 250, 350)), marchas)
cov(x, y)
, donde x
e y
son dos vectores numéricos.
cov(x)
, donde x
es una hoja de datos con columnas numéricas.
cor(x, y)
, donde x
e y
son dos vectores numéricos.
cor(x)
, donde x
es una hoja de datos con columnas numéricas.
# covarianza entre eficiencia y potencia
cov(efi, pot)
# matriz de varianzas-covarianzas de esas dos variables
cov(coches[ , c('efi', 'pot')])
cov(coches) # da error pq hay columnas no numéricas
# correlación entre eficiencia y potencia
cor(efi, pot)
# matriz de correlaciones de esas dos variables
cor(coches[ , c('efi', 'pot')])
# Matriz de correlaciones entre pares de variables
# para coches de 4 cilindros
cor(coches[ ncil==4, c('efi', 'cil', 'pot', 'tiempo')])
EJERCICIO 4: Para los datos de los coches (variable coche
):
peso
y efi
para todos los coches, y para los coches separados por tipo de embrague.
efi
, peso
y tiempo
.
Sol.:
## efi peso tiempo
## efi 36.324103 -5.1166847 4.5091492
## peso -5.116685 0.9573790 -0.3054816
## tiempo 4.509149 -0.3054816 3.1931661
FIN EJERCICIO 4
plot()
plot(x)
con x
hoja de datos (con las dos columnas).plot(x, y)
con x
e y
los vectores de datos emparejados.# Todos los gráficos bivariantes cruzados
plot(coches)
# Eficiencia en función del peso
plot(coches[, c('peso', 'efi')])
plot(peso, efi)
# Eficiencia en función del peso,
# solo con coches automáticos
plot(coches[embrag=='Autom', c('peso', 'efi')])
plot(peso[embrag=='Autom'], efi[embrag=='Autom'])
# Potencia en función del tipo de embrague,
plot(coches[, c('embrag', 'pot')])
plot(embrag, pot)
# Si se ponen al reves no salen las cajas !!!
plot(coches[, c('pot', 'embrag')]) # mejor NO
plot(pot, embrag) # mejor NO
Para ver la gráfica que relaciona dos variables cualitativas, hacer el siguiente ejercicio.
EJERCICIO 4: La variable titanic1012
recoge ciertos rasgos de cada pasajero del barco, así como si sobrevivió al accidente o no. Recuerda usar attach()
para usar los nombres de columnas como variables.
Visualiza las primeras filas de los datos para conocer los nombres de las columnas y de las filas (Ayuda: head()
).
Sol.:
## Class Sex Age Survived
## 1 3rd Male Adult No
## 2 3rd Male Child No
## 3 3rd Female Child Yes
## 4 2nd Female Adult Yes
## 5 Crew Male Adult No
## 6 3rd Female Adult No
Muestra un resumen de las columnas (ayuda: summary()
)
Sol.:
## Class Sex Age Survived
## 1st :325 Male :1731 Child: 109 No :1490
## 2nd :285 Female: 470 Adult:2092 Yes: 711
## 3rd :706
## Crew:885
Representa gráficamente la distribución de la supervivencia (columna Survived
) en un diagrama de sectores (ver Practica 1).
Representa gráficamente la relación entre la clase de cada pasajero (eje X) y la supervivencia al accidente (eje Y).
Representa gráficamente la relación entre la clase de cada pasajero (eje X) y la supervivencia al accidente (eje Y), pero usando SOLO los datos de los hombres.
Representa gráficamente la relación entre la clase de cada pasajero (eje X) y la supervivencia al accidente (eje Y), pero usando SOLO los datos de las mujeres.
Sol.:
FIN EJERCICIO 4
EJERCICIO 6: Analizamos los datos de las flores (variable iris
). Recuerda usar attach()
para usar los nombres de columnas como variables.
Visualiza un resumen de todas las variables.
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Escribe la matriz de varianzas y covarianzas de las columnas 1 a 3.
## Sepal.Length Sepal.Width Petal.Length
## Sepal.Length 0.6856935 -0.0424340 1.2743154
## Sepal.Width -0.0424340 0.1899794 -0.3296564
## Petal.Length 1.2743154 -0.3296564 3.1162779
Calcula el coeficiente de correlación entre la longitud y anchura de pétalos para cada especie de flores.
Representa la longitud de pétalo (eje Y) en función de la especie de la flor (eje X).
Representa la relación entre longitud (eje X) y anchura (eje Y) de pétalos para las flores es especie “setosa”.
Calcula la media y cuasidesviación típica de la longitud de sépalo para cada especie de flor.
FIN EJERCICIO 6