Análisis de clustering y clasificación usando datos simulados es un proyecto bastante amplio. A continuación, se proporciono un esquema detallado de cómo se podría estructurar este proyecto en R, utilizando diferentes técnicas de análisis de datos y aprendizaje automático. Este esquema incluirá k-Means Clustering, Hierarchical Clustering, k-Nearest Neighbors (k-NN), Support Vector Machines (SVM), Decision Trees y Random Forests.

Paso 1: Configuración Inicial

Instalar y carga los paquetes necesarios

Paso 2: Crear Datos Simulados

Conjunto de datos simulados para los análisis

set.seed(123)
n <- 100  # Número de observaciones
p <- 2    # Número de características
labels <- sample(c("Red", "Yellow"), n, replace = TRUE)
X <- matrix(rnorm(n * p), nrow = n, ncol = p)
data <- data.frame(X, Class = factor(labels))

Paso 3: k-Means Clustering

Análisis de clustering k-means

# Ajustar el modelo k-means con diferentes parámetros
km_res <- kmeans(X, centers = 3, iter.max = 25, nstart = 5)

# Colores para la visualización
colors <- c("blue", "green", "red")

# Visualizar los resultados del clustering con etiquetas originales y centroides
plot(X, col = colors[km_res$cluster], pch = 19, cex = 1.5, 
     xlab = "Característica 1", ylab = "Característica 2", 
     main = "Resultados de k-Means Clustering")
points(km_res$centers, col = colors[1:3], pch = 8, cex = 2)

# Añadir leyenda
legend("topright", legend = c("Cluster 1", "Cluster 2", "Cluster 3"), 
       col = colors, pch = 19, cex = 1)

Paso 4: Hierarchical Clustering

Análisis de clustering jerárquico

# Usar diferentes métodos de vinculación y métricas de distancia
hc_complete <- hclust(dist(X), method = "complete")
hc_average <- hclust(dist(X), method = "average")
hc_single <- hclust(dist(X), method = "single")

# Visualización del dendrograma con el método de vinculación completa
plot(hc_complete, main = "Dendrograma - Vinculación Completa", 
     sub = "", xlab = "", cex = 0.6)
rect.hclust(hc_complete, k = 2, border = "blue")

# Visualización del dendrograma con el método de vinculación promedio
plot(hc_average, main = "Dendrograma - Vinculación Promedio", 
     sub = "", xlab = "", cex = 0.6)
rect.hclust(hc_average, k = 2, border = "green")

# Visualización del dendrograma con el método de vinculación simple
plot(hc_single, main = "Dendrograma - Vinculación Simple", 
     sub = "", xlab = "", cex = 0.6)
rect.hclust(hc_single, k = 2, border = "red")

Paso 5: k-Nearest Neighbors

Aplica el algoritmo k-Nearest Neighbors:

# Añadir predicciones y etiquetas reales a los datos
knn_res <- knn(train = X, test = X, cl = labels, k = 3)
data1 <- data.frame(X, Actual = labels, Predicted = knn_res)


# visualizar cómo el algoritmo k-NN clasifica los datos:
ggplot(data1, aes(x = X1, y = X2, color = Actual, shape = Predicted)) +
  geom_point(alpha = 0.7) +
  labs(title = "k-NN Classification Results", x = "Feature 1", y = "Feature 2") +
  scale_shape_manual(values = c(15, 17)) +
  theme_minimal()

# Explorar diferentes valores de k
k_values <- c(1, 3, 5, 7)
accuracy_rates <- sapply(k_values, function(k) {
  knn_pred <- knn(train = X, test = X, cl = labels, k = k)
  mean(knn_pred == labels)
})

# Graficar la precisión en función de k
plot(k_values, accuracy_rates, type = "b", col = "blue",
     xlab = "k (Number of Neighbors)", ylab = "Accuracy",
     main = "k-NN Accuracy for Different k Values")

Paso 6: Support Vector Machines

Support Vector Machines para clasificación

data1 <- data.frame(X1 = X[,1], X2 = X[,2], Class = as.factor(labels))
# Ajustar modelos SVM con diferentes kernels
svm_linear <- svm(Class ~ ., data = data1, kernel = "linear", cost = 1)
svm_radial <- svm(Class ~ ., data = data1, kernel = "radial", gamma = 1, cost = 1)
svm_polynomial <- svm(Class ~ ., data = data1, kernel = "polynomial", degree = 3, cost = 1)

# Función para crear un grid de datos para visualización
make_grid <- function(x, n = 200) {
  grange <- apply(x, 2, range)
  x1 <- seq(from = grange[1,1], to = grange[2,1], length.out = n)
  x2 <- seq(from = grange[1,2], to = grange[2,2], length.out = n)
  expand.grid(X1 = x1, X2 = x2)
}

# Crear un grid de datos
grid <- make_grid(X)

# Predecir en el grid
grid$Class <- predict(svm_linear, newdata = grid)

# Graficar los resultados
ggplot(data1, aes(x = X1, y = X2, color = Class)) +
  geom_point() +
  geom_point(data = grid, aes(x = X1, y = X2, color = Class), alpha = 0.2) +
  labs(title = "SVM Linear Kernel", x = "Feature 1", y = "Feature 2") +
  scale_color_manual(values = c("Green" = "green", "Black" = "black")) +
  theme_minimal()

Paso 7: Decision Tree

Árbol de decisión

# Ajustar modelo de árbol de decisión con parámetros

tree_res <- rpart(Class ~ ., data = data, method = "class", 
                  control = rpart.control(minsplit = 10, cp = 0.01, maxdepth = 3))

# Instalar y cargar rpart.plot si no está instalado
#if (!require(rpart.plot)) install.packages("rpart.plot")
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.3.2
# Visualización mejorada del árbol de decisión
rpart.plot(tree_res, main = "Árbol de Decisión", extra = 104)

# Predecir clases con el árbol de decisión
data$Predicted <- predict(tree_res, type = "class")

# Gráfico de dispersión de las clasificaciones
ggplot(data, aes(x = X1, y = X2, color = Predicted)) +
  geom_point() +
  labs(title = "Clasificaciones del Árbol de Decisión", x = "Característica 1", y = "Característica 2") +
  scale_color_manual(values = c("Red" = "red", "Yellow" = "yellow")) +
  theme_minimal()

Paso 8: Random Forest

Implementa un Random Forest

# Ajustar modelo de Random Forest con parámetros adicionales
rf_res <- randomForest(Class ~ ., data = data, ntree = 500, mtry = 2)

# Visualizar la importancia de las variables
importance <- importance(rf_res)
barplot(importance, main = "Importancia de las Variables en Random Forest", 
        xlab = "Variables", ylab = "Importancia", col = "lightblue")

# Predecir clases con Random Forest
data$Predicted <- predict(rf_res, data)

# Gráfico de dispersión de las clasificaciones
library(ggplot2)
ggplot(data, aes(x = X1, y = X2, color = Predicted)) +
  geom_point() +
  labs(title = "Clasificaciones del Random Forest", x = "Característica 1", y = "Característica 2") +
  scale_color_manual(values = c("Red" = "red", "Yellow" = "yellow")) +
  theme_minimal()

Notas Importantes

Visualización y Análisis: Cada bloque de código realiza un tipo diferente de análisis y, en algunos casos, produce una visualización correspondiente.

Interpretación: Este ejemplo utiliza datos simulados y técnicas simplificadas para propósitos ilustrativos. En un escenario real, deberías ajustar los métodos y parámetros a tus datos específicos y requerimientos.

Validación: Para un análisis más robusto, considera implementar técnicas de validación como la validación cruzada.