Tenemos 4 personas, dos hombre y dos mujeres. Queremos formar dos grupos (T y C). Cuántas maneras diferentes hay de formar esos grupos?
# Definir los elementos de cada tipo
tipo_A <- c("H1", "H2")
tipo_B <- c("M1", "M2")
# Unir todos los elementos
elementos1 <- c(tipo_A, tipo_B)
# Obtener todas las combinaciones posibles de 2 elementos (grupo Tratamiento)
combinaciones1 <- combn(elementos1, 2)
# Convertir combinaciones a data frame
df_combinaciones1 <- as.data.frame(t(combinaciones1))
colnames(df_combinaciones1) <- c("Tratamiento_1", "Tratamiento_2")
# Agregar columnas para el grupo Control
df_combinaciones1$Control <- apply(df_combinaciones1, 1, function(trat) {
control <- setdiff(elementos1, trat) # los que no están en tratamiento
paste(control, collapse = ", ")
})
# Agregar columna de Tratamiento como texto también
df_combinaciones1$Tratamiento <- apply(df_combinaciones1[, c("Tratamiento_1", "Tratamiento_2")], 1, function(x) {
paste(x, collapse = ", ")
})
# Reordenar columnas para visualización clara
df_resultado <- df_combinaciones1[, c("Tratamiento", "Control")]
# Mostrar la tabla
print(df_resultado)
## Tratamiento Control
## 1 H1, H2 M1, M2
## 2 H1, M1 H2, M2
## 3 H1, M2 H2, M1
## 4 H2, M1 H1, M2
## 5 H2, M2 H1, M1
## 6 M1, M2 H1, H2
Cuántas de esas combinaciones estarían balanceadas?
# Contar cuántos elementos de tipo A hay en el tratamiento
df_combinaciones1$Count_A <- apply(df_combinaciones1[, c("Tratamiento_1", "Tratamiento_2")], 1, function(x) {
sum(x %in% tipo_A)
})
# Evaluar si la combinación es Balanceada o Sesgada
df_combinaciones1$Balance <- ifelse(df_combinaciones1$Count_A == 1, "Balanceado", "Sesgado")
# Seleccionar columnas relevantes para mostrar
df_resultado <- df_combinaciones1[, c("Tratamiento", "Control", "Count_A", "Balance")]
# Mostrar la tabla
print(df_resultado)
## Tratamiento Control Count_A Balance
## 1 H1, H2 M1, M2 2 Sesgado
## 2 H1, M1 H2, M2 1 Balanceado
## 3 H1, M2 H2, M1 1 Balanceado
## 4 H2, M1 H1, M2 1 Balanceado
## 5 H2, M2 H1, M1 1 Balanceado
## 6 M1, M2 H1, H2 0 Sesgado
Ahora, tengo 8 personas, 4 de cada sexo.
# Definir elementos de cada tipo
tipo_A <- c("A1", "A2", "A3", "A4")
tipo_B <- c("B1", "B2", "B3", "B4")
# Unir todos los elementos
elementos <- c(tipo_A, tipo_B)
# Obtener todas las combinaciones posibles de 4 elementos (grupo Tratamiento)
combinaciones <- combn(elementos, 4)
# Convertir combinaciones a data frame
df_combinaciones <- as.data.frame(t(combinaciones))
# Nombrar columnas del grupo Tratamiento
colnames(df_combinaciones) <- paste0("Tratamiento_", 1:4)
# Agregar columna: grupo Tratamiento como texto
df_combinaciones$Tratamiento <- apply(df_combinaciones, 1, paste, collapse = ", ")
# Agregar columna: grupo Control (los 4 elementos restantes)
df_combinaciones$Control <- apply(df_combinaciones, 1, function(fila) {
control <- setdiff(elementos, fila)
paste(control, collapse = ", ")
})
# Contar cuántos elementos de tipo A hay en el grupo de Tratamiento
df_combinaciones$Count_A <- apply(df_combinaciones[, 1:4], 1, function(x) {
sum(x %in% tipo_A)
})
# Clasificar según el conteo de tipo A
df_combinaciones$Balance <- with(df_combinaciones, ifelse(
Count_A %in% c(0, 4), "Sesgado",
ifelse(Count_A %in% c(1, 3), "Desbalanceado", "Balanceado")
))
# Seleccionar columnas finales para mostrar
df_resultado <- df_combinaciones[, c("Tratamiento", "Control", "Count_A", "Balance")]
# Mostrar las primeras filas
print(head(df_resultado))
## Tratamiento Control Count_A Balance
## 1 A1, A2, A3, A4 B1, B2, B3, B4 4 Sesgado
## 2 A1, A2, A3, B1 A4, B2, B3, B4 3 Desbalanceado
## 3 A1, A2, A3, B2 A4, B1, B3, B4 3 Desbalanceado
## 4 A1, A2, A3, B3 A4, B1, B2, B4 3 Desbalanceado
## 5 A1, A2, A3, B4 A4, B1, B2, B3 3 Desbalanceado
## 6 A1, A2, A4, B1 A3, B2, B3, B4 3 Desbalanceado
Cómo se distribuye?
# Cargar ggplot2 si no está cargado
library(ggplot2)
# Crear tabla de frecuencia de Balance
tabla_balance <- as.data.frame(table(df_combinaciones$Balance))
colnames(tabla_balance) <- c("Balance", "Frecuencia")
# Calcular porcentaje
tabla_balance$Porcentaje <- (tabla_balance$Frecuencia / sum(tabla_balance$Frecuencia)) * 100
# Mostrar la tabla de frecuencias
print(tabla_balance)
## Balance Frecuencia Porcentaje
## 1 Balanceado 36 51.428571
## 2 Desbalanceado 32 45.714286
## 3 Sesgado 2 2.857143
# Gráfico de barras con ggplot2
ggplot(tabla_balance, aes(x = Balance, y = Porcentaje, fill = Balance)) +
geom_bar(stat = "identity", color = "black") +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")), vjust = -0.5) +
labs(title = "Distribución del Balance en el grupo Tratamiento",
x = "Tipo de Balance",
y = "Porcentaje") +
theme_minimal() +
theme(legend.position = "none")
Ahora tenemos 20 personas, 10 de cada sexo.
# Cargar librería
library(ggplot2)
# Crear los elementos
tipo_H <- paste0("H", 1:10)
tipo_M <- paste0("M", 1:10)
elementos <- c(tipo_H, tipo_M)
# Generar todas las combinaciones de 10 elementos para Tratamiento
combinaciones <- combn(elementos, 10)
# Convertir a data frame
df <- as.data.frame(t(combinaciones))
colnames(df) <- paste0("Tratamiento_", 1:10)
# Crear columna Tratamiento como texto
df$Tratamiento <- apply(df[, 1:10], 1, paste, collapse = ", ")
# Crear columna Control con los 10 elementos restantes
df$Control <- apply(df[, 1:10], 1, function(x) {
setdiff(elementos, x) |> paste(collapse = ", ")
})
# Contar cuántos del grupo H hay en el Tratamiento
df$Count_H <- apply(df[, 1:10], 1, function(x) sum(x %in% tipo_H))
Cómo se distribuye la cantidad de H en las combinaciones posibles?
# Crear tabla de frecuencia de Count_H
tabla_countH <- as.data.frame(table(df$Count_H))
colnames(tabla_countH) <- c("Count_H", "Frecuencia")
# Convertir Count_H a numérico
tabla_countH$Count_H <- as.numeric(as.character(tabla_countH$Count_H))
# Calcular porcentaje
tabla_countH$Porcentaje <- (tabla_countH$Frecuencia / sum(tabla_countH$Frecuencia)) * 100
# Mostrar la tabla
print(tabla_countH)
## Count_H Frecuencia Porcentaje
## 1 0 1 5.412544e-04
## 2 1 100 5.412544e-02
## 3 2 2025 1.096040e+00
## 4 3 14400 7.794064e+00
## 5 4 44100 2.386932e+01
## 6 5 63504 3.437182e+01
## 7 6 44100 2.386932e+01
## 8 7 14400 7.794064e+00
## 9 8 2025 1.096040e+00
## 10 9 100 5.412544e-02
## 11 10 1 5.412544e-04
# Gráfico de barras con ggplot2 para Count_H
library(ggplot2)
ggplot(tabla_countH, aes(x = as.factor(Count_H), y = Porcentaje)) +
geom_bar(stat = "identity", fill = "brown", color = "black") +
geom_text(aes(label = paste0(round(Porcentaje, 2), "%")), vjust = -0.5) +
labs(title = "Distribución del número de Hombres en el grupo Tratamiento",
x = "Cantidad de elementos H en Tratamiento",
y = "Porcentaje") +
theme_minimal()
Si tuviéramos dos atributos por cada elemento, tanto sexo (H y M) como ideología (I y D).
# Crear 20 elementos con atributos cruzados
sexo <- c(rep("H", 10), rep("M", 10))
tipo <- c(rep("D", 5), rep("I", 5), rep("D", 5), rep("I", 5))
id <- paste0(sexo, 1:10)
elementos <- paste(id, tipo, sep = "_")
# Verificación (opcional)
# data.frame(ID = elementos, Sexo = sexo, Tipo = tipo)
# Obtener todas las combinaciones posibles de 10 elementos para Tratamiento
combinaciones <- combn(elementos, 10)
# Convertir a data frame
df <- as.data.frame(t(combinaciones))
colnames(df) <- paste0("Tratamiento_", 1:10)
# Crear columna Tratamiento como texto (opcional)
df$Tratamiento <- apply(df[, 1:10], 1, paste, collapse = ", ")
# Crear columna Control
df$Control <- apply(df[, 1:10], 1, function(x) {
setdiff(elementos, x) |> paste(collapse = ", ")
})
# Función para extraer cantidad de H en el Tratamiento
contar_H <- function(x) {
sum(grepl("^H", x)) # comienza con H
}
# Función para extraer cantidad de I en el Tratamiento
contar_I <- function(x) {
sum(grepl("_I$", x)) # termina en _I
}
# Agregar columnas Count_H y Count_I
df$Count_H <- apply(df[, 1:10], 1, contar_H)
df$Count_I <- apply(df[, 1:10], 1, contar_I)
# --- Tabla de frecuencia para Count_H ---
tabla_H <- as.data.frame(table(df$Count_H))
colnames(tabla_H) <- c("Count_H", "Frecuencia")
tabla_H$Porcentaje <- (tabla_H$Frecuencia / sum(tabla_H$Frecuencia)) * 100
# --- Tabla de frecuencia para Count_I ---
tabla_I <- as.data.frame(table(df$Count_I))
colnames(tabla_I) <- c("Count_I", "Frecuencia")
tabla_I$Porcentaje <- (tabla_I$Frecuencia / sum(tabla_I$Frecuencia)) * 100
# --- Gráfico para Count_H ---
ggplot(tabla_H, aes(x = as.factor(Count_H), y = Porcentaje)) +
geom_bar(stat = "identity", fill = "lightblue", color = "black") +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")), vjust = -0.5) +
labs(title = "Distribución de elementos H en Tratamiento",
x = "Cantidad de H", y = "Porcentaje") +
theme_minimal()
# --- Gráfico para Count_I ---
ggplot(tabla_I, aes(x = as.factor(Count_I), y = Porcentaje)) +
geom_bar(stat = "identity", fill = "lightgreen", color = "black") +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")), vjust = -0.5) +
labs(title = "Distribución de elementos I en Tratamiento",
x = "Cantidad de I", y = "Porcentaje") +
theme_minimal()
Si tuviéramos dos atributos, sexo (H y M) e ideología (I, C y D) para 24 elementos.
# Cargar librería
library(ggplot2)
# Crear los 24 elementos con atributos cruzados
sexo <- c(rep("H", 12), rep("M", 12))
condicion <- rep(c("I", "C", "D"), each = 8)
id <- paste0(sexo, 1:12)
elementos <- paste(id, condicion, sep = "_")
# Generar combinaciones de 12 elementos para Tratamiento
combinaciones <- combn(elementos, 12)
# Convertir a data frame
df <- as.data.frame(t(combinaciones))
colnames(df) <- paste0("Tratamiento_", 1:12)
# Contar cuántos H y cuántos I hay en el grupo Tratamiento
contar_H <- function(x) sum(grepl("^H", x))
contar_I <- function(x) sum(grepl("_I$", x))
df$Count_H <- apply(df[, 1:12], 1, contar_H)
df$Count_I <- apply(df[, 1:12], 1, contar_I)
# --- Tabla de frecuencias para Count_H ---
tabla_H <- as.data.frame(table(df$Count_H))
colnames(tabla_H) <- c("Count_H", "Frecuencia")
tabla_H$Porcentaje <- (tabla_H$Frecuencia / sum(tabla_H$Frecuencia)) * 100
# --- Tabla de frecuencias para Count_I ---
tabla_I <- as.data.frame(table(df$Count_I))
colnames(tabla_I) <- c("Count_I", "Frecuencia")
tabla_I$Porcentaje <- (tabla_I$Frecuencia / sum(tabla_I$Frecuencia)) * 100
# --- Gráfico de barras para Count_H ---
ggplot(tabla_H, aes(x = as.factor(Count_H), y = Porcentaje)) +
geom_bar(stat = "identity", fill = "cornflowerblue", color = "black") +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")), vjust = -0.5) +
labs(title = "Distribución de elementos H en Tratamiento (n = 12)",
x = "Cantidad de H", y = "Porcentaje") +
theme_minimal()
# --- Gráfico de barras para Count_I ---
ggplot(tabla_I, aes(x = as.factor(Count_I), y = Porcentaje)) +
geom_bar(stat = "identity", fill = "mediumseagreen", color = "black") +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")), vjust = -0.5) +
labs(title = "Distribución de elementos I en Tratamiento (n = 12)",
x = "Cantidad de I", y = "Porcentaje") +
theme_minimal()
# Definir los posibles valores por taza
opciones <- c("Ok", "Falla")
# Generar todas las combinaciones posibles (2^8 = 256)
escenarios <- expand.grid(rep(list(opciones), 8))
# Nombrar las columnas como "Taza 1", "Taza 2", ..., "Taza 8"
colnames(escenarios) <- paste0("Taza ", 1:8)
# Agregar un identificador de escenario
escenarios$Escenario <- 1:nrow(escenarios)
# Contar cuántos "Ok" hay en cada escenario
escenarios$Count_Ok <- rowSums(escenarios == "Ok")
# Reordenar columnas para que el número de escenario esté al inicio
escenarios <- escenarios[, c("Escenario", paste0("Taza ", 1:8), "Count_Ok")]
# Mostrar las primeras filas
print(head(escenarios))
## Escenario Taza 1 Taza 2 Taza 3 Taza 4 Taza 5 Taza 6 Taza 7 Taza 8 Count_Ok
## 1 1 Ok Ok Ok Ok Ok Ok Ok Ok 8
## 2 2 Falla Ok Ok Ok Ok Ok Ok Ok 7
## 3 3 Ok Falla Ok Ok Ok Ok Ok Ok 7
## 4 4 Falla Falla Ok Ok Ok Ok Ok Ok 6
## 5 5 Ok Ok Falla Ok Ok Ok Ok Ok 7
## 6 6 Falla Ok Falla Ok Ok Ok Ok Ok 6
# Cargar la librería ggplot2
library(ggplot2)
# Crear la tabla de distribución de frecuencias
tabla_frecuencia <- as.data.frame(table(escenarios$Count_Ok))
# Renombrar columnas
colnames(tabla_frecuencia) <- c("Count_Ok", "Frecuencia")
# Convertir Count_Ok a numérico
tabla_frecuencia$Count_Ok <- as.numeric(as.character(tabla_frecuencia$Count_Ok))
# Calcular el porcentaje
tabla_frecuencia$Porcentaje <- (tabla_frecuencia$Frecuencia / sum(tabla_frecuencia$Frecuencia)) * 100
# Gráfico de barras con porcentaje
ggplot(tabla_frecuencia, aes(x = as.factor(Count_Ok), y = Porcentaje)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Distribución de Count_Ok",
x = "Cantidad de aciertos (Ok)",
y = "Porcentaje") +
theme_minimal() +
geom_text(aes(label = paste0(round(Porcentaje, 2), "%")), vjust = -0.5)