1 QUE ES R

Software de uso libre para la creacion de documentos organizados de trabajo para la investigacion de la ciencia de datos, lo podemos ver como una especie de excel un poco mas simplificado y atendido a las preferencias de los usuarios que les gusta el uso de codigo de programacion.

Visualización de datos en R Fuente: [SEO Soporte(2018)/https://www.maximaformacion.es/blog-dat/que-es-r-software/]

2 Formas de escritura de codigos en R

Escritura de de los codigos en el software de R,tomando en cuenta los distintos tipos de escritura que este tiene y ademas el funcionamiento de estos en el mismo.

Ejemplo:

edad<-c(20,25,30:22,20,32:28,25,24)
edad1=c(20,25,30,22,20,32,28,25,24)

estatura<-c(1.70,1.50,1.65)

cualidad<-c("alto","bajo","mediano")
cualidad1<-c('alto','bajo','mediano')
print(edad)
##  [1] 20 25 30 29 28 27 26 25 24 23 22 20 32 31 30 29 28 25 24
print(estatura)
## [1] 1.70 1.50 1.65
print(cualidad)
## [1] "alto"    "bajo"    "mediano"

2.1 Tomando en cuenta que el uso de “=”,“<-”

a<-3
a1=3
print(a)
## [1] 3
print(a1)
## [1] 3
#son del mismo uso no se diferencian sirven igual 

2.2 Forma de escritura de numeros negativos

A. con el uso de “<-”

b<--9
b1<-(-9)
# el uso de los dos negativos no afecta el resutado final 
b+b1
## [1] -18

B. con el uso de “=”

b=-9
b1=(-9)
b+b1
## [1] -18

2.3 Escritura de numeros decimales

a3<-8.5
b2<-8.5
a3+b2
## [1] 17
a4=8.9
b5=8.2
a4+b5
## [1] 17.1

El uso de el “.” es para determinar si es decimal y el uso de la “,” es para diferenciar los numeros los unos de otros

2.4 round usada para redondear decimales

a3<-8.5
b2<-8.5
round(a3+b2)
## [1] 17
a4=8.9
b5=8.2
round(a4+b5)
## [1] 17

3 Cualidades del uso de concatenar

El uso de concatenar se usa para mantener a los datos en una lista ordenada y segura para trabajar los datos con distintas cualidades para la investigacion que se este realizando.

cualidad<-c("alto","bajo","mediano")
cualidad1<-c('alto','bajo','mediano')
print(cualidad1)
## [1] "alto"    "bajo"    "mediano"

4 Trabajo basico en R

4.1 Las operaciones basicas

A. SUMA

x=2
y=3
t=x+y
print(t)
## [1] 5

B. RESTA

x=10
y=8
t=x-y
print(t)
## [1] 2

C. MULTIPLICACION

x=50
y=20
t=x*y
print(t)
## [1] 1000

D. DIVISION

x=200
y=30
t=x/y
print(t)
## [1] 6.666667

4.2 Realizacion De texto en variables

A. Con el uso de la funcion paste

La funcion paste sirve para poder escribir codigo de tipo escritura sin error

x_1="johan"
y_1="tiene 20 años"
print(paste(x_1,y_1))
## [1] "johan tiene 20 años"

Este tipo de codificacion nos beneficia en gran manera para romper el esquema de escritura en R para no solo tener variables de tipo numerico.

x3="Programa"
z3="de"
y3="matematica aplicada"
print(paste(x3,z3,y3))
## [1] "Programa de matematica aplicada"

Otro tipo de verlo es en separacion de palabras con cada espacio entre ellas haciendo uso de la funcion concatenar

x3="Programa"
z3="de"
y3="matematica aplicada"
print(c(x3,z3,y3))
## [1] "Programa"            "de"                  "matematica aplicada"

B. Con el uso del sprintf

Se utiliza para dar un orden de escritura para lo que se este realizando durante el trabajo y no verse en la necesidad de hacer todo paso a paso con la funcion paste

n="Johan"
edad=20
sprintf("%s tiene %s años ",n,edad)
## [1] "Johan tiene 20 años "

Realizando cambios en el uso de la funcion %s se pueden cambiar los datos numericos segun como necesite el usuario

Ejemplo:

b.1 El uso de codigo %o aumenta en 4 el numero original

n="Johan"
edad=20
sprintf("%s tiene %o años ",n,edad)
## [1] "Johan tiene 24 años "

b.2 Uso de codigo %f muestra digitos despues de la coma

n="Johan"
edad=20
sprintf("%s tiene %f años ",n,edad)
## [1] "Johan tiene 20.000000 años "

b.3 Uso de codigo %x resta en 6 el numero original

n="Johan"
edad=20
sprintf("%s tiene %x años ",n,edad)
## [1] "Johan tiene 14 años "

C. Otras formas de escritura

x2 <- "Hola"
y2 <- "Mundo"

print(paste0(x2, y2))  # "HolaMundo"
## [1] "HolaMundo"
print(paste(x2, y2))   # "Hola Mundo"
## [1] "Hola Mundo"
cat(x2, y2, "\n")      # "Hola Mundo" con salto de línea
## Hola Mundo

Aqui vemos los usos del paste en especifico y como este se ve reflejado en su uso cotidiano y como una pequeña diferencia es capaz de dar un salto de linea y con el uso de codificacion nueva se ven detalles unicos de codigo.

4.3 Pruebas de verdad o valor

Estas son muy utilizadas en pruebas de logica matematica o informatica y se utilizan para verificar la veracidad de las pruebas que se estan realizando

Ejemplos:

5==0
## [1] FALSE
4==4
## [1] TRUE
20==5*4
## [1] TRUE
5!=5
## [1] FALSE

Determina si el valor es igual o no, se diferencia de la funcion “=” que se usa para dar valor a distintas variables

5 Organizacion y Caracterizacion de datos

5.1 organizar datos

A. Organizar datos

temperatura<-c("frio","Caliente","Tibio")

list(temperatura)
## [[1]]
## [1] "frio"     "Caliente" "Tibio"

Utilizamos la funcion “list” para organizar nuestros datos de manera adecuada y ordenada segun lo requiera la investigacion a realizar

B. Para enlistar con un orden numerico los datos

temperatura<-c("frio","Caliente","Tibio")
data.frame(temperatura)
##   temperatura
## 1        frio
## 2    Caliente
## 3       Tibio

Utilizamos la funcion “data.frame” para organizar los datos de manera ordenada y adecuada con la diferencia de “list” por que este es capaz de tener tablas de datos mas complejos para contener a estos.

Ejemplo

La forma explicada en el ejemplo es la manera de crear la base datos que solicite el usuario crear se debe tener en cuenta que al momento de crearlo los datos en cada vector deben tener la misma cantidad de informacion para ser creada la tabla de lo contrario el sistema le creara un error.

library(DT)
materia<-c("algebra","fundamentos","R","algebra","fundamentos","R","fundamentos")
edad<-c(20,25,26,28,27,26,20)
nota<-c(3.5,2.5,5.0,2.8,3.5,3.6,2.9)
datos<-data.frame(edad,materia,nota)
datatable(datos, options = list(pageLength = 10))

5.2 Caracterizar datos

Utilizamos distintas funciones para caracterizar lo que contienen la funciones como por ejemplo la funcion “nrow” esta nos dira cuantos datos contiene nuestras tablas creadas en caso de necesitar esto sin ver la tabla

materia<-c("algebra","fundamentos","R","algebra","fundamentos","R","fundamentos")
edad<-c(20,25,26,28,27,26,20)
nota<-c(3.5,2.5,5.0,2.8,3.5,3.6,2.9)
library(DT)
datos<-data.frame(edad,nota)
nrow(datos)
## [1] 7
datatable(datos)

6 Trabajar con las tablas de datos

Trabajemos con la siguiente base de datos para explicar algunos comandos basicos para su manejo

library(DT)
nombre<-c("Muara","camila","johan 1","elkin","alejandro","yandri","nicolas","dirley","william","daniela","steven","yuliana","karen","jose","santiago 1","johan 2","santiago 2","daniel")
edad1<-c(20,21,21,18,17,19,20,19,24,18,22,20,19,21,20,19,20,19)
promedio_de_nota<-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("si","no","no","no","no","si","si","no","no","no","no","no","no","no","no","si","no","si")
datos1<-data.frame(nombre,edad1,promedio_de_nota,semestre,nivelado)
datatable(datos1, options = list(pageLength = 10))

6.1 Eliminar datos de la tabla

Para esto utilizamos la funcion “NULL” si deseamos eliminar por completo un dato que ya no es necesario en la investigacion

library(DT)
nombre<-c("Muara","camila","johan 1","elkin","alejandro","yandri","nicolas","dirley","william","daniela","steven","yuliana","karen","jose","santiago 1","johan 2","santiago 2","daniel")
edad1<-c(20,21,21,18,17,19,20,19,24,18,22,20,19,21,20,19,20,19)
promedio_de_nota<-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("si","no","no","no","no","si","si","no","no","no","no","no","no","no","no","si","no","si")
datos1<-data.frame(nombre,edad1,promedio_de_nota,semestre,nivelado)
datos1$edad1<-NULL
datatable(datos1, options = list(pageLength = 10))

6.2 Agregar nuevos datos a la tabla

Con la funcion “rbind” se puede agregar la cantidad de datos nuevos que el usuario necesite ingresar, se debe tener en cuenta el orden en que se realizo la tabla y colocar los datos en ese orden de lo contario los datos puesto seran ditintos en las columnas a usar.

library(DT)
nombre<-c("Muara","camila","johan 1","elkin","alejandro","yandri","nicolas","dirley","william","daniela","steven","yuliana","karen","jose","santiago 1","johan 2","santiago 2","daniel")
edad1<-c(20,21,21,18,17,19,20,19,24,18,22,20,19,21,20,19,20,19)
promedio_de_nota<-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("si","no","no","no","no","si","si","no","no","no","no","no","no","no","no","si","no","si")
datos1<-data.frame(nombre,edad1,promedio_de_nota,semestre,nivelado)
NP<-c("sarai",21,3.8,9,"si")
datos1<-rbind(datos1,NP)
datatable(datos1, options = list(pageLength = 10))

6.3 Renombrar objetos de la tabla

A. Se utiliza para dar un orden mas estetico a la tabla realizada ya que en ves de tener los datos en orden 1,2,3,etc. Los datos estaran con una entrada mas personalizada con un numero de identificacion o serie de codigo segun dependa los gustos del usuario esto se realiza con el uso de la funcion “rownames”

library(DT)
nombre<-c("Muara","camila","johan 1","elkin","alejandro","yandri","nicolas","dirley","william","daniela","steven","yuliana","karen","jose","santiago 1","johan 2","santiago 2","daniel")
edad1<-c(20,21,21,18,17,19,20,19,24,18,22,20,19,21,20,19,20,19)
promedio_de_nota<-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("si","no","no","no","no","si","si","no","no","no","no","no","no","no","no","si","no","si")
datos1<-data.frame(nombre,edad1,promedio_de_nota,semestre,nivelado)
rownames(datos1)[16]<-20231212024
datatable(datos1, options = list(pageLength = 10))

B. Renombrar en especifico a un dato, deseamos cambiar el nombre de un dato ya existente por otro para esto hacemos uso de conocimientos basicos sobre matrices dando la ubicacion exacta de donde queremos dar el cambio en nuesta tabla de datos se ilustrara mejor en el siguente ejemplo

library(DT)
nombre<-c("Muara","camila","johan 1","elkin","alejandro","yandri","nicolas","dirley","william","daniela","steven","yuliana","karen","jose","santiago 1","johan 2","santiago 2","daniel")
edad1<-c(20,21,21,18,17,19,20,19,24,18,22,20,19,21,20,19,20,19)
promedio_de_nota<-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("si","no","no","no","no","si","si","no","no","no","no","no","no","no","no","si","no","si")
datos1<-data.frame(nombre,edad1,promedio_de_nota,semestre,nivelado)
datos1[16,1]<-"JOHAN 2" # SE INDICA PRIMERO LA FILA DESPUES LA COLUMNA.
datatable(datos1, options = list(pageLength = 10))

6.4 Agregar nueva informacion a nuestra tabla

Se desea ingresar nueva informacion necesria para la investigacion realizada por tanto usaremos la funcion “$” que servira de martir para crear el codigo para crear nuestra nueva variable en la tabla

library(DT)
nombre<-c("Muara","camila","johan 1","elkin","alejandro","yandri","nicolas","dirley","william","daniela","steven","yuliana","karen","jose","santiago 1","johan 2","santiago 2","daniel")
edad1<-c(20,21,21,18,17,19,20,19,24,18,22,20,19,21,20,19,20,19)
promedio_de_nota<-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("si","no","no","no","no","si","si","no","no","no","no","no","no","no","no","si","no","si")
datos1<-data.frame(nombre,edad1,promedio_de_nota,semestre,nivelado)
datos1$Numero_hijos<-c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17) #CON ESTE CODIGO SE AGREGA UNA NUEVA COLUMNA DE INFORMACION
datatable(datos1, options = list(pageLength = 10))

