install.packages("readxl")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(readxl)

Función Completa

stat_tab1 <- function(data) {
  res <- list()
  
  # Verificar si el input es una tabla de contingencia o dos factores
  if (is.table(data)) {
    # Si es una tabla de contingencia, se usa directamente
    tdata <- data
  } else if (is.data.frame(data) && ncol(data) == 2) {
    # Si son dos columnas (factores), creamos la tabla de contingencia
    tdata <- table(data[, 1], data[, 2])
  } else {
    stop("El argumento 'data' debe ser una tabla o un data.frame con dos columnas")
  }
  
  # Datos                
  nr <- dim(tdata)[1]  # Número de filas
  nc <- dim(tdata)[2]  # Número de columnas
  n <- sum(tdata)      # Total de unidades
  
  # Totales marginales
  tr <- margin.table(tdata, 1)  # Totales marginales de fila
  tc <- margin.table(tdata, 2)  # Totales marginales de columna
  tcdata <- addmargins(tdata)   # Añadiendo los totales
  
  # Ajustar nombres de filas y columnas
  colnames(tcdata)[nc+1] <- "Marginal"  # Cambiar a "Marginal"
  rownames(tcdata)[nr+1] <- "Marginal"  # Cambiar a "Marginal"
  res$Table <- tcdata
  
  # Tabla de frecuencias
  ptdata <- tcdata / n  # Tabla de frecuencias
  res$Frequencies <- round(ptdata, 3)
  
  # Tabla sin márgenes
  pdata <- ptdata[1:nr, 1:nc]  # Sin márgenes
  pr <- ptdata[1:nr, nc+1]     # Margen de filas (Totales por filas)
  pc <- ptdata[nr+1, 1:nc]     # Margen de columnas (Totales por columnas)
  
  # Perfiles de filas
  prdata <- prop.table(tdata, 1)  # Perfiles de fila
  prfr <- rbind(prdata, pc)       # Añadiendo perfil marginal
  prfr <- cbind(prfr, apply(prfr, 1, sum))
  rownames(prfr)[nr+1] <- "Marginal"
  colnames(prfr)[nc+1] <- "Marginal"
  res$row.profiles <- round(prfr, 3)
  
  # Perfiles de columnas
  pcdata <- prop.table(tdata, 2)  # Perfiles de columna
  prfc <- cbind(pcdata, pr)       # Añadiendo perfil marginal
  prfc <- rbind(prfc, apply(prfc, 2, sum))
  rownames(prfc)[nr+1] <- "Marginal"
  colnames(prfc)[nc+1] <- "Marginal"
  res$col.profiles <- round(prfc, 3)
  
  # Desvíos a la independencia
  exdata <- pr %*% t(pc)  # Tabla de valores esperados
  pexdata <- addmargins(exdata)  # Totales ajustados
  colnames(pexdata)[nc+1] <- "Marginal"
  rownames(pexdata)[nr+1] <- "Marginal"
  res$exp.frequencies <- round(pexdata, 3)
  
  despdata <- (pdata - exdata)  # Desviaciones
  res$dev.frequencies <- round(despdata, 3)
  dedata <- despdata * n  # Desviaciones absolutas
  res$dev.values <- round(dedata, 3)
  
  # Entropías
  entr <- -sum(pr * log(pr, 2))  # Entropía de filas
  entrr <- entr / log(nr, 2)     # Entropía relativa filas
  entc <- -sum(pc * log(pc, 2))  # Entropía de columnas
  entcr <- entc / log(nc, 2)     # Entropía relativa columnas
  entt <- -sum(pdata * log(pdata, 2))  # Entropía conjunta
  enttr <- entt / log(nr * nc, 2)      # Entropía relativa conjunta
  entexp <- -sum(exdata * log(exdata, 2))  # Entropía esperada
  entexpr <- entexp / log(nr * nc, 2)      # Entropía relativa esperada
  
  # Información mutua y estadística G²
  infm <- entr + entc - entt  # Información mutua
  G2 <- 2 * n * infm * log(2)  # g²
  entconr <- entr - infm
  entconc <- entc - infm
  
  # Tabla de entropías
  entropias <- rbind(c(entr, entrr), c(entc, entcr), c(entt, enttr), c(entexp, entexpr))
  rownames(entropias) <- c("filas", "columnas", "conjunta", "esperada")
  colnames(entropias) <- c("entropía", "relativa")
  res$Entropies <- round(entropias, 5)
  
  # Entropías condicionadas
  econ <- c(entconr, entconc)
  names(econ) <- c("fila|columnas", "columna|filas")
  res$Cond.entropies <- round(econ, 5)
  
  info <- c(infm, G2)
  names(info) <- c("mutual_information", "G² statistics")
  res$Information <- round(info, 5)
  
  # Estadísticas chi-cuadrado
  phi <- sum((pdata - exdata)^2 / exdata)  # phi cuadrado
  chi <- n * phi                           # chi cuadrado
  df <- (nr - 1) * (nc - 1)                # Grados de libertad
  pearson <- sqrt(chi / (n + chi))         # Pearson
  tchuprow <- sqrt(chi / (n * sqrt(df)))   # T de Tchuprow
  cramer <- sqrt(phi / (min(nr - 1, nc - 1)))  # phi de Cramer
  
  # Tabla de estadísticas chi-cuadrado
  chist <- rbind(phi, chi, df, pearson, tchuprow, cramer)
  rownames(chist) <- c("phi-cuadrado", "chi-cuadrado", "grados de libertad", 
                       "C de Pearson", "T de Tchuprow", "phi de Cramer")
  colnames(chist) <- "estadísticas"
  res$Phi_stats <- round(chist, 5)
  
  ### PRIMER GRÁFICO: Filas condicionadas por columnas ###
  max_prfr <- max(prfr, na.rm = TRUE)
  if (!is.finite(max_prfr)) {
    max_prfr <- 1  # Valor por defecto si max(prfr) no es finito
  }
  
  plot(1:nc, prfr[nr+1, 1:nc], ylim = c(0, max_prfr + 0.05), type = "n", xaxt = "n",
       xlab = "Columna (Condicionada)", ylab = "Frecuencias", 
       main = "Filas condicionadas por Columnas")
  
  axis(1, at = 1:nc, labels = colnames(prfr)[1:nc])
  
  for (i in 1:nr) {
    lines(1:nc, prfr[i, 1:nc], col = i)  # Añadir líneas dinámicamente
  }
  lines(1:nc, prfr[nr+1, 1:nc], col = "red")  # Línea marginal
  
  # Leyenda actualizada sin duplicar "Marginal"
  legend("topright", legend = rownames(prfr)[1:(nr+1)], lty = 1, cex = 0.6, y.intersp = 0.7, col = c(1:nr, "red"))
  
  ### SEGUNDO GRÁFICO: Columnas condicionadas por filas ###
  max_prfc <- max(prfc, na.rm = TRUE)
  if (!is.finite(max_prfc)) {
    max_prfc <- 1  # Valor por defecto si max(prfc) no es finito
  }
  
  plot(1:nr, prfc[1:nr,nc+1], ylim = c(0, max_prfc + 0.05), type = "n", xaxt = "n",
       xlab = "Fila (Condicionada)", ylab = "Frecuencias", 
       main = "Columnas condicionadas por Filas")
  
  axis(1, at = 1:nr, labels = rownames(prfc)[1:nr])  # Eje horizontal
  
  for (i in 1:nc) {
    lines(1:nr, prfc[1:nr, i], col = i)
  }
  
  # Línea marginal de color azul (representa los totales por filas)
  lines(1:nr, prfc[1:nr, nc+1], col = "blue")
  
  # Leyenda actualizada sin duplicar "Marginal"
  legend("topright", legend = c(colnames(prfc)[1:nc], "Marginal"), lty = 1, col = c(1:nc, "blue"), cex = 0.6, y.intersp = 0.7)
  
  return(res)
}

