Aspectos Generales de R

¿Qué es R?

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

Cuando se puede implementar

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.

Script

como generar un script

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.

Objetos

¿Qué son?

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.

Tipos de Objetos

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.

Funciones

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.

Operadores Lógicos

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:

  • devuelve TRUE si alguno de los datos es TRUE.
  • solo devuelve FALSE si ambos datos son FALSE.
  • & solo devuelve TRUE si ambos datos es TRUE.
  • & devuelve FALSE si alguno de los datos es FALSE.

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

Gráficos Básicos

Ventanas

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.

Importar archivos

CSV

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")

XLS

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")

Crear Variables

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)

Como cargar una base de 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.

Estadística Descriptiva

Medidas de tendecia central

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

Resumen

  • 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.

Gráfico de dispersión

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 de frecuencia

tabla_frecuencia <- table(b_Datos$Edad, Estatura, Peso, Nombre)

Histograma

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.

Caja de Bigotes

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.

Line plots

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.

Gráfico de pastel

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.

Grafico correlación lineal

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

Estadistica Inferencial

Base de datos

Hipotesis Nula

No fumar durante el embarazo hace que los bebes nazcan más pesados.

Hipotesis Alternativa

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.