1 Interfaz de R

R Studio es un lenguaje de programación libre orientado a objetos, integrado con un entorno de trabajo estadístico y computacional. Esto significa que la manipulación de dichos objetos en R, sin duda, deriva naturalmente en el manejo y tratamiento de bases de datos. Además, la simplicidad de la sintaxis de comandos y sus argumentos es intuitiva y muy práctica, permitiendo concatenar variables como vectores.

Concretamente, R define los objetos según su tipo de entrada, la cual es predeterminada por defecto o no. Un ejemplo claro es la función summary(x), muy útil, ya que describe las medidas de tendencia de un dataframe, donde el argumento declarado es un objeto concatenado por vectores. Cabe resaltar que, más adelante, se especificarán las líneas de código para importar diferentes tipos de archivos en R.

# Ejemplo resumen de medidas de tendencia

Estatura<-c(1.75,1,60,1.73,1.90, 1.55,1.50) # estatura en centimetros 
Edad_curso<-c(15,17,14,19,18,20,21)   # edad en años 
print(Estatura)
## [1]  1.75  1.00 60.00  1.73  1.90  1.55  1.50
Curso<-data.frame(Estatura, Edad_curso)
print(Curso)
##   Estatura Edad_curso
## 1     1.75         15
## 2     1.00         17
## 3    60.00         14
## 4     1.73         19
## 5     1.90         18
## 6     1.55         20
## 7     1.50         21

Nótese que las variables Estatura y Edad_curso se concatenaron como vectores columna con misma dimensión.Esto se puede evidenciar con la siguente linea de codigo:

# Codigo vizualizacion de las varibles
 
#df$("x") donde "x" es la variable de estudio 

Curso$Estatura
## [1]  1.75  1.00 60.00  1.73  1.90  1.55  1.50
# visualizacion variable edad de curso
Curso$Edad_curso 
## [1] 15 17 14 19 18 20 21

1.1 Que son los objetos en R

Previamente se introdujo la noción de los objetos en R, y una manera sencilla de definirlos es mediante herramientas que cumplen la función de almacenar conjuntos de datos concatenando vectores. Para ello, se declara especificamente el nombre de la variable seguido de la sintaxis “<- c(…)”, donde el lector introduce los argumentos que considere necesarios a su vez define la dimensión del objeto(vector).

Por ejemplo: sea t la temperatura registrada de un cuerpo en movimiento en un intervalo t segundos por consecuencia se declara de la siguiente manera :“t <- c(x, …)”

# Ejemplo temperatura registrada en t segundos  
 
t<-c(28,-5,40,32,-10) #  Grados Celsius 

print(t)
## [1]  28  -5  40  32 -10

2 Variables en R

2.1 Tipos float, Int, categoricos

Por consiguiente, dichos argumentos pueden declararse como datos cuantitativos o cualitativos. Estos, a su vez, pueden ser de tipo entero (int) o flotante (float). Además, las variables categóricas de tipo texto (character) siempre deben declararse entre comillas ("..."); de lo contrario, la compilación generará un error de sintaxis.\

El software de R es muy extenso y complejo ya que existen diferentes tipos de objetos que R puede manipular; entre los más importantes se encuentran los vectores, matrices, funciones, listas y bases de datos, entre otros. De la misma manera, se estudiarán las líneas de código utilizadas para crear dichas variables, así racalcar como sus diferencias.\

# Objeto tipo float
# sea el u el vector promedio de las notas de cursos 
u<-c(3.0,2.5,4.5,2,8,1.5)
print(u)
## [1] 3.0 2.5 4.5 2.0 8.0 1.5
# Objetos tipo categoricoS
# nombres de estudiantes clase de R 
nombres<-c("Maura","camila","Joan S.","Elkin", "Alejandro","Yandry","Nicolas","Dirley","William","Daniela","steven","yuliana","karen","jose","santiago","johan","santiago","daniela")
print(nombres)
##  [1] "Maura"     "camila"    "Joan S."   "Elkin"     "Alejandro" "Yandry"   
##  [7] "Nicolas"   "Dirley"    "William"   "Daniela"   "steven"    "yuliana"  
## [13] "karen"     "jose"      "santiago"  "johan"     "santiago"  "daniela"