Snee

snee=read.csv("Snee.csv")
head(snee)
##   Color_Ojos Color_Pelo
## 1          1          1
## 2          1          1
## 3          1          1
## 4          1          1
## 5          1          1
## 6          1          1
snee$Color_Ojos          <- factor(snee$Color_Ojos,                             # factor y etiquetas de la primera variable
                                   levels = c(1,2,3,4),
                                   labels = c("Oscuros","Pardos",
                                              "Verdes","Azules"),ordered=TRUE) 
snee$Color_Pelo          <- factor(snee$Color_Pelo,                             # factor y etiquetas de la segunda variable
                                   levels = c(1,2,3,4),
                                   labels = c("Negro","Castano",
                                              "Rojo","Rubio"),ordered=TRUE) 
stat_tab1(snee)

## $Table
##           
##            Negro Castano Rojo Rubio Marginal
##   Oscuros     68     119   26     7      220
##   Pardos      15      54   14    10       93
##   Verdes       5      29   14    16       64
##   Azules      20      84   17    94      215
##   Marginal   108     286   71   127      592
## 
## $Frequencies
##           
##            Negro Castano  Rojo Rubio Marginal
##   Oscuros  0.115   0.201 0.044 0.012    0.372
##   Pardos   0.025   0.091 0.024 0.017    0.157
##   Verdes   0.008   0.049 0.024 0.027    0.108
##   Azules   0.034   0.142 0.029 0.159    0.363
##   Marginal 0.182   0.483 0.120 0.215    1.000
## 
## $row.profiles
##          Negro Castano  Rojo Rubio Marginal
## Oscuros  0.309   0.541 0.118 0.032        1
## Pardos   0.161   0.581 0.151 0.108        1
## Verdes   0.078   0.453 0.219 0.250        1
## Azules   0.093   0.391 0.079 0.437        1
## Marginal 0.182   0.483 0.120 0.215        1
## 
## $col.profiles
##          Negro Castano  Rojo Rubio Marginal
## Oscuros  0.630   0.416 0.366 0.055    0.372
## Pardos   0.139   0.189 0.197 0.079    0.157
## Verdes   0.046   0.101 0.197 0.126    0.108
## Azules   0.185   0.294 0.239 0.740    0.363
## Marginal 1.000   1.000 1.000 1.000    1.000
## 
## $exp.frequencies
##          Negro Castano  Rojo Rubio Marginal
##          0.068   0.180 0.045 0.080    0.372
##          0.029   0.076 0.019 0.034    0.157
##          0.020   0.052 0.013 0.023    0.108
##          0.066   0.175 0.044 0.078    0.363
## Marginal 0.182   0.483 0.120 0.215    1.000
## 
## $dev.frequencies
##          
##            Negro Castano   Rojo  Rubio
##   Oscuros  0.047   0.021 -0.001 -0.068
##   Pardos  -0.003   0.015  0.005 -0.017
##   Verdes  -0.011  -0.003  0.011  0.004
##   Azules  -0.032  -0.034 -0.015  0.081
## 
## $dev.values
##          
##             Negro Castano    Rojo   Rubio
##   Oscuros  27.865  12.716  -0.385 -40.196
##   Pardos   -1.966   9.071   2.846  -9.951
##   Verdes   -6.676  -1.919   6.324   2.270
##   Azules  -19.223 -19.868  -8.785  47.877
## 
## $Entropies
##          entropía relativa
## filas     1.82786  0.91393
## columnas  1.79823  0.89911
## conjunta  3.44765  0.86191
## esperada  3.62609  0.90652
## 
## $Cond.entropies
## fila|columnas columna|filas 
##       1.64942       1.61979 
## 
## $Information
## mutual_information      G² statistics 
##            0.17844          146.44358 
## 
## $Phi_stats
##                    estadísticas
## phi-cuadrado            0.23360
## chi-cuadrado          138.28984
## grados de libertad      9.00000
## C de Pearson            0.43516
## T de Tchuprow           0.27904
## phi de Cramer           0.27904