6.5 Importar datos de excel a R

Para esto tenemos dos metodos el primero es importar directamente del programa y el otro es mediante el uso de la funcion readxl como veremos a continuacion

library(DT)
library(readxl) # EL ERROR QUE APARECE SE DEBE A QUE EL SISTEMA NO ESTA ACTUALIZADO 
## Warning: package 'readxl' was built under R version 4.4.3
datos_trabajo <- read_excel("datos_trabajo.xlsx")
datatable(datos_trabajo)

7 Apliaciones a la estadistica de datos

7.1 Creacion de datos aleatorios

Para este objetivo tendremos el uso de dos codigos principales para realizar la creacion de los datos aleatorios.

A. Uso de la funcion runif(), esta tiene la capacidad de crear datos al azar mientras estos esten en un rango determinado por el usuario se debe de tener en cuenta que los datos creados pueden contener decimales.

V<-runif(5,min=0,max=100)
V
## [1] 19.03368 15.71429 89.13611 61.89295 36.60912

a.1 Aqui veremos como usar la funcion runif() para que solamente tener datos enteros,si estos son necesitados, para este objetivo haremos uso de la funcion round que su funcion es redondear al numero mas cercano que se encuentre el decimal

V<-round(runif(5,min=0,max=100))
V
## [1] 51 24 55 37 58

a.2 Como comentabamos en el inicio del punto a) veremos la solucion para fijar los datos que creamos al azar, con uso de otra funcion denominada set.seed(123) en el incio de nuestro codigo para que los datos elegidos se mantengan en un vector al azar unico que usaremos en nuestra investigacion.

set.seed(123)
V<-round(runif(5,min=0,max=100))
V
## [1] 29 79 41 88 94
set.seed(123)
v1<-runif(5,min=0,max=100)
v1
## [1] 28.75775 78.83051 40.89769 88.30174 94.04673

B. Ahora veremos el uso de la funcion sample() su funcion es casi igual a la de runif con la diferencia de que esta te da datos al azar de numeros solamente enteros.

V<-sample(0:100,5)
V
## [1] 41 49 42 13 24

En esta el modo de escritura cambia un poco ya que ahora debemos de escribir primero el rango en donde queremos nuestros datos y despues la cantidad de datos solicitados.

b.1 sample() tambien funciona para crear datos al azar de tipo caracter dandole unos datoS iniciales y luego indicandole al programa si deseamos que los datos que crearan al azar los puede repetir o no mediante la funcion replace=TRUE, como veremos en el siguiente ejemplo

comidas<-sample(c("C","T","J"),10,replace=TRUE)
#C=China, J=Japonesa, T=Tailandesa
comidas 
##  [1] "T" "J" "C" "J" "J" "C" "C" "C" "C" "J"

Cabe aclarar que el uso de replace=TRUE, se puede usar en todos los usos de sample ya que este indica si se pueden repetir datos o no.

b.2 Un nuevo uso del sample seria el sample.int() que solamente sirve para datos enteros y numericos, de manera un poco mas precisa y sin tanto problema ademas que esta seria la diferencia fundamental con su hermana la funcion sample

sample.int(18,45,size=50)
##  [1]  8  7 10  9  4 14 17 11  7 12 15 10 13  7  9  9 10  7  6  2  5  8 12 13 18
## [26]  1  6 15  9 15 16  6 11  8  7 16 17 18 17  2  4 13  5 14  3  8 16 12 14  3

Aqui indicamos el rango de numeros de donde vamos a necesitar los datos al azar y con size=50 nos referimos a la cantidad de datos que se necesitan
Pero en el uso de sample() tambien ocurre el problema que con runif() los datos al azar siempre van a cambiar de manera indefinida pero tambien se puede resolver con el uso de la funcion set.seed(123)

set.seed(123)
vector<-sample.int(18,45,size=50)
vector
##  [1] 15 14  3 10 18 11  5 14  5  9  3  8  7 10  9  4 14 17 11  7 12 15 10 13  7
## [26]  9  9 10  7  6  2  5  8 12 13 18  1  6 15  9 15 16  6 11  8  7 16 17 18 17
set.seed(123)
vector1<-sample(0:100,5)
vector1
## [1] 30 78 50 13 66

C. Creacion de bases de datos con datos aleatorios utilizando las funcion sample.

library(DT)
df<-data.frame(id=sample(1:100,10),
               edad= sample(18:65,10,replace = TRUE),
               ciudad=sample(c("Bogota", "Medellin", "Cali", "Barranquilla"),10,replace=TRUE))
datatable(df)

Lo que se hizo fue primero crear un data.frame que contuviera los siguientes datos, primero un id, utilizamos la funcion sample para que los genere de un rango de uno a cien, segundo edad usando nuevamenta la funcion sample con un rango de edades de 18 años a 65 años y finalmente de que ciudad provienen usando la funcion sample concatenamos las primeras ciudades mas conocidas y le pedimos al programa que le de a cada individuo una ciudad y que este puede repetir las ciudades sin problema alguno

7.2 Estadistica Descriptiva

A. Creacion de matrices de datos

Veremos la creacion de matrices para el estudio de datos de manera ordenada y precisa

matrix <- matrix(1:25, nrow = 5, ncol = 5)
matrix
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    6   11   16   21
## [2,]    2    7   12   17   22
## [3,]    3    8   13   18   23
## [4,]    4    9   14   19   24
## [5,]    5   10   15   20   25

