[R-es] Crear una función para identificar residuales en una tabla de contingencia

MANUEL MORALES ORTIZ mor@|e@ @end|ng |rom u@@e@
Lun Abr 13 09:26:51 CEST 2026


Hola, muchas gracias por responder.  La idea es crear una función que reproduzca el procedimiento descrito por Bakeman & Quera (1995).  Analizan tablas de contingencia procedentes de secuencias de conducta donde suelen  aparecer residuales espurios. Con objeto de identificar solo los residuales significativos utilizan un procedimiento que consiste en evaluar globalmente la tabla de contingencia y si se rechaza la hipótesis de independencia identificar el mayor residual significativo y convertirlo en cero estructural. Se volvería a realizar un nuevo análisis global considerando el cero estructural. Este procedimiento se repetiría hasta aceptar la hipótesis nula.

A continuación, incluyo un ejemplo con la tentativa de la función con el cálculo de los residuales estandarizados:

x1<- c(13,6,7,9,9,25,5,6,6,7,6,14,7,8,14,46)
x2<- c(5,1,11,1,3,0,15,0,6,14,13,13,5,2,7,3)
datos1<- matrix(x1,4,4,byrow=T)
datos2<-matrix(x2,4,4,byrow=T)

resid_ln2<- function(x,ini){
  RS <- rowSums(x)
  CS <- colSums(x)
  GT <- sum(x)
  inicio<- c(rep(1,9),0,rep(1,6))
  res<- loglm(~1+2,data= x,fitted=T,start=ini)
  num<- (x - res$fitted)
  den <-  sqrt(res$fitted*((1 - RS / GT) %*% t(1 - CS / GT)))
  ASR<- num/den
  ASR
}


bq<- function(x){
  i<- 16
  n <- 9
  aux<- TRUE
  inicio<- rep(1,16)
  while(i != 0 || aux==TRUE){
    res<- loglm(~1+2, data=x, fitted=T,start=inicio)
    resid<- resid_ln2(x,inicio)
    chi2<-res$pearson
    aux<- chi2 > qchisq(.95,n)
    resid1<-as.vector(abs(resid))
    maxresid<- which.max(resid)
    resid1[maxresid]<- 0
    resid<- matrix(resid1,4,4)
    n<- n-1
    inicio[maxresid]<-0
    x1<- as.vector(x)
    x1[maxresid]<- 0
    x<- matrix(x1,4,4)
    if(aux ==FALSE) {
      return(list(resid,chi2,qchisq(.95,n),inicio,x))
    }
    else{
      print(cat("Iteración",i))
    }
    i<- i-1
  }
}

bq(datos1)
bq(datos2)

Bakeman, R., & Quera, V. (1995). Log-linear approaches to lag-sequential analysis when consecutive codes may and cannot repeat. Psychological Bulletin, 118(2), 272–284. https://doi.org/https://doi.org/10.1037/0033-2909.118.2.272

Se admiten sugerencias y posibles mejoras de la función.
Saludos








--





________________________________
De: R-help-es <r-help-es-bounces using r-project.org> en nombre de r-help-es-request using r-project.org <r-help-es-request using r-project.org>
Enviado: lunes, 13 de abril de 2026 7:23
Para: r-help-es using r-project.org <r-help-es using r-project.org>
Asunto: Resumen de R-help-es, Vol 204, Envío 3

Envíe los mensajes para la lista R-help-es a
        r-help-es using r-project.org

Para subscribirse o anular su subscripción a través de la WEB
        https://stat.ethz.ch/mailman/listinfo/r-help-es

O por correo electrónico, enviando un mensaje con el texto "help" en
el asunto (subject) o en el cuerpo a:
        r-help-es-request using r-project.org

Puede contactar con el responsable de la lista escribiendo a:
        r-help-es-owner using r-project.org

Si responde a algún contenido de este mensaje, por favor, edite la
linea del asunto (subject) para que el texto sea mas especifico que:
"Re: Contents of R-help-es digest...". Además, por favor, incluya en
la respuesta sólo aquellas partes del mensaje a las que está
respondiendo.


Asuntos del día:

   1. Crear funcion para identificar residuales en tabla de
      contingencia (MANUEL MORALES ORTIZ)
   2. Re: Crear funcion para identificar residuales en tabla de
      contingencia (Proyecto R-UCA)

----------------------------------------------------------------------

Message: 1
Date: Sun, 12 Apr 2026 19:17:01 +0000
From: MANUEL MORALES ORTIZ <morales using us.es>
To: "r-help-es using r-project.org" <r-help-es using r-project.org>
Subject: [R-es] Crear funcion para identificar residuales en tabla de
        contingencia