En los gráficos, podemos ver que las líneas de las frecuencias marginales para los colores de pelo (condicionados por color de ojos) son bastante diferenciadas. Esto sugiere que el color de ojos influye en la distribución de los colores de pelo y viceversa.

Las líneas no se superponen mucho, lo que refuerza la conclusión de una alta información mutua. El gráfico visualiza una clara asociación entre las variables

Piel Escuero

piel = read.csv("Pielescuero_car.csv")
head(piel)
##   Exportacion Tamano Financiacion Zona Actividad
## 1       siexp  11-20        nopre   NE      MeAl
## 2       noexp  11-20        nopre   CE      Ropa
## 3       siexp  11-20        nopre   NE      Ropa
## 4       siexp  11-20        nopre   NE      Ropa
## 5       siexp  11-20        nopre   NO      Ropa
## 6       siexp  11-20        nopre   CE      Ropa

Actividad y Zona Geográfica de Piel Escuero

piel_act_zon = piel[c(1,5)]
table(piel_act_zon$Exportacion)
## 
## noexp siexp 
##    44   129
table(piel_act_zon$Actividad)
## 
## MeAl PeCu Ropa Zapa 
##   11   46   54   62
stat_tab1(piel_act_zon)

## $Table
##           
##            MeAl PeCu Ropa Zapa Marginal
##   noexp       7   12   18    7       44
##   siexp       4   34   36   55      129
##   Marginal   11   46   54   62      173
## 
## $Frequencies
##           
##             MeAl  PeCu  Ropa  Zapa Marginal
##   noexp    0.040 0.069 0.104 0.040    0.254
##   siexp    0.023 0.197 0.208 0.318    0.746
##   Marginal 0.064 0.266 0.312 0.358    1.000
## 
## $row.profiles
##           MeAl  PeCu  Ropa  Zapa Marginal
## noexp    0.159 0.273 0.409 0.159        1
## siexp    0.031 0.264 0.279 0.426        1
## Marginal 0.064 0.266 0.312 0.358        1
## 
## $col.profiles
##           MeAl  PeCu  Ropa  Zapa Marginal
## noexp    0.636 0.261 0.333 0.113    0.254
## siexp    0.364 0.739 0.667 0.887    0.746
## Marginal 1.000 1.000 1.000 1.000    1.000
## 
## $exp.frequencies
##           MeAl  PeCu  Ropa  Zapa Marginal
##          0.016 0.068 0.079 0.091    0.254
##          0.047 0.198 0.233 0.267    0.746
## Marginal 0.064 0.266 0.312 0.358    1.000
## 
## $dev.frequencies
##        
##           MeAl   PeCu   Ropa   Zapa
##   noexp  0.024  0.002  0.025 -0.051
##   siexp -0.024 -0.002 -0.025  0.051
## 
## $dev.values
##        
##           MeAl   PeCu   Ropa   Zapa
##   noexp  4.202  0.301  4.266 -8.769
##   siexp -4.202 -0.301 -4.266  8.769
## 
## $Entropies
##          entropía relativa
## filas     0.81808  0.81808
## columnas  1.81577  0.90789
## conjunta  2.56499  0.85500
## esperada  2.63385  0.87795
## 
## $Cond.entropies
## fila|columnas columna|filas 
##       0.74922       1.74692 
## 
## $Information
## mutual_information      G² statistics 
##            0.06886           16.51447 
## 
## $Phi_stats
##                    estadísticas
## phi-cuadrado            0.09706
## chi-cuadrado           16.79183
## grados de libertad      3.00000
## C de Pearson            0.29745
## T de Tchuprow           0.23673
## phi de Cramer           0.31155