Primero indicamos la cantidad de datos que contendra y despues cuantas filas y columnas tendra nuestra matriz en este caso tenemos una matriz de 5X5.

B. Uso de funciones para realizar el trabajo estadistico

b.1 Medidas de tendencia central de los datos de una investigacion mediante la funcion summary()

library(DT)
library(knitr)
df<-data.frame(id=sample(1:100,10),
               edad= sample(18:65,10,replace = TRUE),
               ciudad=sample(c("Bogota", "Medellin", "Cali", "Barranquilla"),10,replace=TRUE))
datatable(df)
kable(summary(df), caption = "Resumen Estadístico de Datos1")
Resumen Estadístico de Datos1
id edad ciudad
Min. : 7.0 Min. :22.00 Length:10
1st Qu.: 24.0 1st Qu.:29.25 Class :character
Median : 47.0 Median :43.00 Mode :character
Mean : 48.7 Mean :39.30 NA
3rd Qu.: 70.5 3rd Qu.:48.25 NA
Max. :100.0 Max. :55.00 NA

Esta indicara todos los datos en cada columna y nos dara el resultado estadistico de lo que ocurre en cada una

b.2 Uso de la funcion median() esta te dara la mediana de una serie de datos sellecionada por el usario

set.seed(123)
datos<-sample.int(16,45,size=100)
datos
##   [1] 15 15  3 14  3 10  2  6 11  5  4 14  6  9 10 11 16  5  3 11  9 12  9  9 13
##  [26]  3  8 10  7 10  9 14  3  4 14  1 11  7  5 12 15 16 10 13  7  9  9 10  7 11
##  [51] 12  5  7  5 11 16  6  9  2 13  5  8 12 15 13  2  1  9 11  9  6  5 15  9 15
##  [76] 10 12 15 16  4 14  6 11  8  6  6  7 15 16  1  6  2  1  2  4 13  5  6 15  3
median(datos)
## [1] 9

b.3 Uso de la funcion mean() traducida al español la media osea la suma de todos los datos divida por el total o tambien conocida como el promedio

set.seed(123)
datos<-sample.int(14,65,size=100)
datos
##   [1]  3 14  3 10  2  6 11  5  4 14  6  9 10 11  5  3 11  9 12  9  9 13  3  8 10
##  [26]  7 10  9 14  3  4 14  1 11  7  5 12 10 13  7  9  9 10  7 11 12  5  7  5 11
##  [51]  6  9  2 13  5  8 12 13  2  1  9 11  9  6  5  9 10 12  4 14  6 11  8  6  6
##  [76]  7  1  6  2  1  2  4 13  5  6  3  9  4  6  9 14  9  7  3  8 14 12  9 14 14
mean(datos)
## [1] 7.92

b.4 Uso de la funcion sum() que no necesita mucha explicacion es solo la suma de todos los elementos

set.seed(123)
datos<-sample.int(14,65,size=100)
datos
##   [1]  3 14  3 10  2  6 11  5  4 14  6  9 10 11  5  3 11  9 12  9  9 13  3  8 10
##  [26]  7 10  9 14  3  4 14  1 11  7  5 12 10 13  7  9  9 10  7 11 12  5  7  5 11
##  [51]  6  9  2 13  5  8 12 13  2  1  9 11  9  6  5  9 10 12  4 14  6 11  8  6  6
##  [76]  7  1  6  2  1  2  4 13  5  6  3  9  4  6  9 14  9  7  3  8 14 12  9 14 14
sum(datos)
## [1] 792

7.3 Graficos para la Estadistica Descriptiva

La creacion de graficos funciona para interpretar datos de manera mas visual y mas ordenanda para aquella personas que no logran ver esto en caso de solo tener numeracion.

A. Histograma

set.seed(123)
edad1<-sample(12:20,20,replace=TRUE)
hist(edad1,col="yellow",xlab="edad",ylab="frecuencia",main="histograma de edad")

en este caso denominamos primero los datos que queremos estudiar y los almacenamos en la funcion hist() para que aparezca el grafico de tipo histograma

B. Diagrama de barras

set.seed(123)
edad1<-sample(12:20,20,replace=TRUE)
edad1_freq<-table(edad1)
barplot(edad1_freq,xlab="Frecuencia de edades",ylab="edades",main="grafico de barras edades",col="yellow")

utilizamos la funcion barplot() para traer un digrama de barras para comprobar el comportamiento de los datos mediante barras.

C. Cajas y Bigotes

set.seed(123)
edad1<-sample(12:20,20,replace=TRUE)
boxplot(edad1,col = "yellow",         
        main = "Distribución de Edades",
        ylab = "Edad")  

este tipo de graficos es mas conveniente cuando se necesita analizar mas concretamente el comportamiento de los datos

D. Diagrama de pastel

set.seed(123)
edad1<-sample(12:20,20,replace=TRUE)
edad_freq<-table(edad1)
pie(edad_freq, main = "Grafico de pastel de las Edades",col=rainbow(length(edad_freq)))

Debemos de tener encuenta el uso de la funcion pie() en nuestro codigo, si lo usamos solamente sin tomar en cuenta los datos de de frecuencia osea la cantidad de veces que se repiten los datos, el grafico se vera de manera desorganizada y sin sentido pues R entenderea que todos los datos deben de ir en ese mismo grafico

E. Grafico de dispersion

plot(mtcars$hp, mtcars$mpg, main="MPG vs HP",
     xlab="Caballos de fuerza (HP)",
     ylab="Millas por galón (MPG)", col="yellow", pch=16)

F Uso de la funcion mas poderosa para graficar “GGPLOTS”

es un muy poderoso paquete de visualización de datos en R que permite crear gráficos de manera compleja a partir de datos estructurados en data frame. Forma parte del entorno tidyverse y se basa en la Gramática de los gráficos (Grammar of Graphics) de Leland Wilkinson

Acontinuacion algunos ejemplos:

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
data(mtcars)
ggplot(data = mtcars, aes(x = wt, y = mpg)) +
  geom_point(color = "steelblue", size = 3) +
  labs(title = "Relación entre peso y consumo",
       x = "Peso (wt)", y = "Millas por galón (mpg)")

library(ggplot2)
ggplot(data = mtcars, aes(x = factor(cyl))) +
  geom_bar(fill = "tomato") +
  labs(title = "Número de autos por cilindrada",
       x = "Cilindros", y = "Frecuencia")

G Barras apiladas

library(ggplot2)
mtcars$cyl <- as.factor(mtcars$cyl)
mtcars$am <- as.factor(mtcars$am)
# Gráfico
ggplot(mtcars, aes(x = cyl, fill = am)) +
  geom_bar()

7.4 Analisis de datos subidos en la nube

A. Uso de la funcion data

Encontrar datos en la nube y subirlos en R para su posterior analisis de manera desordenada