Message-ID:
        <GV2PR01MB11994E9A45C7030EC50824F67AF272 using GV2PR01MB11994.eurprd01.prod.exchangelabs.com>

Content-Type: text/plain; charset="utf-8"

Hola, quiero construir una funci�n en la que me identifique los residuales significativos de una tabla de contingencia y me vaya analizando la tabla  hasta que se acepte el modelo de independencia y no queden residuales significativos. Un ejemplo tentativo de lo que se pretende ser�a el siguiente:

library(MASS)
x<- c(13,6,7,9,9,25,5,6,6,7,6,14,7,8,14,46)
datos<- matrix(x,4,4,byrow=T)
inicio<- matrix(rep(1,16),4,4)
res<- loglm(~1+2,data= datos,fitted=T,start = inicio)
resid<- residuals(res)
resid<-abs(as.vector(resid))
max<- which.max(resid)

# Asigno el valor 0 a la caslla de la tabla que tiene el mayor residual
datos<- as.vector(datos)
datos[6]<- 0
datos<- matrix(datos,4,4)

# Vuelvo a analizar la tabla
inicio[2,2] <- 0
res<- loglm(~1+2,data= datos,fitted=T,start = inicio)
chi2<-res$pearson
aux<- chi2 > qchisq(.95,9)

# A continuaci�n, se calculan los residuales,

resid<- residuals(res)

# Repetir el procedimiento hasta que no queden residuales significativos.

�Alguna sugerencia?

Saludos







--





        [[alternative HTML version deleted]]




------------------------------

Message: 2
Date: Mon, 13 Apr 2026 07:23:10 +0200
From: Proyecto R-UCA <r-uca using uca.es>
To: r-help-es using r-project.org
Subject: Re: [R-es] Crear funcion para identificar residuales en tabla
        de contingencia
Message-ID: <fc0d4822271a6bc26f59cbf1c9c6de176bf58d9b.camel using uca.es>
Content-Type: text/plain; charset="utf-8"

Hola, Manuel:

Si haces repetidos contrastes a un nivel de confianza 1-alpha el resultado final no tendrá ese nivel de confianza. Hay que ajustar los
niveles usando la corrección de Bonferroni.

Por otra parte, el test que estás haciendo no es sobre una casilla es sobre la tabla entera. Si quieres analizar las casillas tendrás que
utilizar otro tipo de test. Tal vez uno basado en errores estandarizados.

No recuerdo ni encuentro ninguno en este momento. Un hilo del que tirar podría ser:
https://pubmed.ncbi.nlm.nih.gov/24788323/

Un saludo.


El dom, 12-04-2026 a las 19:17 +0000, MANUEL MORALES ORTIZ escribió:
> Hola, quiero construir una funcin en la que me identifique los residuales significativos de una tabla de contingencia y me vaya analizando
> la tabla  hasta que se acepte el modelo de independencia y no queden residuales significativos. Un ejemplo tentativo de lo que se pretende
> sera el siguiente:
>
> library(MASS)
> x<- c(13,6,7,9,9,25,5,6,6,7,6,14,7,8,14,46)
> datos<- matrix(x,4,4,byrow=T)
> inicio<- matrix(rep(1,16),4,4)
> res<- loglm(~1+2,data= datos,fitted=T,start = inicio)
> resid<- residuals(res)
> resid<-abs(as.vector(resid))
> max<- which.max(resid)
>
> # Asigno el valor 0 a la caslla de la tabla que tiene el mayor residual
> datos<- as.vector(datos)
> datos[6]<- 0
> datos<- matrix(datos,4,4)
>
> # Vuelvo a analizar la tabla
> inicio[2,2] <- 0
> res<- loglm(~1+2,data= datos,fitted=T,start = inicio)
> chi2<-res$pearson
> aux<- chi2 > qchisq(.95,9)
>
> # A continuacin, se calculan los residuales,
>
> resid<- residuals(res)
>
> # Repetir el procedimiento hasta que no queden residuales significativos.
>
> Alguna sugerencia?
>
> Saludos
>
>
>
>
>
>
>
> --
>
>
>
>
>
>        [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es using r-project.org
> https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!W0VL6NufuD4gWEkqY5ZCuu6w5RV4JvHth-kVWEWTvR9OyPbMbVMVItbUdLmpq24bnGLzc3YPGzI$
>




------------------------------

Subject: Pié de página del digest

_______________________________________________
R-help-es mailing list
R-help-es using r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


------------------------------

Fin de Resumen de R-help-es, Vol 204, Envío 3
*********************************************

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es