Las líneas en los gráficos son más cercanas entre sí, lo que indica menos diferenciación en las frecuencias condicionadas. Esto sugiere que las zonas geográficas tienen una influencia limitada sobre la actividad de las empresas

Aunque hay algunas variaciones, los gráficos muestran que las categorías no están tan claramente diferenciadas como en el caso de Snee

Gruppi_sanguigni

sangre = read.csv("Gruppi_sanguigni.csv",row.names = 1)
sangre = as.table(as.matrix(sangre))
sangre
##        O    A    B   AB
## RH+ 1885 1613  472  167
## RH-  412  333  103   34
t(sangre)
##     RH+  RH-
## O  1885  412
## A  1613  333
## B   472  103
## AB  167   34
stat_tab1(sangre)

## $Table
##             O    A    B   AB Marginal
## RH+      1885 1613  472  167     4137
## RH-       412  333  103   34      882
## Marginal 2297 1946  575  201     5019
## 
## $Frequencies
##              O     A     B    AB Marginal
## RH+      0.376 0.321 0.094 0.033    0.824
## RH-      0.082 0.066 0.021 0.007    0.176
## Marginal 0.458 0.388 0.115 0.040    1.000
## 
## $row.profiles
##              O     A     B    AB Marginal
## RH+      0.456 0.390 0.114 0.040        1
## RH-      0.467 0.378 0.117 0.039        1
## Marginal 0.458 0.388 0.115 0.040        1
## 
## $col.profiles
##              O     A     B    AB Marginal
## RH+      0.821 0.829 0.821 0.831    0.824
## RH-      0.179 0.171 0.179 0.169    0.176
## Marginal 1.000 1.000 1.000 1.000    1.000
## 
## $exp.frequencies
##              O     A     B    AB Marginal
##          0.377 0.320 0.094 0.033    0.824
##          0.080 0.068 0.020 0.007    0.176
## Marginal 0.458 0.388 0.115 0.040    1.000
## 
## $dev.frequencies
##          O      A      B     AB
## RH+ -0.002  0.002  0.000  0.000
## RH-  0.002 -0.002  0.000  0.000
## 
## $dev.values
##          O      A      B     AB
## RH+ -8.343  8.975 -1.954  1.322
## RH-  8.343 -8.975  1.954 -1.322
## 
## $Entropies
##          entropía relativa
## filas     0.67065  0.67065
## columnas  1.59007  0.79503
## conjunta  2.26063  0.75354
## esperada  2.26072  0.75357
## 
## $Cond.entropies
## fila|columnas columna|filas 
##       0.67056       1.58998 
## 
## $Information
## mutual_information      G² statistics 
##            0.00009            0.60209 
## 
## $Phi_stats
##                    estadísticas
## phi-cuadrado            0.00012
## chi-cuadrado            0.60085
## grados de libertad      3.00000
## C de Pearson            0.01094
## T de Tchuprow           0.00831
## phi de Cramer           0.01094