El software de R es muy extenso y complejo ya que existen diferentes tipos de objetos que R puede manipular; entre los más importantes se encuentran los vectores, matrices, funciones, listas y bases de datos, entre otros. De la misma manera, se estudiarán las líneas de código utilizadas para crear dichas variables, así racalcar como sus diferencias.

La línea de código para definir una matriz se crea de la siguiente forma: “nombre_objeto <- matrix(inicio:fin, nrow = n, ncol = n)”.Donde el argumento nrow inica(el numero de filas) y ncol declara (numero de columnas). Nota: Se separa con comas los argumentos)

# Linea de codigo 

#"nombre_objeto"<- matrix(inicio:fin, nrow = n, ncol = n) 

# nrow = "numero de filas"
# ncol = "numero de columnas"
# Sea A un espacio vectrial de una matriz de 5x3
A<- matrix(5:12, nrow = (4) , ncol = (4))
print(A)
##      [,1] [,2] [,3] [,4]
## [1,]    5    9    5    9
## [2,]    6   10    6   10
## [3,]    7   11    7   11
## [4,]    8   12    8   12

3 Operaciones basicas

La versatilidad de R ofrece funciones predeterminadas de optimización para procesos lógicos que usualmente son lentos. Sin embargo, resultan muy eficientes en la ejecución de comandos, ya que permiten simplificar los cálculos y facilitar su ejecución mediante potentes librerías y diversas funciones de estilización de objetos. Un claro ejemplo serian:

# Operaciones basicas 
x<-5
y<-10
#Operacion suma 
x+y
## [1] 15
# Multiplicacion 
print(x*y)
## [1] 50
# Operaciones con vectores

R<-c(1, 7, 3)
S<-c(9, 4, 5)

R+S # suma de vectores 
## [1] 10 11  8
R-S #Resta de vectores
## [1] -8  3 -2
# Operaciones con matrices 

# Nota la multiplicacion de matrices debe cumplir con la condicion

R <- matrix(1:6, nrow = 2, ncol = 3)
t <- matrix(8:13, nrow = 2, ncol = 3)


#La suma de matrices cumple 

R+S # suma de  Matrices 
##      [,1] [,2] [,3]
## [1,]   10    8    9
## [2,]    6   13   11
R-S #Resta de Matrices
##      [,1] [,2] [,3]
## [1,]   -8   -2    1
## [2,]   -2   -5    1
R*S # Multiplicacion de matrices 
##      [,1] [,2] [,3]
## [1,]    9   15   20
## [2,]    8   36   30

4 Creacion de base de datos

En esta sección se introducirá la creación de bases de datos o (dataframe) con la siguente linea de codigo.

# data_nombre<-data.frame() # argumentos o variables de la data

Se muestra una base creada a partir d elos siguentes conjuntos de datos:

nombre<-c("Maura","camila","Joan S.","Elkin", "Alejandro","Yandry","Nicolas","Dirley","William","Daniela","steven","yuliana","karen","jose","santiago","johan","santiago","daniela")
edad<-c(20,21,21,18,17,19,20,19,24,18,22,20,19,21,20,19,20,19)
promedio<-c(3.5,3.5,3.5,3.3,3.3,3.92,3.74,3.6,3.5,3.2,3.3,3.3,3.5,3.4,3.5,3.9,3.7,3.7)
semestre<-c(7,8,7,3,3,7,7,7,10,7,6,8,7,7,5,5,6,5)
nivelado<-c(1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1)
nivelado2<-c(1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1)
datos_clase<-data.frame(nombre,edad,promedio,semestre,nivelado)
print(datos_clase)
##       nombre edad promedio semestre nivelado
## 1      Maura   20     3.50        7        1
## 2     camila   21     3.50        8        0
## 3    Joan S.   21     3.50        7        0
## 4      Elkin   18     3.30        3        0
## 5  Alejandro   17     3.30        3        0
## 6     Yandry   19     3.92        7        1
## 7    Nicolas   20     3.74        7        1
## 8     Dirley   19     3.60        7        0
## 9    William   24     3.50       10        0
## 10   Daniela   18     3.20        7        0
## 11    steven   22     3.30        6        0
## 12   yuliana   20     3.30        8        0
## 13     karen   19     3.50        7        0
## 14      jose   21     3.40        7        0
## 15  santiago   20     3.50        5        0
## 16     johan   19     3.90        5        1
## 17  santiago   20     3.70        6        0
## 18   daniela   19     3.70        5        1
# Cambio de posicion del conjuntos de datos
row.names(datos_clase)[17]<-20232217483