data("mtcars")
data
## function (..., list = character(), package = NULL, lib.loc = NULL, 
##     verbose = getOption("verbose"), envir = .GlobalEnv, overwrite = TRUE) 
## {
##     fileExt <- function(x) {
##         db <- grepl("\\.[^.]+\\.(gz|bz2|xz)$", x)
##         ans <- sub(".*\\.", "", x)
##         ans[db] <- sub(".*\\.([^.]+\\.)(gz|bz2|xz)$", "\\1\\2", 
##             x[db])
##         ans
##     }
##     my_read_table <- function(...) {
##         lcc <- Sys.getlocale("LC_COLLATE")
##         on.exit(Sys.setlocale("LC_COLLATE", lcc))
##         Sys.setlocale("LC_COLLATE", "C")
##         read.table(...)
##     }
##     stopifnot(is.character(list))
##     names <- c(as.character(substitute(list(...))[-1L]), list)
##     if (!is.null(package)) {
##         if (!is.character(package)) 
##             stop("'package' must be a character vector or NULL")
##     }
##     paths <- find.package(package, lib.loc, verbose = verbose)
##     if (is.null(lib.loc)) 
##         paths <- c(path.package(package, TRUE), if (!length(package)) getwd(), 
##             paths)
##     paths <- unique(normalizePath(paths[file.exists(paths)]))
##     paths <- paths[dir.exists(file.path(paths, "data"))]
##     dataExts <- tools:::.make_file_exts("data")
##     if (length(names) == 0L) {
##         db <- matrix(character(), nrow = 0L, ncol = 4L)
##         for (path in paths) {
##             entries <- NULL
##             packageName <- if (file_test("-f", file.path(path, 
##                 "DESCRIPTION"))) 
##                 basename(path)
##             else "."
##             if (file_test("-f", INDEX <- file.path(path, "Meta", 
##                 "data.rds"))) {
##                 entries <- readRDS(INDEX)
##             }
##             else {
##                 dataDir <- file.path(path, "data")
##                 entries <- tools::list_files_with_type(dataDir, 
##                   "data")
##                 if (length(entries)) {
##                   entries <- unique(tools::file_path_sans_ext(basename(entries)))
##                   entries <- cbind(entries, "")
##                 }
##             }
##             if (NROW(entries)) {
##                 if (is.matrix(entries) && ncol(entries) == 2L) 
##                   db <- rbind(db, cbind(packageName, dirname(path), 
##                     entries))
##                 else warning(gettextf("data index for package %s is invalid and will be ignored", 
##                   sQuote(packageName)), domain = NA, call. = FALSE)
##             }
##         }
##         colnames(db) <- c("Package", "LibPath", "Item", "Title")
##         footer <- if (missing(package)) 
##             paste0("Use ", sQuote(paste("data(package =", ".packages(all.available = TRUE))")), 
##                 "\n", "to list the data sets in all *available* packages.")
##         else NULL
##         y <- list(title = "Data sets", header = NULL, results = db, 
##             footer = footer)
##         class(y) <- "packageIQR"
##         return(y)
##     }
##     paths <- file.path(paths, "data")
##     for (name in names) {
##         found <- FALSE
##         for (p in paths) {
##             tmp_env <- if (overwrite) 
##                 envir
##             else new.env()
##             if (file_test("-f", file.path(p, "Rdata.rds"))) {
##                 rds <- readRDS(file.path(p, "Rdata.rds"))
##                 if (name %in% names(rds)) {
##                   found <- TRUE
##                   if (verbose) 
##                     message(sprintf("name=%s:\t found in Rdata.rds", 
##                       name), domain = NA)
##                   thispkg <- sub(".*/([^/]*)/data$", "\\1", p)
##                   thispkg <- sub("_.*$", "", thispkg)
##                   thispkg <- paste0("package:", thispkg)
##                   objs <- rds[[name]]
##                   lazyLoad(file.path(p, "Rdata"), envir = tmp_env, 
##                     filter = function(x) x %in% objs)
##                   break
##                 }
##                 else if (verbose) 
##                   message(sprintf("name=%s:\t NOT found in names() of Rdata.rds, i.e.,\n\t%s\n", 
##                     name, paste(names(rds), collapse = ",")), 
##                     domain = NA)
##             }
##             files <- list.files(p, full.names = TRUE)
##             files <- files[grep(name, files, fixed = TRUE)]
##             if (length(files) > 1L) {
##                 o <- match(fileExt(files), dataExts, nomatch = 100L)
##                 paths0 <- dirname(files)
##                 paths0 <- factor(paths0, levels = unique(paths0))
##                 files <- files[order(paths0, o)]
##             }
##             if (length(files)) {
##                 for (file in files) {
##                   if (verbose) 
##                     message("name=", name, ":\t file= ...", .Platform$file.sep, 
##                       basename(file), "::\t", appendLF = FALSE, 
##                       domain = NA)
##                   ext <- fileExt(file)
##                   if (basename(file) != paste0(name, ".", ext)) 
##                     found <- FALSE
##                   else {
##                     found <- TRUE
##                     switch(ext, R = , r = {
##                       library("utils")
##                       sys.source(file, chdir = TRUE, envir = tmp_env)
##                     }, RData = , rdata = , rda = load(file, envir = tmp_env), 
##                       TXT = , txt = , tab = , tab.gz = , tab.bz2 = , 
##                       tab.xz = , txt.gz = , txt.bz2 = , txt.xz = assign(name, 
##                         my_read_table(file, header = TRUE, as.is = FALSE), 
##                         envir = tmp_env), CSV = , csv = , csv.gz = , 
##                       csv.bz2 = , csv.xz = assign(name, my_read_table(file, 
##                         header = TRUE, sep = ";", as.is = FALSE), 
##                         envir = tmp_env), found <- FALSE)
##                   }
##                   if (found) 
##                     break
##                 }
##                 if (verbose) 
##                   message(if (!found) 
##                     "*NOT* ", "found", domain = NA)
##             }
##             if (found) 
##                 break
##         }
##         if (!found) {
##             warning(gettextf("data set %s not found", sQuote(name)), 
##                 domain = NA)
##         }
##         else if (!overwrite) {
##             for (o in ls(envir = tmp_env, all.names = TRUE)) {
##                 if (exists(o, envir = envir, inherits = FALSE)) 
##                   warning(gettextf("an object named %s already exists and will not be overwritten", 
##                     sQuote(o)))
##                 else assign(o, get(o, envir = tmp_env, inherits = FALSE), 
##                   envir = envir)
##             }
##             rm(tmp_env)
##         }
##     }
##     invisible(names)
## }
## <bytecode: 0x000001ef58a53cb8>
## <environment: namespace:utils>

B.Uso de la funcion force

Encontrar datos en la nube y subirlos en R para su posterior analisis de manera mas ordenada y estetica para su posterior uso en la investigacion

force(mtcars)
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

Veamos unos ejemplos de como utilizar esos datos en un analasis mas sofisticado para la investigacion

  1. usaremos los graficos ya vistos

Antes de continuar se hace la aclaracion de que para hacer los graficos llamamos en especifico una columna de informacion haciendo uso del signo$ para agrupar datos para realizar sus graficos

#Histograma 
hist(mtcars$mpg,main="histograma de base de datos",ylab="frecuencia",xlab="distancia recorrida",col="yellow")

# Diagrama de barras 
Datos<-mtcars$mpg
frecuencia_datos<-table(Datos)
barplot(frecuencia_datos,main="Diagrama de barras de base de datos",ylab="frecuencia",xlab="distancia recorrida",col="yellow")

# Cajas y bigotes 
boxplot(mtcars$mpg,main="cajas y bigotes de base de datos",ylab="frecuencia",col="yellow")

#Diagrama de pastel 
Datos2<-mtcars$mpg
frecuencia_datos1<-table(Datos2)
pie(frecuencia_datos1,main="diagram de pastel de base de datos",col=rainbow(length(edad_freq)))

C Analisis de estdistica descriptiva

ahora usaremos una base de datos traida de internet para analisar

library(DT)
url <- 'https://raw.githubusercontent.com/fhernanb/datos/master/babies.txt'
dt <- read.table(url, header=TRUE, sep='\t')
datatable(dt, options = list(pageLength = 10))
# contabilizar el numero de filas
nrow(dt)
## [1] 1236
#contabilizar el numero de columnas 
ncol(dt)
## [1] 7

una vez traida la tabla empezaremos el proceso de seleccion de datos para su porterior estudio puesto que se debe hacer cada uno por a parte para dar conclusiones pertinenetes de el estudio a realizar.

  1. como interactuar en el entorno
#Encontrar una cantidad de  datoa en especifico para trabajar 
head(dt,n=9)
##   bwt gestation     parity age height weight smoke
## 1 120       284 First born  27     62    100   Not
## 2 113       282 First born  33     64    135   Not
## 3 128       279 First born  28     64    115   Yes
## 4 123        NA First born  36     69    190   Not
## 5 108       282 First born  23     67    125   Yes
## 6 136       286 First born  25     62     93   Not
## 7 138       244 First born  33     62    178   Not
## 8 132       245 First born  23     65    140   Not
## 9 120       289 First born  25     62    125   Not
# encontrar la media de los datos de la columna bwt
mean(dt$bwt)
## [1] 119.5769
# encontrar la mediana de los datos de la columna bwt
median(dt$bwt)
## [1] 120
#varianza en bwt
var(dt$bwt)
## [1] 332.5682
# todas las medidas necesarias para analizar en bwt 
summary(dt$bwt)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    55.0   108.8   120.0   119.6   131.0   176.0
#desviacion estandar en bwt
sd(dt$bwt)
## [1] 18.23645
#cuantiles en bwt
quantile(dt$bwt,probs=c(0.25,0.50,0.75,1.0))
##    25%    50%    75%   100% 
## 108.75 120.00 131.00 176.00
  1. una vez nos familiarizamos con el entorno empezaremos el trabajo estadistico recoordando la existencia de datos perdidos que mas adelante veremos como se soluciona
#install.packages("dplyr")
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# llamaremos a la libreria dplyr para hacer calculos estadisticos de
#manera mas rapida y efectiva 

# extrae los valores de la columna bwt y obtiene su media
dt %>% pull(bwt) %>% mean
## [1] 119.5769
  1. casos donde hay valores perdidos Caso A