Las líneas en los gráficos están prácticamente superpuestas, mostrando que no hay mucha variación entre los grupos de sangre en función del factor RH.

Tanto los gráficos de filas como los de columnas muestran que las distribuciones son casi idénticas entre RH+ y RH-, confirmando la falta de asociación entre las variables

Blood Pressure

presion <- read_excel("Blood-pressure.xlsx", sheet = 1)
presion <- data.frame(presion)
head(presion)
##   Blood.pressure      Age
## 1            Low Under_30
## 2            Low Under_30
## 3            Low Under_30
## 4            Low Under_30
## 5            Low Under_30
## 6            Low Under_30
stat_tab1(presion)

## $Table
##           
##            30-49 Over_50 Under_30 Marginal
##   High        51      73       23      147
##   Low         37      31       27       95
##   Normal      91      93       48      232
##   Marginal   179     197       98      474
## 
## $Frequencies
##           
##            30-49 Over_50 Under_30 Marginal
##   High     0.108   0.154    0.049    0.310
##   Low      0.078   0.065    0.057    0.200
##   Normal   0.192   0.196    0.101    0.489
##   Marginal 0.378   0.416    0.207    1.000
## 
## $row.profiles
##          30-49 Over_50 Under_30 Marginal
## High     0.347   0.497    0.156        1
## Low      0.389   0.326    0.284        1
## Normal   0.392   0.401    0.207        1
## Marginal 0.378   0.416    0.207        1
## 
## $col.profiles
##          30-49 Over_50 Under_30 Marginal
## High     0.285   0.371    0.235    0.310
## Low      0.207   0.157    0.276    0.200
## Normal   0.508   0.472    0.490    0.489
## Marginal 1.000   1.000    1.000    1.000
## 
## $exp.frequencies
##          30-49 Over_50 Under_30 Marginal
##          0.117   0.129    0.064    0.310
##          0.076   0.083    0.041    0.200
##          0.185   0.203    0.101    0.489
## Marginal 0.378   0.416    0.207    1.000
## 
## $dev.frequencies
##         
##           30-49 Over_50 Under_30
##   High   -0.010   0.025   -0.016
##   Low     0.002  -0.018    0.016
##   Normal  0.007  -0.007    0.000
## 
## $dev.values
##         
##           30-49 Over_50 Under_30
##   High   -4.513  11.905   -7.392
##   Low     1.124  -8.483    7.359
##   Normal  3.388  -3.422    0.034
## 
## $Entropies
##          entropía relativa
## filas     1.49309  0.94203
## columnas  1.52716  0.96353
## conjunta  3.00618  0.94834
## esperada  3.02025  0.95278
## 
## $Cond.entropies
## fila|columnas columna|filas 
##       1.47902       1.51309 
## 
## $Information
## mutual_information      G² statistics 
##            0.01407            9.24618 
## 
## $Phi_stats
##                    estadísticas
## phi-cuadrado            0.01973
## chi-cuadrado            9.35205
## grados de libertad      4.00000
## C de Pearson            0.13910
## T de Tchuprow           0.09932
## phi de Cramer           0.09932

