x = c(1,3,5,7,9)
y = c(2,4,6,7,11,12)
x+1
## [1] 2 4 6 8 10
y*2
## [1] 4 8 12 14 22 24
length(x)
## [1] 5
length(y)
## [1] 6
x + y
## [1] 3 7 11 14 20 13
Los vectores no tiene la misma longitud. Por lo tanto, R empareja los elementos de ambos vectores, reciclando los elementos de ‘x’ para igualar la longitud de ‘y’.
sum(x>5)
## [1] 2
sum(x[x>5])
## [1] 16
sum(x>5|x<3)
## [1] 3
y[2]
## [1] 4
y[-2]
## [1] 2 6 7 11 12
y[x]
## [1] 2 6 11 NA NA
¿Que significa NA?: Representa un valor desconocido.NA (“not available”)
Selecciona los elementos de y que son mayores o iguales a 8.
y[y>=8]
## [1] 11 12
millas = c(65241, 65665, 65998, 66014, 66547, 66857, 67025, 67447, 66958, 67002)
millas
## [1] 65241 65665 65998 66014 66547 66857 67025 67447 66958 67002
kms = millas * 1.609 # Millas a Kilómetros
kms
## [1] 104972.8 105655.0 106190.8 106216.5 107074.1 107572.9 107843.2 108522.2
## [9] 107735.4 107806.2
diffm = diff(millas)
diffm
## [1] 424 333 16 533 310 168 422 -489 44
diffk = diff(kms)
diffk
## [1] 682.216 535.797 25.744 857.597 498.790 270.312 678.998 -786.801
## [9] 70.796
total_millas = sum(millas)
total_millas
## [1] 664754
prom_millas = mean(millas)
prom_millas
## [1] 66475.4
median(millas)
## [1] 66702
min(millas)
## [1] 65241
max(millas)
## [1] 67447
summary(millas)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 65241 66002 66702 66475 66991 67447
pagos = c(47,32,40,36,49,31,49,30,49,35,48,32)
pagos
## [1] 47 32 40 36 49 31 49 30 49 35 48 32
total_pagos = sum(pagos)
total_pagos
## [1] 478
prom_mes = mean(pagos)
prom_mes
## [1] 39.83333
min(pagos)
## [1] 30
max(pagos)
## [1] 49
meses = c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")
pagos_por_mes = data.frame(Mes = meses, Pago = pagos)
pagos_por_mes
## Mes Pago
## 1 Enero 47
## 2 Febrero 32
## 3 Marzo 40
## 4 Abril 36
## 5 Mayo 49
## 6 Junio 31
## 7 Julio 49
## 8 Agosto 30
## 9 Septiembre 49
## 10 Octubre 35
## 11 Noviembre 48
## 12 Diciembre 32
meses_mas40 = sum(pagos>40)
meses_mas40
## [1] 5
porcentaje = (meses_mas40/length(pagos))*100
sprintf("%.2f%%", porcentaje)
## [1] "41.67%"
datos = c(61, 88, 73, 49, 41, 72, 99, 7, 12, 13, 87, 91, 5, 17, 97)
porcentajes = datos / sum(datos) * 100
barplot(porcentajes, names.arg = datos, ylab = "Porcentaje (%)", main = "Diagrama Porcentual")
resumen = summary(datos)
cat("Resúmene numérico:\n")
## Resúmene numérico:
resumen
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.00 15.00 61.00 54.13 87.50 99.00
cuartiles = quantile(datos)
cat("Cuartiles:\n")
## Cuartiles:
cuartiles
## 0% 25% 50% 75% 100%
## 5.0 15.0 61.0 87.5 99.0
## summary(x):
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.00 15.00 61.00 54.13 87.50 99.00
## fivenum(x):
## [1] 5.0 15.0 61.0 87.5 99.0
Summary(x) da resumen más completo que incluye la media, mientras que fivenum(x) proporciona un resumen más conciso de los valores mínimo, máximo y los cuartiles.Ademas fivenum(x) solo los ubica en un vector sin mencionar que representan estos valores.
valores = rnorm(100)
valores
## [1] -0.673738913 0.542990890 -0.060067777 0.507715429 -0.717973034
## [6] -2.622243920 1.067898669 -0.351992466 -0.342954864 0.364633234
## [11] -0.027521225 1.817800312 -0.413237842 -0.960132028 -0.193274989
## [16] -1.386462876 1.123904887 -1.382951698 -0.711545528 -0.343136927
## [21] -1.693225707 0.598291336 0.480146319 -0.156024017 -0.853248662
## [26] 1.210807345 1.437460174 -0.171067344 -2.113359546 -0.909689373
## [31] 0.419588914 -1.164340137 0.348763184 -1.762059378 0.136181156
## [36] 1.065898181 -0.505434040 -0.948213368 0.565789861 -0.590966520
## [41] -0.068096748 -0.019790670 0.390058858 -0.494651592 -0.914758740
## [46] -1.567216836 0.416193408 0.944727170 1.951133217 -0.004451143
## [51] 0.666883935 -1.082570577 2.058536143 -1.747817356 1.430256116
## [56] -0.289838277 -0.707468193 0.656096113 -0.504501004 1.164747479
## [61] -1.007114455 0.313943228 -1.513278106 -1.409101871 -0.247454446
## [66] 0.339716436 0.676050926 -0.093087256 0.041539872 0.832995977
## [71] 1.202781950 0.599714230 -0.156813808 -0.825877113 -1.723120352
## [76] -0.472175597 -1.132740758 0.453189983 -0.174341630 -1.679567525
## [81] 0.306290495 -0.332383798 -2.273903291 1.660038107 0.704225205
## [86] 0.559551745 0.538478244 0.099635223 -1.212690937 0.765711637
## [91] 1.232176373 -0.297763513 -0.334999570 -0.464677986 -0.392984558
## [96] -0.895003647 0.179194783 1.163546872 0.637815736 0.324691618
hist(valores, main = "Histograma de valores aleatorios", xlab = "Valor", ylab = "Frecuencia")
# Repetir el proceso
for (i in 1:2) {
valores = rnorm(100)
hist(valores, main = paste("Histograma", i+1, "de valores aleatorios"), xlab = "Valor", ylab = "Frecuencia")
}
Se observa que cada histograma es diferente, ya que los valores generados son aleatorios y siguen una distribución normal, pero con diferentes valores.
resumen = summary(valores)
resumen
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -3.1440 -0.8307 -0.2181 -0.1467 0.4859 2.2698
valores_binomiales = rbinom(30, size = 5, prob = 0.9)
valores_binomiales
## [1] 5 5 5 5 4 5 5 5 5 5 4 5 5 5 4 5 5 5 4 5 5 5 4 5 5 4 4 4 5 5
barplot(table(valores_binomiales), main = "Distribución Binomial (n=5, p=0.9)", xlab = "Número de éxitos", ylab = "Frecuencia")
summary(valores_binomiales)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.000 4.250 5.000 4.733 5.000 5.000
Resumen distribución normal:
summary(valores)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -3.1440 -0.8307 -0.2181 -0.1467 0.4859 2.2698
fallos = c(0, 1, 0, NA, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 1)
fallos
## [1] 0 1 0 NA 0 0 0 0 0 1 1 1 0 0 3 0 0 0 0 0 2 0 1
# Diagrama de barras
barplot(table(fallos), main = "Número de fallos en intentos de puesta en órbita",
xlab = "Número de fallos", ylab = "Frecuencia")
# Diagrama boxplot
boxplot(fallos, main = "Número de fallos en intentos de puesta en órbita",
ylab = "Número de fallos" )
Depende de lo que se quiera visualizar. Un diagrama de barras es útil para mostrar la frecuencia de cada valor individual, mientras que un diagrama boxplot muestra la distribución de los datos, incluyendo información sobre la mediana, los cuartiles y los valores atípicos.
tabla_fallos = table(fallos)
tabla_fallos
## fallos
## 0 1 2 3
## 15 5 1 1
# Calcular el número medio de errores
media_fallos = mean(fallos, na.rm = TRUE)
media_fallos
## [1] 0.4545455
# Mediante c()
est = 1:10
p1 = c(3, 3, 3, 4, 3, 4, 3, 4, 4, 3)
p2 = c(5, 5, 2, 2, 5, 2, 2, 5, 5, 2)
p3 = c(1, 3, 1, 3, 3, 3, 1, 3, 1, 1)
datos = data.frame(
Estudiante = est,
P1 = p1,
P2 = p2,
P3 = p3
)
print(t(datos))
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## Estudiante 1 2 3 4 5 6 7 8 9 10
## P1 3 3 3 4 3 4 3 4 4 3
## P2 5 5 2 2 5 2 2 5 5 2
## P3 1 3 1 3 3 3 1 3 1 1
# Mediante scan()
# cat("Ingrese las respuestas de los estudiantes para P1, separadas por espacios:\n")
# p1 = scan()
#
# cat("Ingrese las respuestas de los estudiantes para P2, separadas por espacios:\n")
# p2 = scan()
#
# cat("Ingrese las respuestas de los estudiantes para P3, separadas por espacios:\n")
# p3 = scan()
#
# datos = data.frame(
# Estudiante = est,
# P1 = p1,
# P2 = p2,
# P3 = p3
# )
#
# print(t(datos))
# Mediante read.table()
datos = read.table(text = "Estudiante E1 E2 E3 E4 E5 E6 E7 E8 E9 E10
P1 3 3 3 4 3 4 3 4 4 3
P2 5 5 2 2 5 2 2 5 5 2
P3 1 3 1 3 3 3 1 3 1 1", header = TRUE)
tabla = data.frame(datos)
tabla
## Estudiante E1 E2 E3 E4 E5 E6 E7 E8 E9 E10
## 1 P1 3 3 3 4 3 4 3 4 4 3
## 2 P2 5 5 2 2 5 2 2 5 5 2
## 3 P3 1 3 1 3 3 3 1 3 1 1
# Mediante data.entry()
# datos_vacios = data.frame(
# Estudiante = 1:10,
# P1 = rep(0, 10),
# P2 = rep(0, 10),
# P3 = rep(0, 10)
# )
#
# data.entry(datos_vacios)
#
# print(datos_vacios)
datos = data.frame(Estudiante = est, P1 = p1, P2 = p2, P3 = p3)
tabla_P1 = table(datos$P1)
tabla_P2 = table(datos$P2)
tabla_P3 = table(datos$P3)
# Convertir las tablas en marcos de datos
tabla_P1_df = data.frame(P1 = names(tabla_P1), Frecuencia = as.vector(tabla_P1))
tabla_P2_df = data.frame(P2 = names(tabla_P2), Frecuencia = as.vector(tabla_P2))
tabla_P3_df = data.frame(P3 = names(tabla_P3), Frecuencia = as.vector(tabla_P3))
tabla_P1_df
## P1 Frecuencia
## 1 3 6
## 2 4 4
tabla_P2_df
## P2 Frecuencia
## 1 2 5
## 2 5 5
tabla_P3_df
## P3 Frecuencia
## 1 1 5
## 2 3 5
# Tablas de contingencia cruzadas de 2 en 2
tabla_P1_P2 = table(datos$P1, datos$P2)
tabla_P1_P3 = table(datos$P1, datos$P3)
tabla_P2_P3 = table(datos$P2, datos$P3)
Tabla de contingencia cruzada entre P1 y P2:
##
## 2 5
## 3 3 3
## 4 2 2
Tabla de contingencia cruzada entre P1 y P3:
##
## 1 3
## 3 4 2
## 4 1 3
Tabla de contingencia cruzada entre P2 y P3:
##
## 1 3
## 2 3 2
## 5 2 3
# Tabla de contingencia cruzada de las 3 preguntas
tabla_3_en_1 <- table(datos$P1, datos$P2, datos$P3)
Tabla de contingencia cruzada de las 3 preguntas:
## , , = 1
##
##
## 2 5
## 3 3 1
## 4 0 1
##
## , , = 3
##
##
## 2 5
## 3 0 2
## 4 2 1
library(ggplot2)
library(tidyr)
datos = data.frame(est, p2, p3)
conj_datos = gather(datos, pregunta, calificacion, -est)
ggplot(conj_datos, aes(x = est, y = calificacion, fill = pregunta)) +
geom_bar(stat = "identity", color = "black") + # Agregar bordes negros a las barras
labs(
title = "Diagrama de Barras Apiladas Preguntas 2 y 3",
x = "Estudiante",
y = "Calificación",
fill = "Pregunta"
) +
geom_text(aes(label = calificacion), position = position_stack(vjust = 0.5)) # Agregar etiquetas en el centro de las barras
datos = data.frame(est, p1, p2, p3)
conj_datos = gather(datos, pregunta, calificacion, -est)
ggplot(conj_datos, aes(x = est, y = calificacion, fill = pregunta)) +
geom_bar(stat = "identity", color = "black") + # Agregar bordes negros a las barras
labs(
title = "Diagrama de Barras Apiladas con las 3 Preguntas",
x = "Estudiante",
y = "Calificación",
fill = "Pregunta"
) +
scale_fill_brewer(palette = "Set2") + # Cambiar la paleta de colores
geom_text(aes(label = calificacion), position = position_stack(vjust = 0.5)) # Agregar etiquetas en el centro de las barras
vector1 = rnorm(50)
vector2 = rnorm(50)
vector1
## [1] -1.35198472 0.35875227 -0.77463405 1.67709502 -1.00146565 0.09160137
## [7] 1.12512922 0.82401736 2.01217706 0.41343879 1.08054585 -1.99095553
## [13] -1.40338994 -0.83919476 -0.22501328 -1.26217400 0.50612500 -2.17795671
## [19] 1.46878958 1.01368586 0.29072572 0.61615666 1.21449200 -0.66187292
## [25] -1.11045853 -1.23652716 0.51893143 -0.01263138 -0.48348951 -1.26927245
## [31] -0.61131010 0.80100448 1.31064354 -0.17892631 -1.77975361 0.78761123
## [37] 0.94497826 -0.26877044 1.18582833 0.64469547 0.35393955 -0.40563572
## [43] -0.49504036 1.79451742 -2.30543010 1.17275518 1.04603132 1.28330488
## [49] 0.30762272 -1.35341058
vector2
## [1] -1.99644887 -0.03028230 0.06601498 -0.13182710 2.53013654 -1.04327399
## [7] 1.05046484 0.10003869 1.93579290 -1.19131821 -0.42595988 0.19695516
## [13] 0.53936464 0.91582706 0.28147532 1.81243211 -0.14389206 -0.20734590
## [19] -0.57678150 -2.10840908 0.26446181 -0.84182413 -0.07565269 0.53170265
## [25] -0.28380488 -1.71316476 -1.02656064 -0.15526924 0.14964907 0.02730889
## [31] -0.38129113 -1.44662890 1.58253749 0.16304055 1.24418638 0.02936859
## [37] 0.60906701 -0.34286485 -0.30009136 -0.17413763 0.17207406 2.34177119
## [43] -0.83307141 0.17712769 -0.87363153 -1.87531052 -0.76026961 0.95082690
## [49] 0.76730008 -1.69036900
Prueba de normalidad Shapiro-Wilk para el Vector 1:
prueba_V1 = shapiro.test(vector1)
prueba_V1
##
## Shapiro-Wilk normality test
##
## data: vector1
## W = 0.9639, p-value = 0.1295
Prueba de normalidad Shapiro-Wilk para el Vector 2:
prueba_V2 = shapiro.test(vector2)
prueba_V2
##
## Shapiro-Wilk normality test
##
## data: vector2
## W = 0.9729, p-value = 0.3024
test_tStudent = t.test(vector1, vector2)
test_tStudent
##
## Welch Two Sample t-test
##
## data: vector1 and vector2
## t = 0.35162, df = 97.645, p-value = 0.7259
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.3562755 0.5097097
## sample estimates:
## mean of x mean of y
## 0.03290596 -0.04381113
El valor p es mayor que el nivel de significancia de 0.05, lo que indica que no hay suficiente evidencia para rechazar la hipótesis nula de que no hay diferencia significativa entre las medias de los dos grupos. Por lo tanto, en este caso, no se puede concluir que haya diferencias significativas entre los dos vectores.
v_normal = rnorm(50)
v_normal
## [1] -1.70102161 0.90576724 -0.59921563 2.10646458 -0.48071241 1.23792517
## [7] -2.16109228 -1.98250084 -0.65579388 0.26062646 -1.25699711 0.32262040
## [13] -0.70393428 1.25640898 0.58424357 -0.60212748 -0.43585073 -4.79954741
## [19] 0.97325282 0.12913863 -1.45169844 0.31993549 -0.11207574 0.39265001
## [25] -0.10371664 -1.21679229 0.49075604 0.01360331 -0.33944583 2.01609938
## [31] -1.80603913 0.64329851 0.63073856 0.02904724 2.28897825 0.58759525
## [37] 0.67860555 1.42602073 -0.02282185 0.34193496 0.72158949 -0.13826197
## [43] -1.72034089 0.48583684 0.29793850 0.80483952 1.69654986 0.52654444
## [49] 1.76935268 1.03131405
v_binomial = rbinom(50, size = 1, prob = 0.5)
v_binomial
## [1] 0 1 0 0 1 0 1 1 0 0 0 1 1 1 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 1 0 0 1 0 1 1 1
## [39] 1 0 0 1 0 1 0 0 0 0 0 0
Prueba de normalidad de Shapiro-Wilk para el vector normal:
prueba_vn = shapiro.test(v_normal)
prueba_vn
##
## Shapiro-Wilk normality test
##
## data: v_normal
## W = 0.93073, p-value = 0.005892
En este caso, el valor p es mayor que 0.05, lo que indica que no hay suficiente evidencia para rechazar la hipótesis nula de normalidad. Por lo tanto, se puede concluir que los datos en v_normal se ajustan a una distribución normal.
Prueba de normalidad de Shapiro-Wilk para el vector binomial:
prueba_vb = shapiro.test(v_binomial)
prueba_vb
##
## Shapiro-Wilk normality test
##
## data: v_binomial
## W = 0.62213, p-value = 4.21e-10
En este caso, el valor extremadamente bajo del valor p (prácticamente cero) indica que hay evidencia significativa para rechazar la hipótesis nula de normalidad. Por lo tanto, se concluye que los datos en v_binomial no siguen una distribución normal.
test_tStudent2 = t.test(v_normal, v_binomial)
test_tStudent2
##
## Welch Two Sample t-test
##
## data: v_normal and v_binomial
## t = -1.7851, df = 63.332, p-value = 0.07904
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.73415601 0.04134361
## sample estimates:
## mean of x mean of y
## 0.0535938 0.4000000
El valor de p es menor que el nivel de significancia de 0.05, lo que significa que hay evidencia suficiente para rechazar la hipótesis nula de que no hay diferencia significativa entre las medias de los dos grupos. Por lo tanto, en este caso, podemos concluir que hay diferencias significativas entre los dos vectores.