# Codigo para filtrar datos especicificos del dataframe
#df_filtrado <- datos_clase %>% filter(promedio > 3.5)
#print(df_filtrado)
# Comando limpieza de valores perdidos
#df$Edad[is.na(df$Edad)] <- mean(df$Edad, na.rm = TRUE)   reemplazar datos perdidos

# EJEMPLO
df <- data.frame(Nombre = c("Ana", "Luis", "Carlos"), Edad = c(25, NA, 22))
df$Edad[is.na(df$Edad)] <- mean(df$Edad, na.rm = TRUE)
print(df)
##   Nombre Edad
## 1    Ana 25.0
## 2   Luis 23.5
## 3 Carlos 22.0
# imprimir Vectores aleatorios

vector_aleatorio<- runif(5, min = 0, max = 100) # crea un vector aleaorio con numeros decimales
print(vector_aleatorio)
## [1] 57.46450 24.51532 15.37112 77.67549 37.02983
vector_aleatorio2<-sample(1:100, 6, replace=TRUE) # crea un vector aleaorio con numeros enteros
print(vector_aleatorio2)
## [1] 65 21 77 61  2 47
vector_aleatorio3<-sample(1:100,size = 6) # otra forma
vector_aleatorio4<-sample.int(18,45,size=5)   # crea solo valores enteros

generos<-sample(c("M","F","O"),10,replace = TRUE) #crea un vector con elementos aleatorios definidos
 
# Funcion para prederterminar los datos aleatorios 
set.seed(123) # Note: se escribe antes de crear daos aleatorios para fijarlos
edad<-round(runif(6, min=18, max=65)) # Note: crea un vector aleatorio de numeros decimales los cuales se redondean con round

##"replace = TRUE": indica si el vector puede tener elementos repetidos
##sample: se le puede pedir cualquier tipo de datos .
##sample.int: solo se le pueden pedir vectores con valores enteros. 

5 Estadística inferencial

La estadistica inferencial es una rama de la estadistica, en la cual se sacan conclusiones o predicciones a partir de muestras de una poblacion, basandose en pruebas estadisticas, pruebas parametricas, pruebas no parametricas, etc..

La estadística inferencial es una rama de la estadística que permite obtener conclusiones o realizar predicciones sobre una población,basandose en pruebas estadisticas. Para ello, se utilizan diversas herramientas como pruebas estadísticas, pruebas paramétricas y no paramétricas, entre otras

5.1 Hipotesis nula y alterna

Cuando queremos sacar conclusiones sobre una población a partir de una muestra, utilizamos las *pruebas de hipótesis**. Este procedimiento estadístico nos permite evaluar afirmaciones o refutarlas acerca de un parámetro poblacional, como la media, mediana, la proporción o la varianza, entre otros. Estas pruebas de hipotesis siempre consideran dos alternativas:

Hipotesis nula (\(H_0\)): esta es la afirmacion que se considera verdadera y se rechaza en caso de encontrar evidencia suficiente. Representa el estado actual de la afirmacion, la no accion, el no efectoo una situación de equilibrio.

Hipotesis alterna (\(H_a\)): esta es la afirmacion que se desea probar, es la negacioon de la hipotesis nula Representa una diferencia, un efecto o un cambio respecto a lo planteado en la hipótesis nula. Es la afirmacion que se acepta en caso de que se rechaze la hipotesis nula.

5.2 P-value

El p-value es un valor obtenido a partir de las pruebas de hipótesis. Está relacionado directamente con la hipótesis nula y la hipótesis alterna, y representa el porcentaje o la probabilidad de obtener un resultado basado en la supocision de que la hipotesis nula es verdadera. Es decir, cuanto menor sea el valor p, menor será la probabilidad de que la hipótesis nula sea cierta. .

Para decidir si se rechaza o no la hipótesis nula, se utiliza un valor de referencia llamado nivel de significancia (\(\alpha\)), que por lo general es 0.05 o, en porcentaje, 5 %. Esto significa que si la probabilidad de obtener los resultados observados (asumiendo que la hipótesis nula es verdadera) es menor al 5 %, esto quiere decir que si la probabilidad de obtener resultados dando por verdadera la hipotesis nula es menor del \(5\%\) la damos por falsa y por ende aceptamos la hipotesis alterna.