Las líneas en los gráficos están bastante juntas, lo que indica poca diferencia en la distribución de la presión arterial en función de la edad.

Aunque hay algunas pequeñas variaciones, los gráficos muestran que no hay una gran diferencia entre las categorías, lo que coincide con el bajo valor de información mutua

Pasteles_w

pasteles = read.csv("Pasteles_w.csv")
pasteles = pasteles[c("Juicio_pastel","Juicio_crema")]
head(pasteles)
##   Juicio_pastel Juicio_crema
## 1    P_discreto   C_discreto
## 2       P_bueno      C_bueno
## 3       P_bueno   C_discreto
## 4   P_muy bueno      C_bueno
## 5    P_discreto   C_discreto
## 6   P_muy bueno  C_muy bueno
stat_tab1(pasteles)

## $Table
##              
##               C_bueno C_discreto C_excelente C_muy bueno C_muy_pobre C_pobre
##   P_bueno         129         61           3          21           1       1
##   P_discreto       22         32           0           1           0       7
##   P_excelente       6          0          16           8           0       0
##   P_muy bueno      45          2          10          38           0       0
##   P_muy_pobre       0          0           0           0           1       2
##   P_pobre           1          2           0           0           3      14
##   P_regular         1          8           1           1           2      15
##   Marginal        204        105          30          69           7      39
##              
##               C_regular Marginal
##   P_bueno             9      225
##   P_discreto         32       94
##   P_excelente         0       30
##   P_muy bueno         1       96
##   P_muy_pobre         0        3
##   P_pobre             1       21
##   P_regular          21       49
##   Marginal           64      518
## 
## $Frequencies
##              
##               C_bueno C_discreto C_excelente C_muy bueno C_muy_pobre C_pobre
##   P_bueno       0.249      0.118       0.006       0.041       0.002   0.002
##   P_discreto    0.042      0.062       0.000       0.002       0.000   0.014
##   P_excelente   0.012      0.000       0.031       0.015       0.000   0.000
##   P_muy bueno   0.087      0.004       0.019       0.073       0.000   0.000
##   P_muy_pobre   0.000      0.000       0.000       0.000       0.002   0.004
##   P_pobre       0.002      0.004       0.000       0.000       0.006   0.027
##   P_regular     0.002      0.015       0.002       0.002       0.004   0.029
##   Marginal      0.394      0.203       0.058       0.133       0.014   0.075
##              
##               C_regular Marginal
##   P_bueno         0.017    0.434
##   P_discreto      0.062    0.181
##   P_excelente     0.000    0.058
##   P_muy bueno     0.002    0.185
##   P_muy_pobre     0.000    0.006
##   P_pobre         0.002    0.041
##   P_regular       0.041    0.095
##   Marginal        0.124    1.000
## 
## $row.profiles
##             C_bueno C_discreto C_excelente C_muy bueno C_muy_pobre C_pobre
## P_bueno       0.573      0.271       0.013       0.093       0.004   0.004
## P_discreto    0.234      0.340       0.000       0.011       0.000   0.074
## P_excelente   0.200      0.000       0.533       0.267       0.000   0.000
## P_muy bueno   0.469      0.021       0.104       0.396       0.000   0.000
## P_muy_pobre   0.000      0.000       0.000       0.000       0.333   0.667
## P_pobre       0.048      0.095       0.000       0.000       0.143   0.667
## P_regular     0.020      0.163       0.020       0.020       0.041   0.306
## Marginal      0.394      0.203       0.058       0.133       0.014   0.075
##             C_regular Marginal
## P_bueno         0.040        1
## P_discreto      0.340        1
## P_excelente     0.000        1
## P_muy bueno     0.010        1
## P_muy_pobre     0.000        1
## P_pobre         0.048        1
## P_regular       0.429        1
## Marginal        0.124        1
## 
## $col.profiles
##             C_bueno C_discreto C_excelente C_muy bueno C_muy_pobre C_pobre
## P_bueno       0.632      0.581       0.100       0.304       0.143   0.026
## P_discreto    0.108      0.305       0.000       0.014       0.000   0.179
## P_excelente   0.029      0.000       0.533       0.116       0.000   0.000
## P_muy bueno   0.221      0.019       0.333       0.551       0.000   0.000
## P_muy_pobre   0.000      0.000       0.000       0.000       0.143   0.051
## P_pobre       0.005      0.019       0.000       0.000       0.429   0.359
## P_regular     0.005      0.076       0.033       0.014       0.286   0.385
## Marginal      1.000      1.000       1.000       1.000       1.000   1.000
##             C_regular Marginal
## P_bueno         0.141    0.434
## P_discreto      0.500    0.181
## P_excelente     0.000    0.058
## P_muy bueno     0.016    0.185
## P_muy_pobre     0.000    0.006
## P_pobre         0.016    0.041
## P_regular       0.328    0.095
## Marginal        1.000    1.000
## 
## $exp.frequencies
##          C_bueno C_discreto C_excelente C_muy bueno C_muy_pobre C_pobre
##            0.171      0.088       0.025       0.058       0.006   0.033
##            0.071      0.037       0.011       0.024       0.002   0.014
##            0.023      0.012       0.003       0.008       0.001   0.004
##            0.073      0.038       0.011       0.025       0.003   0.014
##            0.002      0.001       0.000       0.001       0.000   0.000
##            0.016      0.008       0.002       0.005       0.001   0.003
##            0.037      0.019       0.005       0.013       0.001   0.007
## Marginal   0.394      0.203       0.058       0.133       0.014   0.075
##          C_regular Marginal
##              0.054    0.434
##              0.022    0.181
##              0.007    0.058
##              0.023    0.185
##              0.001    0.006
##              0.005    0.041
##              0.012    0.095
## Marginal     0.124    1.000
## 
## $dev.frequencies
##              
##               C_bueno C_discreto C_excelente C_muy bueno C_muy_pobre C_pobre
##   P_bueno       0.078      0.030      -0.019      -0.017      -0.004  -0.031
##   P_discreto   -0.029      0.025      -0.011      -0.022      -0.002   0.000
##   P_excelente  -0.011     -0.012       0.028       0.008      -0.001  -0.004
##   P_muy bueno   0.014     -0.034       0.009       0.049      -0.003  -0.014
##   P_muy_pobre  -0.002     -0.001       0.000      -0.001       0.002   0.003
##   P_pobre      -0.014     -0.004      -0.002      -0.005       0.005   0.024
##   P_regular    -0.035     -0.004      -0.004      -0.011       0.003   0.022
##              
##               C_regular
##   P_bueno        -0.036
##   P_discreto      0.039
##   P_excelente    -0.007
##   P_muy bueno    -0.021
##   P_muy_pobre    -0.001
##   P_pobre        -0.003
##   P_regular       0.029
## 
## $dev.values
##              
##               C_bueno C_discreto C_excelente C_muy bueno C_muy_pobre C_pobre
##   P_bueno      40.390     15.392     -10.031      -8.971      -2.041 -15.940
##   P_discreto  -15.019     12.946      -5.444     -11.521      -1.270  -0.077
##   P_excelente  -5.815     -6.081      14.263       4.004      -0.405  -2.259
##   P_muy bueno   7.193    -17.459       4.440      25.212      -1.297  -7.228
##   P_muy_pobre  -1.181     -0.608      -0.174      -0.400       0.959   1.774
##   P_pobre      -7.270     -2.257      -1.216      -2.797       2.716  12.419
##   P_regular   -18.297     -1.932      -1.838      -5.527       1.338  11.311
##              
##               C_regular
##   P_bueno       -18.799
##   P_discreto     20.386
##   P_excelente    -3.707
##   P_muy bueno   -10.861
##   P_muy_pobre    -0.371
##   P_pobre        -1.595
##   P_regular      14.946
## 
## $Entropies
##          entropía relativa
## filas     2.21042  0.78737
## columnas  2.35919  0.84036
## conjunta      NaN      NaN
## esperada  4.56961  0.81386
## 
## $Cond.entropies
## fila|columnas columna|filas 
##           NaN           NaN 
## 
## $Information
## mutual_information      G² statistics 
##                NaN                NaN 
## 
## $Phi_stats
##                    estadísticas
## phi-cuadrado            1.21549
## chi-cuadrado          629.62361
## grados de libertad     36.00000
## C de Pearson            0.74070
## T de Tchuprow           0.45009
## phi de Cramer           0.45009

