R es un sistema para análisis estadísticos y gráficos creado por Ross Ihaka y Robert Gentleman. R tiene una naturaleza doble de programa y lenguaje de programación y es considerado como un dialecto del lenguaje S creado por los Laboratorios AT&T Bell. Puede utilizarse con Windows, pero está disponible también para otros sistemas operativos como Linux o Mac OS. R es muy utilizado por investigadores de todo el mundo debido a la fiabilidad de sus métodos de cálculo y a que se puede descargar de forma libre
Se utiliza en el análisis de datos para importar, acceder, transformar, explorar, trazar y modelar datos, y en el aprendizaje automático para hacer predicciones sobre los datos.
Podemos crear un script desde RStudio usando el menú o la combinación de teclas CTRL+Shift+N, se abre una nueva pestaña donde introducimos la secuencia de código que luego podemos ejecutar.
En R, un objeto es una estructura de datos que almacena valores y tiene un nombre asociado. Un objeto puede ser cualquier cosa que pueda ser asignada a una variable, incluyendo vectores, matrices, listas, data frames, funciones, entre otros. Los objetos en R pueden contener cualquier tipo de datos y pueden ser manipulados mediante funciones y operadores.
Los tipos de objetos en R se conocen en la comunidad como clases. Existen muchas clases de objetos, pero las clases más sencillas son 5:
- numeric: números reales o decimales.
- integer: números enteros complex: números complejos.
- character: carácteres.
- logical: resultados lógicos (TRUE o FALSE).
Los objetos pueden combinarse para crear otros nuevos. Es más, hay objetos que tienen otros objetos que los conforman y cada uno puede ser de diferente clase. Así también tendremos otras clases para objetos compuestos, por ejemplo,
- list: listas.
- matrix: matriz.
- array: colección de objetos.
- data.frame: base de datos.
function: Se puede definir una función dentro de otra función.
paste: sirve para concatenar cadenas de caracteres.
cat: facilita la impresión cuando hay muchas variables.
if: es usado cuando deseamos que una operación se ejecute únicamente cuando una condición se cumple.
else: es usado para indicarle a R qué hacer en caso de la condición de un if no se cumpla.
sqrt: calcula la raiz cuadrada.
list: permite agrupar o contener cosas como dataframes, matrices y vectores en una misma variable.
data.frame: se utiliza para guardar tablas de datos.
return: obtiene el resultado de un paso en particular en la ejecución, no necesariamente el último.
is.character: Esto es de utilidad para asegurarnos que las operaciones que deseamos realizar tendrán los datos apropiados.
Los operadores lógicos son usados para operaciones de álgebra Booleana, es decir, para describir relaciones lógicas, expresadas como TRUE o FALSE. Estos operadores lógicos siempre devuelven TRUE o FALSE.
Los operadores |(OR) y &(AND) siguen estas reglas:
Estos operadores pueden ser usados con estos con datos de tipo numérico, lógico y complejo. Al igual que con los operadores relacionales, los operadores lógicos siempre devuelven TRUE o FALSE.
Para realizar operaciones lógicas, todos los valores numéricos y complejos distintos a 0 son coercionados a TRUE, mientras que 0 siempre es coercionado a FALSE.
5 | 0
## [1] TRUE
5 & 0
## [1] FALSE
Ventana (1): es el editor de sintaxis: se trata del lugar donde editamos la sintaxis para posteriormente ejecutarla. Al escribir allí no sucederá nada, a no ser que se apriete algún botón para ejecutar los comandos o la tecla ctrl+enter.
Ventana (2): es el “entorno de trabajo” del programa: en este lugar se muestra el conjunto de datos y los “objetos” (resultados, variables, gráficos, etc.) que se almacenan al ejecutar diferentes análisis.
Ventana (3) tiene varias sub pestañas: (i) la pestaña files permite ver el historial de archivos trabajados con el programa.
(ii) la pestaña plots permite visualizar los gráficos que se generen.
(iii) la pestaña packages permite ver los paquetes descargados y guardados en el disco duro así como gestionar su instalación o actualización.
(iv) la ventana help permite acceder al CRAN - Comprehensive R Archive Network (siempre que se cuente con conexión a Internet), página oficial del software que ofrece diferentes recursos para el programa: manuales para el usuario, cursos on line, información general, descarga de paquetes, información de los paquetes instalados, etc.
(v)la ventana viewer muestra los resultados al construir reportes mediante funcionalidades tipo rmarkdown.
Un archivo .csv es muy similar a un archivo .xlsx (excel) sólo que sin el formato. Este tipo de archivos se puede generar desde la mayoría de software, tiene un uso muy frecuente ya que es el paso anterior para poder usar excel. Y principalmente porque pesa menos que un archivo .xlsx.
Para cargar estos tipos de archivos vamos a usar el comando read.csv() que tiene argumentos similares a read.table. Por tanto, se hará muy fácil su comprensión.
ejemplo:
datos <- read.csv("resuelto1.csv")
se mostrará como cargar una base de datos con extensión .xlsx o .xls (desde EXCEL). Primero recordar que el archivo .xlsx se puede convertir a .csv y asi poder ganar tiempo y tener una base de datos de menor tamaño.
library(readxl)
datos2 <- read_xls("Ejemplo.xls")
Edad <- c(15, 16, 17, 20, 22, 23, 24, 25, 21, 20)
Peso <- c(80, 57, 69, 70, 54, 68, 74, 71, 81, 79)
Estatura <- c( 1.78, 1.72, 1.73, 1.78, 1.80, 1.90, 1.67, 1.78, 1.77, 1.80)
Nombre <- c("Luisa", "David", "Sofia", "Carlos", "Felipe", "Maria", "Luis", "liz", "Fer", "Stick")
b_Datos <-data.frame(Edad, Peso, Estatura, Nombre)
View(b_Datos)
Para poder cargar una base de datos debemos tener en cuenta el formato que tiene la base de datos, incluso la podemos cargar de una página web con solamente el enlace. Cada una de las formas para cargar una base de datos contiene su propia extensión y es lo que más importa en este caso.
summary(data.frame(b_Datos))
## Edad Peso Estatura Nombre
## Min. :15.00 Min. :54.00 Min. :1.670 Length:10
## 1st Qu.:17.75 1st Qu.:68.25 1st Qu.:1.740 Class :character
## Median :20.50 Median :70.50 Median :1.780 Mode :character
## Mean :20.30 Mean :70.30 Mean :1.773
## 3rd Qu.:22.75 3rd Qu.:77.75 3rd Qu.:1.795
## Max. :25.00 Max. :81.00 Max. :1.900
Podemos darnos cuenta en el caso de la edad tanto la media como la moda están por encima del rango de los 20 años, es decir, que la mayoría tiene una edad mayor a 20 años.
En el caso del peso que está medido en kg ocurre lo mismo y vemos entonces que ambos están en un peso del rango normal de acuerdo a su estatura.
En el caso de la Estatura es donde los datos están un poco mas dispersos sin embargo no hay una diferencia grande, es decir los datos se comportan normalmente.
plot(x = Peso, y = Estatura)
Al ver este gráfico podemos darnos cuenta que el peso y la estatura no están nada relacionados, aunque normalmente nostros decimos que la estatura depende del peso, es más de allí depende el “peso ideal”, en este caso nuestros datos demuestran lo contrario.
tabla_frecuencia <- table(b_Datos$Edad, Estatura, Peso, Nombre)
hist(b_Datos$Peso, main = "Histograma", xlab = "Peso", ylab = "Estatura", col = "skyblue")
El
pico alto demuestra la diferencia entre estás dos variables, sin embargo
si nos ponemos analizar hacia los extremos este tiende a una
normalización de los datos, entonces podemos decir que en las partes
donde más se realcionan los datos son los extremos. ### Diagrama de
barras
barplot(b_Datos$Estatura, names.arg = b_Datos$Peso, main = "Diagrama de Barras", xlab = "Peso", ylab = "Estatura", col = "darkred")
La gran diferencia de los gráficos anteriores a esta es que los datos todos están en una distribución normal es decir podemos sacar muchas conclusiones de este, una de tantas es que el peso sí depende de la estatura y entre más altas las personas suelen ser más pesadas, esto no significa que vayan a ser gordos o pesen mucho, también existen los casos contrarios donde son muy altos pero pesan poco.
boxplot(b_Datos$Edad, main = "Gráfico de Bigotes", ylab = "Años")
La linea de grafica está tendiendo hacia la parte superior de la caja
esto que quiere decir, que en promedio la edad radica en un porcentaje
superior o igual a 20 años.
Un gráfico con mucha diferencia, podemos dar una conclusión de que el peso y la estatura a veces suele ser relativamente inverso o proporcional.
df <- data.frame(Edad, Peso, Estatura, Nombre)
porcentajes <- round(prop.table(table(df$Edad)) * 100, 2)
etiquetas <- paste(names(porcentajes), "\n", porcentajes, "%")
pie(porcentajes, labels = etiquetas, main = "Distribución de Edad")
Como los datos tomados tienen una gran diferencia, nuestro gráfico iba a tener esta apariencia y es muy dificil dar un analisis correcto dependendiendo de esto, sin embargo si podemos decir que casi el 70% de las personas tienen una edad igual o mayor a 20 y el resto están entre 15 a 18 años.
plot(Estatura, Peso, main = "Diagrama de Dispersión", xlab = "Peso", ylab = "Estatura")
Ocurre lo mismo que en el digrama de dispersión lineal, no hay nada de relación de los daros y es que la cantidad de personas no favorece nada a estos es por eso que se pide realizar analisis de datos con una cantidad favorable.
url <- "https://raw.githubusercontent.com/fhernanb/datos/master/babies.txt"
data_url<- read.table(url, header = TRUE, sep = "\t")
summary(data_url)
## bwt gestation parity age
## Min. : 55.0 Min. :148.0 Length:1236 Min. :15.00
## 1st Qu.:108.8 1st Qu.:272.0 Class :character 1st Qu.:23.00
## Median :120.0 Median :280.0 Mode :character Median :26.00
## Mean :119.6 Mean :279.3 Mean :27.26
## 3rd Qu.:131.0 3rd Qu.:288.0 3rd Qu.:31.00
## Max. :176.0 Max. :353.0 Max. :45.00
## NA's :13 NA's :2
## height weight smoke
## Min. :53.00 Min. : 87.0 Length:1236
## 1st Qu.:62.00 1st Qu.:114.8 Class :character
## Median :64.00 Median :125.0 Mode :character
## Mean :64.05 Mean :128.6
## 3rd Qu.:66.00 3rd Qu.:139.0
## Max. :72.00 Max. :250.0
## NA's :22 NA's :36
No fumar durante el embarazo hace que los bebes nazcan más pesados.
Fumar durante el embarazo hace que los bebes nazcan más pesados.
set.seed(123)
smoke <- rnorm(100)
qqnorm(smoke)
qqline(smoke, col=3 )
set.seed(123)
smoke <- rnorm(100)
shapiro.test(smoke)
##
## Shapiro-Wilk normality test
##
## data: smoke
## W = 0.99388, p-value = 0.9349
Según el gráfico podemos darnos cuenta que si tienen correlación las variables y la disperción es lineal es decir que aceptamos la hipotesis nula y decimos que es valida, es decir, que fumar durante el embarazo si hace que los bebes nazcan con muy poco peso.