# existen valores perdidos de madres que no contestaron
dt$gestation
##    [1] 284 282 279  NA 282 286 244 245 289 299 351 282 279 281 273 285 255 261
##   [19] 261 288 270 274 287 276 294 261 280 266 292 274 270 278 268 275 281 283
##   [37] 279 288 267 282 293 278 302 270 248 274 294 272 275 291 258 283 282 286
##   [55] 267 275 278 257 273 232 273 288 280 245 283 282 246 274 273 276 289 292
##   [73] 284 274 270 274 286 276 277 272 293 280 292 274 287 274 294 296 305  NA
##   [91] 281 268 271  NA 278 282 255 302  NA 254 279 274 286 280 273 279 287 273
##  [109] 303 274 269 302 255 293 279 276 278 283 264 243 288 284 288 284 276 283
##  [127] 277 267 272 225 278 266 294 283 279 258 278 284 269 275 265 293 299 277
##  [145] 268 276 262 300 275 282 271 278 336 284  NA 318 282 287 281 290 288 273
##  [163] 262 296 289 289 291 301 295 293 272 271 287 278 279 278 267 280 288 290
##  [181] 285 277 271 277 306 286 258 268 244 265 278 275 239 302 295 274 290 276
##  [199] 320 291 268 275 282 283 310 281 285 282 280 272 246 270 260 282 290 234
##  [217] 288 233 269 274 290 275 286 275 264 288 268 254 282 274 284 249 292 290
##  [235] 318 277 267 276 274 293 329 278  NA 287 274 278 277 261 282 274 262 286
##  [253] 282 328 274 275 290 286 290 285 148 256 287 292 262 279 294 284 278 280
##  [271] 294 276 290 274 275 301 284 273 308 319 277 282 292 295 280 282 293 279
##  [289] 283 283 302 280 303 276 285 264 294 273 271 284 266 286 306 292 290 285
##  [307] 257 305 295 281 292 256 276 278 277 269 270 267 279 284 283 276 285 260
##  [325] 296 278 293 282 266 273 270 290 273 279 260 254 280 283 270 277 271 277
##  [343] 292 277 276 246 281 293 296 307 278 281 284 276 290 268 280 284 286 281
##  [361] 278 234 274 300 286 302 285 290 294 274 293 294 281 315 278 293 276 272
##  [379] 282 278 266 276 249 292 293 288 282 279 275 288 299 292 289 280 313 290
##  [397] 290 249 299 286 282 286 261 304 281 258 279 277 286 280 294 276 288 279
##  [415] 298 282 297 282 290 276 272 286 279 282 269 276 251 271 272 289 280 283
##  [433] 269 278 263 275 292 277 278 315 235 293 275 280 257 282 288 280 280 281
##  [451] 269 283 280 286 285 273 262 270 258 274 323 281 223 283 273 267 275 256
##  [469] 284 303 295 278 275 272 281 252 270 280 272 291 293 291 262 278 241 282
##  [487] 273 267 280 277 289 288 291 290 293 277 278 289 286 252 232 264 267 284
##  [505] 283 290 272 283 279 271 288 247 263 288 286 280 268 287 282 280 271 284
##  [523] 282 240 285 277 286 290 293 277 282 271 298 289 282 298 277 277 270 284
##  [541] 277 289 271 275 276 293 278 300 279 292 300 276 290 280 273 287 281 264
##  [559] 291 285 265 275 302 260 281 297 280 269 254 271 265 274 288 284 260 291
##  [577] 255 273 274 257 283 294 286 288 278 281 301 308 283 270 268 283 265 297
##  [595] 303 270 269 289 250 263 284 270 285 275 302 285 281 278 273 280 274 271
##  [613] 276 285 292 272 289 278 271 268 272 275 248 295 268 268 301 309 273 280
##  [631] 234 276 293 294 292 256 268 279 285 275 278 298 279 284 288 291 250 270
##  [649] 271 274  NA 292 264 280 306 274 292 273 282 266 297 282 251 297 288 292
##  [667] 274 249 279 275 297 296 277 283 287 256 275 274 279 267 302 281 284 292
##  [685] 255 316 269 277 268 267 274 291 298 296 271 286 284 278 281 237 295 270
##  [703] 271 283 259 297  NA 273 288 299 229 294 286 273 286 308 279 287 299 270
##  [721] 281 298 269 280 275 280 242 287 254 281 284 287 274 279 279 270 298 274
##  [739] 288  NA 282 269 283 279 266 283 315 288 290 262 273 277 275 289 272 285
##  [757] 286 279 290 282 277 330 261 277 280 279 286 289 292 318 289 271 277 286
##  [775] 280 285 285 300 313 275 253 288 286 300 246 269 282 272 252 283 272 278
##  [793] 286 282 286 282 286 288 269 277 273 280 280 289 272 277 292 285 268 255
##  [811] 305 276 268 278 282 279 280 285 288 284 262 291 271 277 270 299 283 289
##  [829] 238 228 245 275 283 224 281 284 287 251 270 282 262 306 284 292 284 275
##  [847] 280 278 264 271 267 297 308 295 278 285 282 291 291 286 267 284 286 282
##  [865] 285 273 293 277 294 181 285 283 286 297 300 293 306 271 272  NA 266 272
##  [883] 280 276 282 275 291 288 301 265 284 262 286 273 284 289 278 281 288 255
##  [901] 281 275 292 281 271 281 291 272 266 273 307 280 245 265 277 278 284 279
##  [919] 284 268 274 283 281 275 288 289 285 238 283 270 267 268 295 275 286 279
##  [937] 252 264 284 304 270 280 275 270 270 291 289 292 261 286 282 266 314 286
##  [955] 290 295 276 294 290 296 269 286 260  NA 272 284 283 273 278 330 306  NA
##  [973] 291 281 287 280 296 275 204 276 283 270 289 281 285 288 296 276 285 281
##  [991] 270 265 293 281 283 259 273 277 281 270 284 276 324 278 273 281 303 275
## [1009] 285 270 284 277 276 274 255 258 289 278 250 276 247 296 271 287 248 291
## [1027] 313 304 285 256 286 294 276 265 292 237 288 273 293 288 283 268 296 307
## [1045] 323 279 287 269 283 290 285 282 288 277 272 266 276 290 274 262 273 284
## [1063] 281 277 267 232 279 283 280 270 280 268 312 273 316 293 290 282 299 286
## [1081] 277 272 295 290 277 292 264 273 276 292 287 289 291 256 279 289 277 281
## [1099] 277 284 278 275 272 267 282 285 285 279 292 278 275 285 276 273 267 297
## [1117] 280 281 282 270 267 277 289 289 298 282 271 283 287 274 285 252 295 279
## [1135] 246 280 285 276 285 236 318 268 238 283 281 279 246 300 266 266 285 264
## [1153] 225 269 284 291 270 293 259 290 270 265 291 283 260 268 311 267 294 254
## [1171] 270 280 353 278 289 292 276 305 241 274 274 271 269 298 275 295 274 302
## [1189] 260 277 275 312  NA 291 273 299 276 281 300 338 255 285 297 260 273 266
## [1207] 242 247 281 283 273 265 286 271 293 267 266 319 285 321 284 290 288 262
## [1225] 281 287 244 278 276 290 270 275 265 291 281 297
# ahora trataremos de obtener la media de los datos 
dt %>% pull(gestation) %>% median
## [1] NA
# como podremos observar aparecea NA lo que indica que faltan datos
# ahora rellenaremos esos datos con la siguiente funcion
dt$gestation[is.na(dt$gestation)]<-median(dt$gestation,na.rm = TRUE)
print(dt$gestation)
##    [1] 284 282 279 280 282 286 244 245 289 299 351 282 279 281 273 285 255 261
##   [19] 261 288 270 274 287 276 294 261 280 266 292 274 270 278 268 275 281 283
##   [37] 279 288 267 282 293 278 302 270 248 274 294 272 275 291 258 283 282 286
##   [55] 267 275 278 257 273 232 273 288 280 245 283 282 246 274 273 276 289 292
##   [73] 284 274 270 274 286 276 277 272 293 280 292 274 287 274 294 296 305 280
##   [91] 281 268 271 280 278 282 255 302 280 254 279 274 286 280 273 279 287 273
##  [109] 303 274 269 302 255 293 279 276 278 283 264 243 288 284 288 284 276 283
##  [127] 277 267 272 225 278 266 294 283 279 258 278 284 269 275 265 293 299 277
##  [145] 268 276 262 300 275 282 271 278 336 284 280 318 282 287 281 290 288 273
##  [163] 262 296 289 289 291 301 295 293 272 271 287 278 279 278 267 280 288 290
##  [181] 285 277 271 277 306 286 258 268 244 265 278 275 239 302 295 274 290 276
##  [199] 320 291 268 275 282 283 310 281 285 282 280 272 246 270 260 282 290 234
##  [217] 288 233 269 274 290 275 286 275 264 288 268 254 282 274 284 249 292 290
##  [235] 318 277 267 276 274 293 329 278 280 287 274 278 277 261 282 274 262 286
##  [253] 282 328 274 275 290 286 290 285 148 256 287 292 262 279 294 284 278 280
##  [271] 294 276 290 274 275 301 284 273 308 319 277 282 292 295 280 282 293 279
##  [289] 283 283 302 280 303 276 285 264 294 273 271 284 266 286 306 292 290 285
##  [307] 257 305 295 281 292 256 276 278 277 269 270 267 279 284 283 276 285 260
##  [325] 296 278 293 282 266 273 270 290 273 279 260 254 280 283 270 277 271 277
##  [343] 292 277 276 246 281 293 296 307 278 281 284 276 290 268 280 284 286 281
##  [361] 278 234 274 300 286 302 285 290 294 274 293 294 281 315 278 293 276 272
##  [379] 282 278 266 276 249 292 293 288 282 279 275 288 299 292 289 280 313 290
##  [397] 290 249 299 286 282 286 261 304 281 258 279 277 286 280 294 276 288 279
##  [415] 298 282 297 282 290 276 272 286 279 282 269 276 251 271 272 289 280 283
##  [433] 269 278 263 275 292 277 278 315 235 293 275 280 257 282 288 280 280 281
##  [451] 269 283 280 286 285 273 262 270 258 274 323 281 223 283 273 267 275 256
##  [469] 284 303 295 278 275 272 281 252 270 280 272 291 293 291 262 278 241 282
##  [487] 273 267 280 277 289 288 291 290 293 277 278 289 286 252 232 264 267 284
##  [505] 283 290 272 283 279 271 288 247 263 288 286 280 268 287 282 280 271 284
##  [523] 282 240 285 277 286 290 293 277 282 271 298 289 282 298 277 277 270 284
##  [541] 277 289 271 275 276 293 278 300 279 292 300 276 290 280 273 287 281 264
##  [559] 291 285 265 275 302 260 281 297 280 269 254 271 265 274 288 284 260 291
##  [577] 255 273 274 257 283 294 286 288 278 281 301 308 283 270 268 283 265 297
##  [595] 303 270 269 289 250 263 284 270 285 275 302 285 281 278 273 280 274 271
##  [613] 276 285 292 272 289 278 271 268 272 275 248 295 268 268 301 309 273 280
##  [631] 234 276 293 294 292 256 268 279 285 275 278 298 279 284 288 291 250 270
##  [649] 271 274 280 292 264 280 306 274 292 273 282 266 297 282 251 297 288 292
##  [667] 274 249 279 275 297 296 277 283 287 256 275 274 279 267 302 281 284 292
##  [685] 255 316 269 277 268 267 274 291 298 296 271 286 284 278 281 237 295 270
##  [703] 271 283 259 297 280 273 288 299 229 294 286 273 286 308 279 287 299 270
##  [721] 281 298 269 280 275 280 242 287 254 281 284 287 274 279 279 270 298 274
##  [739] 288 280 282 269 283 279 266 283 315 288 290 262 273 277 275 289 272 285
##  [757] 286 279 290 282 277 330 261 277 280 279 286 289 292 318 289 271 277 286
##  [775] 280 285 285 300 313 275 253 288 286 300 246 269 282 272 252 283 272 278
##  [793] 286 282 286 282 286 288 269 277 273 280 280 289 272 277 292 285 268 255
##  [811] 305 276 268 278 282 279 280 285 288 284 262 291 271 277 270 299 283 289
##  [829] 238 228 245 275 283 224 281 284 287 251 270 282 262 306 284 292 284 275
##  [847] 280 278 264 271 267 297 308 295 278 285 282 291 291 286 267 284 286 282
##  [865] 285 273 293 277 294 181 285 283 286 297 300 293 306 271 272 280 266 272
##  [883] 280 276 282 275 291 288 301 265 284 262 286 273 284 289 278 281 288 255
##  [901] 281 275 292 281 271 281 291 272 266 273 307 280 245 265 277 278 284 279
##  [919] 284 268 274 283 281 275 288 289 285 238 283 270 267 268 295 275 286 279
##  [937] 252 264 284 304 270 280 275 270 270 291 289 292 261 286 282 266 314 286
##  [955] 290 295 276 294 290 296 269 286 260 280 272 284 283 273 278 330 306 280
##  [973] 291 281 287 280 296 275 204 276 283 270 289 281 285 288 296 276 285 281
##  [991] 270 265 293 281 283 259 273 277 281 270 284 276 324 278 273 281 303 275
## [1009] 285 270 284 277 276 274 255 258 289 278 250 276 247 296 271 287 248 291
## [1027] 313 304 285 256 286 294 276 265 292 237 288 273 293 288 283 268 296 307
## [1045] 323 279 287 269 283 290 285 282 288 277 272 266 276 290 274 262 273 284
## [1063] 281 277 267 232 279 283 280 270 280 268 312 273 316 293 290 282 299 286
## [1081] 277 272 295 290 277 292 264 273 276 292 287 289 291 256 279 289 277 281
## [1099] 277 284 278 275 272 267 282 285 285 279 292 278 275 285 276 273 267 297
## [1117] 280 281 282 270 267 277 289 289 298 282 271 283 287 274 285 252 295 279
## [1135] 246 280 285 276 285 236 318 268 238 283 281 279 246 300 266 266 285 264
## [1153] 225 269 284 291 270 293 259 290 270 265 291 283 260 268 311 267 294 254
## [1171] 270 280 353 278 289 292 276 305 241 274 274 271 269 298 275 295 274 302
## [1189] 260 277 275 312 280 291 273 299 276 281 300 338 255 285 297 260 273 266
## [1207] 242 247 281 283 273 265 286 271 293 267 266 319 285 321 284 290 288 262
## [1225] 281 287 244 278 276 290 270 275 265 291 281 297
# una ves realizado obtendremos nuestro dato de media 
dt %>% pull(gestation) %>% median
## [1] 280