Los gráficos de frecuencias condicionadas muestran grandes diferencias entre las categorías, con líneas que varían significativamente de una categoría a otra

Las diferencias visibles en las líneas refuerzan la idea de que hay una fuerte asociación entre la calidad y la preferencia de los pasteles

Comparaciones de Estadísticas y Conclusiones

  1. Snee (Color de ojos y pelo):

Interpretación: Esta tabla tiene un valor de información mutua relativamente alto, lo que sugiere una interdependencia significativa entre las variables. El valor de Chi-cuadrado también es alto, lo cual refuerza esta relación. Phi de Cramer y C de Pearson están en niveles intermedios, indicando una asociación moderada entre las variables.

  1. Piel Escuero (Actividad y Zona Geográfica):

Interpretación: La información mutua es más baja en comparación con Snee, lo que indica que la asociación entre actividad y zona geográfica es menor. Aunque el valor de Chi-cuadrado es más bajo, los grados de libertad también son menores, lo que hace que la relación sea algo significativa. Phi de Cramer y C de Pearson son similares a los de la tabla Snee.

  1. Gruppi_sanguigni (Tipos de sangre y factor RH):

Interpretación: Este es el caso con menos información mutua y el menor valor de Chi-cuadrado, lo que indica casi ninguna relación entre el tipo de sangre y el factor RH. Los valores de Phi de Cramer y C de Pearson son extremadamente bajos, confirmando la independencia entre las variables.

  1. Blood Pressure (Presión arterial y edad):

