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.
Fuente: [SEO Soporte(2018)/https://www.maximaformacion.es/blog-dat/que-es-r-software/]
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"
a<-3
a1=3
print(a)
## [1] 3
print(a1)
## [1] 3
#son del mismo uso no se diferencian sirven igual
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
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
a3<-8.5
b2<-8.5
round(a3+b2)
## [1] 17
a4=8.9
b5=8.2
round(a4+b5)
## [1] 17
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"
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
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.
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
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))
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)
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))
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))
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))
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))
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))
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)
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
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")
| 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
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()
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
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.
#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
#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
# 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
# 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>
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.
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.
# 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.
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.
# 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")
# 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:
bwt: peso al nacer en gramos.
smoke: indicador de si la madre fumó durante el embarazo (0 = No, 1 = Sí).
age: edad de la madre en años.
lwt: peso de la madre en libras.
race: raza de la madre (1 = blanca, 2 = negra, 3 = otra).
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()
antes de ralizarla hacemos dos afirmaciones
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,
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.