2 votos

¿Es posible "autocompletar" una matriz de contraste ortogonal para hacerla cuadrar en R y producir estimaciones correctas?

Tengo un factor con ocho niveles pero sólo tengo cinco comparaciones que quiero hacer. Creo una matriz con todos los contrastes relevantes, sin embargo, necesito invertir esta matriz antes de pasarla a la función contrasts() para generar estimaciones correctas. Dado que necesito una matriz cuadrada, ¿es posible autogenerar dos contrastes más ortogonales para que las estimaciones devueltas por summary() sean correctas?

http://rstudio-pubs-static.s3.amazonaws.com/65059_586f394d8eb84f84b1baaf56ffb6b47f.html (Véanse las secciones "Contrastes de bricolaje" y "Ejecución de menos de J-1 contrastes para grupos J")

Ejemplo reproducible a continuación. Nota: el modelo no tiene mucho sentido con el conjunto de datos de CO2, pero los contrastes son exactamente los que necesito hacer para mi conjunto de datos original.

# Use CO2 dataset for example
data<-CO2
# Only need eight levels
data<-data[data$Plant %in% levels(data$Plant)[1:8],] 
data$Plant<-factor(data$Plant)
levels(data$Plant)

# Set up contrasts
contrasts(data$Plant) <- 
  solve( t( cbind( 
    c(1,1,1,1), # Filler
    c(-0.5,0,1,0,-0.5,0,0,0), 
    c(-0.5,0.5,0,0, -0.5, 0.5, 0, 0),
    c(-0.5,0,0,1, -0.5, 0, 0, 0),  
    c(0,-0.5,0,-0.5, 0, 0.5, 0, 0.5),
    c(-0.5,0,-0.5, 0, 0.5, 0, 0.5,0)) ) 
  ) [,2:6] #Drop filler

# Run model
fit<-lm(uptake~Plant, data=data)
summary(fit)

Gracias, Egor

3voto

reinierpost Puntos 101

Como la matriz no es cuadrada hay que calcular el inversa generalizada . Puede sustituir simplemente solve() con MASS::ginv() . R añade automáticamente algunos contrastes ortogonales para rellenar las columnas que faltan en la matriz de contraste:

contrasts(data$Plant) <- 
  MASS::ginv( t( cbind( 
    c(1,1,1,1), # Filler
    c(-0.5,0,1,0,-0.5,0,0,0), 
    c(-0.5,0.5,0,0, -0.5, 0.5, 0, 0),
    c(-0.5,0,0,1, -0.5, 0, 0, 0),  
    c(0,-0.5,0,-0.5, 0, 0.5, 0, 0.5),
    c(-0.5,0,-0.5, 0, 0.5, 0, 0.5,0)) ) 
  ) [, 2:6]

Sin embargo, no necesitas el relleno en absoluto si calculas la inversa generalizada. Proporciono algunos detalles en mi respuesta aquí .

contrasts(data$Plant) <- 
  MASS::ginv( rbind( 
    c(-0.5,0,1,0,-0.5,0,0,0), 
    c(-0.5,0.5,0,0, -0.5, 0.5, 0, 0),
    c(-0.5,0,0,1, -0.5, 0, 0, 0),  
    c(0,-0.5,0,-0.5, 0, 0.5, 0, 0.5),
    c(-0.5,0,-0.5, 0, 0.5, 0, 0.5,0) ) 
  )

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X