Q1
Es probable que no quiera utilizar el by
mecanismo para esta cantidad de niveles de factores, pero cada vez que se utiliza un factor by
suavizarte debe incluir en el modelo como término paramétrico el factor. Sospecho que lo que ocurre es que, para modelar las diferentes medias, los suavizados cambian de forma y se vuelven menos ondulantes (utilizando menos FED) para poder modelar simplemente las diferencias de abundancia media entre los géneros.
Su modelo entonces debería ser:
model <- gam(Abundance ~ Genus +
Batch +
s(Time, by = Genus) +
s(AnimalId, bs = "re"),
family = something,
method = "REML")
Q2
Una gran desventaja es que ya no puedes obtener estimaciones para los géneros que dejaste fuera. Un punto a favor es que podría no ser posible modelar (fácilmente) esos géneros de baja prevalencia o que modelarlos podría requerir un modelo mucho más complejo para capturar las diferencias en la abundancia y las relaciones variables de media-varianza que si sólo se modelan los géneros más abundantes.
El hecho de que cualquiera de ellos sea un gran problema depende de las preguntas a las que se intente dar respuesta.
Q3
Sugeriría que para algo en lo que se tienen 10 o más niveles de un factor, se podría replantear el uso del factor by
enfoque. En su lugar, gravitaría hacia el fs
que trata la colección de suavizados más como verdaderos efectos aleatorios para dar un "suavizado aleatorio" que incluye interceptos y pendientes aleatorios para cada género más términos aleatorios de ondulación. La restricción sobre el fs
que lo hace factible para datos de este tipo es que sólo tenemos un conjunto de parámetros de suavizado que estimar en lugar de un parámetro de suavizado separado para cada género. La implicación de esto es que estamos asumiendo explícitamente que el suavizado para cada género tiene la misma ondulación general, pero potencialmente diferentes formas. Con el factor by
formulación lisa está aceptando explícitamente que la lisa para cada género podría tener una ondulación diferente.
Como se ha descrito anteriormente, un modelo de partida utilizando el fs
base sería:
model <- gam(Abundance ~ Batch +
s(Time, Genus, bs = "fs") +
s(AnimalId, bs = "re"),
family = something,
method = "REML")
observando que hemos eliminado el término paramétrico Genus
como el s(Time, Genus, bs = "fs")
incluye un intercepto aleatorio para cada nivel de Genus
.
Si tiene una cantidad tan grande de datos, debería mirar el mgcv::gamm()
función o mejor gamm4::gamm4()
para realizar el modelado como el fs
base está diseñado para ser más eficiente allí, o incluso más probable mgcv::bam()
si el modelo y los datos son lo suficientemente grandes.