Caso B

dt$age
##    [1] 27 33 28 36 23 25 33 23 25 30 27 32 23 36 30 38 25 33 33 43 22 27 25 30
##   [25] 23 27 26 20 32 28 26 34 30 23 24 22 24 23 27 31 30 23 26 27 37 27 32 25
##   [49] 26 26 26 31 28 31 30 22 26 33 28 33 24 22 23 23 28 36 37 26 31 38 27 26
##   [73] 25 24 24 21 26 39 27 27 35 23 25 33 30 29 32 37 22 24 33 28 27 31 23 22
##   [97] 28 37 35 29 27 33 24 36 24 37 33 22 27 29 26 28 19 21 22 29 33 25 32 39
##  [121] 24 26 35 34 31 25 23 30 35 28 25 20 25 24 25 31 24 28 21 27 39 32 25 30
##  [145] 32 23 24 29 24 38 29 29 29 20 23 21 22 24 39 22 21 43 36 30 22 22 29 26
##  [169] 23 29 22 25 24 23 30 31 30 25 32 25 23 23 23 29 21 34 25 24 20 28 35 22
##  [193] 26 32 26 30 22 22 22 34 19 25 20 23 21 23 22 26 38 29 19 25 23 28 21 33
##  [217] 27 34 26 22 28 24 20 20 26 35 28 23 21 23 22 33 42 19 31 33 22 23 24 30
##  [241] 22 25 27 27 25 21 32 28 24 24 38 23 21 29 26 31 22 21 30 23 28 30 27 22
##  [265] 25 23 40 39 23 38 25 22 35 20 42 29 20 19 40 20 30 36 33 23 27 21 28 27
##  [289] 20 27 22 35 20 23 25 36 34 26 26 29 25 24 27 21 26 19 29 24 18 32 29 34
##  [313] 30 25 31 35 24 29 25 25 21 31 24 33 34 21 39 25 28 29 29 23 22 23 32 26
##  [337] 23 31 22 32 30 27 30 25 22 37 42 23 22 24 31 33 27 18 19 22 40 24 22 24
##  [361] 27 32 30 19 23 19 30 26 32 39 26 26 23 39 27 30 22 28 24 20 26 18 24 40
##  [385] 31 31 23 26 25 21 22 22 19 27 34 30 24 23 29 NA 22 25 26 26 24 22 39 25
##  [409] 22 35 32 33 19 20 23 27 30 26 28 18 27 20 19 33 26 23 28 17 NA 31 23 21
##  [433] 30 20 39 30 32 24 27 26 24 28 27 27 38 22 21 24 24 21 40 20 29 32 33 27
##  [457] 32 25 41 28 17 23 32 19 37 25 23 29 19 25 23 27 25 41 21 21 35 25 28 24
##  [481] 20 26 37 27 23 24 33 25 24 21 21 22 19 19 26 31 21 31 26 37 31 26 29 20
##  [505] 15 31 35 27 20 28 25 21 29 28 22 29 31 20 25 24 23 34 28 26 28 32 21 26
##  [529] 20 40 19 19 25 37 24 30 20 30 20 19 25 27 30 33 23 23 21 20 24 25 28 26
##  [553] 26 20 22 29 37 30 26 27 43 36 22 23 41 27 25 41 27 41 40 23 22 17 26 29
##  [577] 24 32 36 25 24 22 31 28 21 22 26 19 22 30 29 31 36 35 21 25 20 17 26 25
##  [601] 37 19 24 22 24 24 23 27 23 23 26 36 25 26 28 25 23 24 20 18 27 26 33 32
##  [625] 22 36 23 27 34 24 26 21 19 44 21 28 31 21 24 29 35 37 35 18 37 40 34 25
##  [649] 27 20 31 26 26 29 38 19 27 21 27 33 30 28 26 31 20 29 23 31 33 20 26 28
##  [673] 28 27 24 37 26 28 27 29 28 25 28 19 39 29 38 34 29 22 27 25 20 35 29 38
##  [697] 39 26 28 23 21 25 26 34 38 23 23 34 28 26 27 23 26 28 32 30 22 33 24 20
##  [721] 27 22 23 34 33 39 20 20 23 33 20 29 27 34 30 34 28 33 19 19 22 27 19 21
##  [745] 21 22 22 25 35 24 22 35 26 26 26 30 22 33 31 21 31 34 32 24 20 27 30 20
##  [769] 30 19 24 32 23 26 27 35 24 29 27 25 29 20 38 34 25 38 23 30 27 29 25 22
##  [793] 21 30 26 29 19 28 21 29 29 31 34 29 30 38 20 28 37 26 24 23 30 28 29 38
##  [817] 30 29 28 28 20 39 41 38 19 20 32 26 23 24 33 37 27 19 26 39 36 28 27 25
##  [841] 22 32 27 20 23 18 34 28 29 32 22 27 35 32 26 29 33 39 41 22 21 17 31 21
##  [865] 26 26 27 41 21 27 30 29 32 36 25 19 22 34 30 19 26 18 22 23 30 28 27 28
##  [889] 35 27 24 22 22 20 30 23 18 31 26 24 27 28 28 28 39 24 26 20 23 27 26 30
##  [913] 34 24 19 27 40 27 31 31 28 35 27 25 23 25 26 38 33 26 24 30 37 21 26 29
##  [937] 21 23 37 27 22 22 34 43 20 35 28 34 24 22 26 26 22 33 36 20 41 22 21 19
##  [961] 23 23 43 19 32 30 28 35 19 23 21 36 21 22 33 31 26 43 35 19 21 27 33 28
##  [985] 30 27 27 29 25 20 25 24 23 19 37 37 39 25 27 21 29 37 22 37 23 36 23 32
## [1009] 27 29 19 36 20 30 23 24 36 29 40 26 36 33 36 36 30 28 20 25 34 31 25 21
## [1033] 24 30 28 31 28 23 21 27 23 34 24 34 26 19 23 36 24 32 20 29 18 22 30 23
## [1057] 31 26 33 31 30 24 27 29 19 24 21 39 24 21 45 32 41 25 22 34 26 30 21 33
## [1081] 19 23 36 22 41 29 28 26 20 26 27 31 33 26 31 25 24 24 23 39 26 27 35 37
## [1105] 19 18 37 20 35 28 24 23 31 21 24 20 30 29 30 23 35 39 30 22 37 19 21 42
## [1129] 40 41 29 24 29 18 19 41 31 25 20 24 23 32 26 22 29 29 35 27 25 37 35 41
## [1153] 18 28 25 23 29 28 19 19 26 23 34 24 20 25 37 30 32 19 21 21 26 27 21 25
## [1177] 25 23 17 31 24 32 20 24 20 39 21 36 37 18 24 24 39 24 36 24 33 19 34 19
## [1201] 22 22 32 25 31 29 17 18 29 25 33 21 28 39 21 28 24 28 19 28 19 21 21 23
## [1225] 28 29 21 30 34 27 27 27 24 30 21 38
dt %>% pull(age) %>% mean
## [1] NA
dt$age[is.na(dt$age)]<-median(dt$age,na.rm = TRUE)
print(dt$age)
##    [1] 27 33 28 36 23 25 33 23 25 30 27 32 23 36 30 38 25 33 33 43 22 27 25 30
##   [25] 23 27 26 20 32 28 26 34 30 23 24 22 24 23 27 31 30 23 26 27 37 27 32 25
##   [49] 26 26 26 31 28 31 30 22 26 33 28 33 24 22 23 23 28 36 37 26 31 38 27 26
##   [73] 25 24 24 21 26 39 27 27 35 23 25 33 30 29 32 37 22 24 33 28 27 31 23 22
##   [97] 28 37 35 29 27 33 24 36 24 37 33 22 27 29 26 28 19 21 22 29 33 25 32 39
##  [121] 24 26 35 34 31 25 23 30 35 28 25 20 25 24 25 31 24 28 21 27 39 32 25 30
##  [145] 32 23 24 29 24 38 29 29 29 20 23 21 22 24 39 22 21 43 36 30 22 22 29 26
##  [169] 23 29 22 25 24 23 30 31 30 25 32 25 23 23 23 29 21 34 25 24 20 28 35 22
##  [193] 26 32 26 30 22 22 22 34 19 25 20 23 21 23 22 26 38 29 19 25 23 28 21 33
##  [217] 27 34 26 22 28 24 20 20 26 35 28 23 21 23 22 33 42 19 31 33 22 23 24 30
##  [241] 22 25 27 27 25 21 32 28 24 24 38 23 21 29 26 31 22 21 30 23 28 30 27 22
##  [265] 25 23 40 39 23 38 25 22 35 20 42 29 20 19 40 20 30 36 33 23 27 21 28 27
##  [289] 20 27 22 35 20 23 25 36 34 26 26 29 25 24 27 21 26 19 29 24 18 32 29 34
##  [313] 30 25 31 35 24 29 25 25 21 31 24 33 34 21 39 25 28 29 29 23 22 23 32 26
##  [337] 23 31 22 32 30 27 30 25 22 37 42 23 22 24 31 33 27 18 19 22 40 24 22 24
##  [361] 27 32 30 19 23 19 30 26 32 39 26 26 23 39 27 30 22 28 24 20 26 18 24 40
##  [385] 31 31 23 26 25 21 22 22 19 27 34 30 24 23 29 26 22 25 26 26 24 22 39 25
##  [409] 22 35 32 33 19 20 23 27 30 26 28 18 27 20 19 33 26 23 28 17 26 31 23 21
##  [433] 30 20 39 30 32 24 27 26 24 28 27 27 38 22 21 24 24 21 40 20 29 32 33 27
##  [457] 32 25 41 28 17 23 32 19 37 25 23 29 19 25 23 27 25 41 21 21 35 25 28 24
##  [481] 20 26 37 27 23 24 33 25 24 21 21 22 19 19 26 31 21 31 26 37 31 26 29 20
##  [505] 15 31 35 27 20 28 25 21 29 28 22 29 31 20 25 24 23 34 28 26 28 32 21 26
##  [529] 20 40 19 19 25 37 24 30 20 30 20 19 25 27 30 33 23 23 21 20 24 25 28 26
##  [553] 26 20 22 29 37 30 26 27 43 36 22 23 41 27 25 41 27 41 40 23 22 17 26 29
##  [577] 24 32 36 25 24 22 31 28 21 22 26 19 22 30 29 31 36 35 21 25 20 17 26 25
##  [601] 37 19 24 22 24 24 23 27 23 23 26 36 25 26 28 25 23 24 20 18 27 26 33 32
##  [625] 22 36 23 27 34 24 26 21 19 44 21 28 31 21 24 29 35 37 35 18 37 40 34 25
##  [649] 27 20 31 26 26 29 38 19 27 21 27 33 30 28 26 31 20 29 23 31 33 20 26 28
##  [673] 28 27 24 37 26 28 27 29 28 25 28 19 39 29 38 34 29 22 27 25 20 35 29 38
##  [697] 39 26 28 23 21 25 26 34 38 23 23 34 28 26 27 23 26 28 32 30 22 33 24 20
##  [721] 27 22 23 34 33 39 20 20 23 33 20 29 27 34 30 34 28 33 19 19 22 27 19 21
##  [745] 21 22 22 25 35 24 22 35 26 26 26 30 22 33 31 21 31 34 32 24 20 27 30 20
##  [769] 30 19 24 32 23 26 27 35 24 29 27 25 29 20 38 34 25 38 23 30 27 29 25 22
##  [793] 21 30 26 29 19 28 21 29 29 31 34 29 30 38 20 28 37 26 24 23 30 28 29 38
##  [817] 30 29 28 28 20 39 41 38 19 20 32 26 23 24 33 37 27 19 26 39 36 28 27 25
##  [841] 22 32 27 20 23 18 34 28 29 32 22 27 35 32 26 29 33 39 41 22 21 17 31 21
##  [865] 26 26 27 41 21 27 30 29 32 36 25 19 22 34 30 19 26 18 22 23 30 28 27 28
##  [889] 35 27 24 22 22 20 30 23 18 31 26 24 27 28 28 28 39 24 26 20 23 27 26 30
##  [913] 34 24 19 27 40 27 31 31 28 35 27 25 23 25 26 38 33 26 24 30 37 21 26 29
##  [937] 21 23 37 27 22 22 34 43 20 35 28 34 24 22 26 26 22 33 36 20 41 22 21 19
##  [961] 23 23 43 19 32 30 28 35 19 23 21 36 21 22 33 31 26 43 35 19 21 27 33 28
##  [985] 30 27 27 29 25 20 25 24 23 19 37 37 39 25 27 21 29 37 22 37 23 36 23 32
## [1009] 27 29 19 36 20 30 23 24 36 29 40 26 36 33 36 36 30 28 20 25 34 31 25 21
## [1033] 24 30 28 31 28 23 21 27 23 34 24 34 26 19 23 36 24 32 20 29 18 22 30 23
## [1057] 31 26 33 31 30 24 27 29 19 24 21 39 24 21 45 32 41 25 22 34 26 30 21 33
## [1081] 19 23 36 22 41 29 28 26 20 26 27 31 33 26 31 25 24 24 23 39 26 27 35 37
## [1105] 19 18 37 20 35 28 24 23 31 21 24 20 30 29 30 23 35 39 30 22 37 19 21 42
## [1129] 40 41 29 24 29 18 19 41 31 25 20 24 23 32 26 22 29 29 35 27 25 37 35 41
## [1153] 18 28 25 23 29 28 19 19 26 23 34 24 20 25 37 30 32 19 21 21 26 27 21 25
## [1177] 25 23 17 31 24 32 20 24 20 39 21 36 37 18 24 24 39 24 36 24 33 19 34 19
## [1201] 22 22 32 25 31 29 17 18 29 25 33 21 28 39 21 28 24 28 19 28 19 21 21 23
## [1225] 28 29 21 30 34 27 27 27 24 30 21 38
dt %>% pull(age) %>% mean
## [1] 27.25324