p-value < 0.05: Existe evidencia suficiente para rechazar la hipotesis nula, por tanto se acepta la alterna. p-value > 0.05: no existe evidencia suficiente para rechazar la hipotesis nula

5.2.1 Ejemplo

Vamos a utilizar la base de datos mtcars y aplicaremos una prueba estadística de correlación entre las variables mpg (consumo de combustible) y drat (relación con el eje trasero). Para ello, utilizaremos la función cor.test, la cual evalúa si existe una correlación significativa entre ambas variables.

En este contexto, se formulan las siguientes hipótesis estadísticas:

\(H_0\): No existe correlación entre las variables.

\(H_a\): Existe correlación entre las variables

cor.test(mtcars$mpg,mtcars$drat)
## 
##  Pearson's product-moment correlation
## 
## data:  mtcars$mpg and mtcars$drat
## t = 5.096, df = 30, p-value = 1.776e-05
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.4360484 0.8322010
## sample estimates:
##       cor 
## 0.6811719

En este caso el p-value es < 0.05, por tanto existe evidencia suficiente para rechazar la hipoteris nula y se acepta la alterna que en este caso es que las variables si poseen correlacion.

Otra forma de comprobar la coorelacion de las variables es mediante un grafico de dispersion, aunque en este caso las variables en el grafico no parecen tener un patron claro.

plot(mtcars$drat, mtcars$mpg)

5.3 Pruebas de normalidad

Las pruebas de normalidad se utilizan para verificar si una variable se distribulle normalmente, esto debido a que algunas pruebas de hipotesis exigen que las variables se distribullan de forma normal.

Existen principalmente dos pruebas comunes:

La prueba de Shapiro-Wilk, que se recomienda para muestras pequeñas, menores de 50 elementos, aunque funciona bien hasta con aproximadamente 5000 datos.

La prueba de Kolmogorov-Smirnov, que es más adecuada cuando la muestra tiene más de 100 elementos, especialmente si se conocen los parámetros de la distribución teórica.

Estas pruebas dan por hecho que los datos provienen de una distribucion normal es por ello que \(H_0\) que representa la no accion seria que los datos son normales.

\(H_0\): los datos se distribullen normalmente

\(H_a\): los datos no se distribullen de forma normal

5.3.1 Ejemplo

Anteriormente aplicamos la prueba de correlacion a las variables mpg y drat, pero para aplicar esa prueba primero se debio verificar si las variables poseen o no distribucion normal.

shapiro.test(mtcars$mpg)
## 
##  Shapiro-Wilk normality test
## 
## data:  mtcars$mpg
## W = 0.94756, p-value = 0.1229
shapiro.test(mtcars$drat)
## 
##  Shapiro-Wilk normality test
## 
## data:  mtcars$drat
## W = 0.94588, p-value = 0.1101

En este caso en ambas variables obtuvimos valores mayores a 0.05, por lo que ambas variables se distribullen de forma normal.

Si intentamos aplicar la prueba de holmogorov obtenemos un error debido a que la base de datos tiene unicamente 32 observaciones.

5.4 Ejemplo aplicado

Anteriormente verificamos que las variables mpg y drat, se distribullen de forma normal y poseen correlacion, basado en esto podemos plantear nuestras hipotesis para comprobar o refutar que poseer una mayor relacion con el eje trasero influye en el consumo de combustible.

\(H_0\):la relacion con el eje trasero no afecta el consumo de gasolina

\(H_a\):la relacion con el eje trasero afecta el consumo de gasolina

para esto utilizaremos un modelo de regresion lineal

modelo <- lm(mpg ~ drat, data = mtcars)
summary(modelo)
## 
## Call:
## lm(formula = mpg ~ drat, data = mtcars)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9.0775 -2.6803 -0.2095  2.2976  9.0225 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -7.525      5.477  -1.374     0.18    
## drat           7.678      1.507   5.096 1.78e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.485 on 30 degrees of freedom
## Multiple R-squared:  0.464,  Adjusted R-squared:  0.4461 
## F-statistic: 25.97 on 1 and 30 DF,  p-value: 1.776e-05

Obtuvimos un modelo aproximado de la forma \(mpg = -7.525+7.678drat\), con un p-valor de 0.00001, lo que significa que rechazamos nuestra hipotesis nula y aceptamos la alterna que en este caso es que la relacion con el eje trasero si afecta al consumo de combustible