DATOS CONTINUOS

getwd()
[1] "C:/Users/MINEDUCYT/OneDrive/AÑO 2024/UNIVERSIDAD DE EL SALVADOR/programacion en R/archivos de quartodoc"

creamos el vector de notas

Notas <- c(4.47, 4.47,3.48, 2.29, 3.15, 5.3,4.5, 5.9, 3.2, 4.8, 5.8, 4.32, 6, 5, 3.4, 4.6, 5.8, 5.9, 2.4,2.5); Notas
 [1] 4.47 4.47 3.48 2.29 3.15 5.30 4.50 5.90 3.20 4.80 5.80 4.32 6.00 5.00 3.40
[16] 4.60 5.80 5.90 2.40 2.50

Guardamos el vector de las 20 notas en formato txt

 write(Notas, "Notas.txt") 

llamamos al vector notas

X <- scan("Notas.txt", what = double(0), na.strings = "NA", flush=FALSE) 
# Define el número k de los intervalos o clases.
# Usa el Método de Herbert A. Sturges para determinar dicho número.
 n <- length(X); n
[1] 20
 k <- 1+3.322*logb(n, 10); k
[1] 5.322022
 k <- round(k); k 
[1] 5
 rango <- max(X)-min(X); rango
[1] 3.71
a=rango/k; a
[1] 0.742
a <- round(a, 3); a
[1] 0.742
# Define los límites y puntos medios de cada uno de los k intervalos
limites <- seq(from=min(X)-0.01/2, to=max(X)+0.01/2, by=a); limites
[1] 2.285 3.027 3.769 4.511 5.253 5.995
 options(digits=4)
 ci <- cbind(1:k); ci
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
[5,]    5
 for(i in 2:length(limites)) ci[i-1, 1] <- (limites[i] + limites[i-1])/2
 ci 
      [,1]
[1,] 2.656
[2,] 3.398
[3,] 4.140
[4,] 4.882
[5,] 5.624
# Encuentra las frecuencias absolutas fi para cada intervalo.
options(digits=2)
fi <- cbind(table(cut(X, breaks = limites, labels=NULL, include.lowest=FALSE,
right=FALSE, dig.lab=4))); fi 
              [,1]
[2.285,3.027)    3
[3.027,3.769)    4
[3.769,4.511)    4
[4.511,5.253)    3
[5.253,5.995)    5

breaks es un vector o secuencia de cortes 1:6, o el número de clases.

labels indica que no hay nombres para los intervalos o clases, por defecto las etiquetas tienen la notación (a, b].

include.lowest indica que si un X[i] es igual al corte inferior (0 superior, para right=FALSE) el valor debe ser incluido.

right indica que sí el intervalo debe ser cerrado a la derecha y abierto a la izquierda, o viceversa.

dig.lab es un entero el cual es usado cuando las etiquetas no son dadas, determina el número de dígitos usado en el formato de números de cortes.

h <- hist(X, breaks=c(limites[1]-a, limites, limites[k+1]+a), freq = TRUE, probability = FALSE,
include.lowest = FALSE,right = TRUE, main = "Histograma de frecuencias",
col="lightyellow", lty=1, border="purple", xlab=" Notas de aspirantes", ylab="Frecuencia (fi)",
axes=TRUE, labels=FALSE)
text(h$mids, h$density, h$counts, adj=c(0.5, -0.5), col="red")
rug(jitter(X)) # adiciona marcas de los datos

# h es un objeto del tipo lista que contiene atributos del histograma
is.list(h); h 
[1] TRUE
$breaks
[1] 1.5 2.3 3.0 3.8 4.5 5.3 6.0 6.7

$counts
[1] 0 3 4 4 3 5 1

$density
[1] 0.000 0.202 0.270 0.270 0.202 0.337 0.067

$mids
[1] 1.9 2.7 3.4 4.1 4.9 5.6 6.4

$xname
[1] "X"

$equidist
[1] TRUE

attr(,"class")
[1] "histogram"