en ambos casos solucionamos el error de datos faltantes para ahora si podemos empezar con su posterior analisis y comprension de lo que sucede

  1. encontrar datos en especifico de toda la base de datos
# encontrar un dato en especifico
dt[1235,7]
## [1] "Not"
# encontrar mas de un dato en especifico con lugares en la tabla de datos 
dt[c(40, 58, 69, 256), c('age', 'smoke')]
##     age smoke
## 40   31   Not
## 58   33   Not
## 69   31   Yes
## 256  31  <NA>

8 Apliaciones a la estadistica inferencial de datos

  1. Cargar y visualizar los datos
horas_sueno <- c(5, 6, 7, 8, 9, 6, 7, 8)
rendimiento <- c(65, 70, 75, 80, 85, 68, 74, 82)

# Crear un data frame
datos <- data.frame(horas_sueno, rendimiento)

# Gráfico de dispersión
plot(horas_sueno, rendimiento,
     pch = 19, col = "darkgreen",
     main = "Relación entre horas de sueño y rendimiento",
     xlab = "Horas de sueño", ylab = "Rendimiento académico")

Este gráfico nos va a permitir visualizar una posible relación lineal positiva entre las horas de sueño y el rendimiento academico de la poblacion de estudio.

  1. Test de normalidad (Shapiro-Wilk)