Interpretación: Hay algo de dependencia entre la presión arterial y la edad, aunque los valores de información mutua y Chi-cuadrado son bajos. La asociación es débil, como lo indican los valores bajos de Phi de Cramer y C de Pearson.

  1. Pasteles_w (Calidad y Preferencia de pasteles):

Valores nulos en C_excelente con P_discreto, C_muy_pobre con P_discreto,C_discreto con P_excelente y así en las demás relaciones de las variables auxiliares (etiquetas). Cuando se realiza el logaritmo de las proporciones en estos casos nulos, nos dará como resultado una indeterminación, con lo que no se podrá calcular estos resultados.

Interpretación: Aunque la información mutua no se pudo calculo debido a lo expuesto anteriormente, el valor extremadamente alto de Chi-cuadrado indica una fuerte asociación entre las variables. Phi de Cramer y C de Pearson también son los más altos entre todas las tablas, sugiriendo una fuerte relación entre la calidad percibida y la preferencia de los pasteles.

Conclusión:

  1. Mayor información mutua: Snee (Color de ojos y pelo) con una información mutua de 0.17844. Esto indica que el color de ojos y el color de pelo están significativamente asociados

  2. Menor información mutua: Gruppi_sanguigni (Tipos de sangre y factor RH) con una información mutua de 0.00009. Aquí, las variables son prácticamente independientes.

  3. Relación entre información mutua y Chi-cuadrado:

En general, se observa que las tablas con mayor información mutua tienden a tener un mayor valor de Chi-cuadrado. Esto se debe a que ambas métricas reflejan la fuerza de la asociación entre las variables:

Sin embargo, es importante tener en cuenta los grados de libertad al interpretar estos valores, ya que el Chi-cuadrado depende del tamaño de la tabla o número de variables. Por lo que no sería correcto incidir en esta comparación de forma directa a través del Chi-cuadrado. Las estadísticas normalizadas como Phi de Cramer o C de Pearson permiten comparaciones más justas entre tablas de diferentes tamaños.