shapiro.test(horas_sueno)
## 
##  Shapiro-Wilk normality test
## 
## data:  horas_sueno
## W = 0.96507, p-value = 0.8568
shapiro.test(rendimiento)
## 
##  Shapiro-Wilk normality test
## 
## data:  rendimiento
## W = 0.9638, p-value = 0.8455

usamos la funcion shapiro ya que es la mas poderosa de todas para la distribucion de datos de tipo numerico y nos ayudara para determinar nuestra investigacion de manera correcta con un porcentaje de aceptabilidad del 95% que para una prueba estadistica es muy eficiente

Con este test vamos a verificar si los datos siguen una distribución normal:

p > 0.05: los datos no difieren significativamente de una distribución normal (es decir, son compatibles con la normalidad).

p < 0.05: los datos no son normales.

  1. Análisis de correlación
# Correlación de Pearson (asume normalidad y relación lineal)
cor.test(horas_sueno, rendimiento, method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  horas_sueno and rendimiento
## t = 16.479, df = 6, p-value = 3.183e-06
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.9388561 0.9981087
## sample estimates:
##       cor 
## 0.9891324
# Correlación de Spearman (rangos, no requiere normalidad)
cor.test(horas_sueno, rendimiento, method = "spearman")
## Warning in cor.test.default(horas_sueno, rendimiento, method = "spearman"):
## Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  horas_sueno and rendimiento
## S = 1.5136, p-value = 1.443e-05
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.9819805
# Correlación de Kendall (más robusta para pocos datos o empates)
cor.test(horas_sueno, rendimiento, method = "kendall")
## Warning in cor.test.default(horas_sueno, rendimiento, method = "kendall"):
## Cannot compute exact p-value with ties
## 
##  Kendall's rank correlation tau
## 
## data:  horas_sueno and rendimiento
## z = 3.1665, p-value = 0.001543
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##       tau 
## 0.9449112

con estas funciones analisamos los comportamientos de correlaciones de los datos

Método Supuestos se utilza cuando
Pearson Relación lineal + normalidad Datos cuantitativos con comportamiento lineal
Spearman Rangos (monótona, no lineal) Datos ordinales o cuando hay outliers
Kendall Rangos con empates Muestras pequeñas o con muchos valores iguales

conclusiones para el uso de estas funciones en las pruebas estadisticas

Si los datos son normales, usamos Pearson.

Si no son normales o la relación no es lineal, preferimos Spearman o Kendall.

La correlación mide asociación, no causalidad.

8.1 Ejemplo Practico

Ahora veremos esto en un ejemplo claro usando la base de datos “birthwt” del paquete MASS en R, el cual contiene información sobre factores de riesgo asociados con el bajo peso al nacer en recién nacidos.

  1. Cargamos la base de datos
# Cargar bibliotecas
library(MASS)
## 
## Adjuntando el paquete: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
library(dplyr)
library(ggplot2)

# Cargar el conjunto de datos
data("birthwt")
  1. tomamos los datos a analizar
# Ver las primeras filas del conjunto de datos
head(birthwt)
##    low age lwt race smoke ptl ht ui ftv  bwt
## 85   0  19 182    2     0   0  0  1   0 2523
## 86   0  33 155    3     0   0  0  0   3 2551
## 87   0  20 105    1     1   0  0  0   1 2557
## 88   0  21 108    1     1   0  0  1   2 2594
## 89   0  18 107    1     1   0  0  1   0 2600
## 91   0  21 124    3     0   0  0  0   0 2622
# Obtener un resumen estadístico
summary(birthwt)
##       low              age             lwt             race      
##  Min.   :0.0000   Min.   :14.00   Min.   : 80.0   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:19.00   1st Qu.:110.0   1st Qu.:1.000  
##  Median :0.0000   Median :23.00   Median :121.0   Median :1.000  
##  Mean   :0.3122   Mean   :23.24   Mean   :129.8   Mean   :1.847  
##  3rd Qu.:1.0000   3rd Qu.:26.00   3rd Qu.:140.0   3rd Qu.:3.000  
##  Max.   :1.0000   Max.   :45.00   Max.   :250.0   Max.   :3.000  
##      smoke             ptl               ht                ui        
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.00000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.00000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000   Median :0.00000   Median :0.0000  
##  Mean   :0.3915   Mean   :0.1958   Mean   :0.06349   Mean   :0.1481  
##  3rd Qu.:1.0000   3rd Qu.:0.0000   3rd Qu.:0.00000   3rd Qu.:0.0000  
##  Max.   :1.0000   Max.   :3.0000   Max.   :1.00000   Max.   :1.0000  
##       ftv              bwt      
##  Min.   :0.0000   Min.   : 709  
##  1st Qu.:0.0000   1st Qu.:2414  
##  Median :0.0000   Median :2977  
##  Mean   :0.7937   Mean   :2945  
##  3rd Qu.:1.0000   3rd Qu.:3487  
##  Max.   :6.0000   Max.   :4990

las variabkes contenidas en este grupo de datos son:

  1. bwt: peso al nacer en gramos.

  2. smoke: indicador de si la madre fumó durante el embarazo (0 = No, 1 = Sí).

  3. age: edad de la madre en años.

  4. lwt: peso de la madre en libras.

  5. race: raza de la madre (1 = blanca, 2 = negra, 3 = otra).

  1. Comparamos el peso al nacer según el hábito de fumar que la madre presente
  1. Visualización con boxplot para identificar el comportamiento de estos
birthwt$smoke <- factor(birthwt$smoke, labels = c("No Fuma", "Fuma"))

# Crear un boxplot del peso del infante al nacer segun el habito de fumar
ggplot(birthwt, aes(x = smoke, y = bwt, fill = smoke)) +
  geom_boxplot() +
  labs(title = "Peso al Nacer segun Habito de Fumar",
       x = "Habito de Fumar",
       y = "Peso al Nacer (gramos)") +
  theme_minimal()

  1. Prueba de normalidad (Shapiro-Wilk)

antes de ralizarla hacemos dos afirmaciones

  1. Hipótesis nula (H₀): H₀: No hay diferencia en el peso promedio al nacer entre bebés de madres que fuman y las que no. Es decir,

  2. Hipótesis alternativa (H₁): H₁: Sí hay diferencia en el peso promedio al nacer entre bebés de madres que fuman y las que no. Es decir,

que como mencionamos sirve para detectar el comportamiento de los datos, sison normales o no

# Dividir los datos según el hábito de fumar
bwt_no_fuma <- birthwt$bwt[birthwt$smoke == "No Fuma"]
bwt_fuma <- birthwt$bwt[birthwt$smoke == "Fuma"]

# Prueba de normalidad para cada grupo
shapiro.test(bwt_no_fuma)
## 
##  Shapiro-Wilk normality test
## 
## data:  bwt_no_fuma
## W = 0.98694, p-value = 0.3337
shapiro.test(bwt_fuma)
## 
##  Shapiro-Wilk normality test
## 
## data:  bwt_fuma
## W = 0.98296, p-value = 0.4195

Como ambas distribuciones son normales (p > 0.05), se aplica una prueba t de Student.

t.test(bwt ~ smoke, data = birthwt)
## 
##  Welch Two Sample t-test
## 
## data:  bwt by smoke
## t = 2.7299, df = 170.1, p-value = 0.007003
## alternative hypothesis: true difference in means between group No Fuma and group Fuma is not equal to 0
## 95 percent confidence interval:
##   78.57486 488.97860
## sample estimates:
## mean in group No Fuma    mean in group Fuma 
##              3055.696              2771.919

Esto significa que, con un 95% de confianza, la verdadera diferencia en las medias poblacionales de los infantes se encunetra entre 79 y 489 gramos.

Conclusión El valor p = 0.007 es menor que 0.05, por lo tanto:

Rechazamos la hipótesis nula.

Hay evidencia estadísticamente significativa de que existe una diferencia en el peso promedio al nacer entre los bebés de madres que fuman y los que no fuman.

como podemos evidenciar tabien en el peso de los infantes En promedio, los bebés de madres que no fuman nacen con 283.78 g más que los de madres que fuman. esto se realiza restando los pesos promedio de los hijos con madres que fuman y las que no

ya tomando una interpretacion mas adecuada tenemos que

Este análisis nos sugiere que fumar durante el embarazo está muy asociado con un mucho menor peso al nacer, y esta diferencia es realmente significativa desde el punto de vista de la estadística.