Mise à jour : Puisque je sais maintenant que mon problème est appelé séparation quasi-complète, j'ai mis à jour la question pour refléter cela (merci à Aaron).
J'ai un ensemble de données provenant d'une expérience dans laquelle 29 participants humains (facteur code
) ont travaillé sur un ensemble d'essais et la valeur response
était soit 1 soit 0. De plus, nous avons manipulé le matériel de manière à avoir trois facteurs croisés p.validity
(valides versus invalides), type
(affirmation contre déni), et counterexamples
(peu contre beaucoup):
d.binom <- read.table("http://pastebin.com/raw.php?i=0yDpEri8")
str(d.binom)
## 'data.frame': 464 obs. of 5 variables:
## $ code : Factor w/ 29 levels "A04C","A14G",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ response : int 1 1 1 1 0 1 1 1 1 1 ...
## $ counterexamples: Factor w/ 2 levels "few","many": 2 2 1 1 2 2 2 2 1 1 ...
## $ type : Factor w/ 2 levels "affirmation",..: 1 2 1 2 1 2 1 2 1 2 ...
## $ p.validity : Factor w/ 2 levels "invalid","valid": 1 1 2 2 1 1 2 2 1 1 ...
Dans l'ensemble, il n'y a qu'un petit nombre de 0:
mean(d.binom$response)
## [1] 0.9504
Une hypothèse est qu'il existe un effet de validity
, cependant, une analyse préliminaire suggère qu'il pourrait y avoir un effet de counterexamples
. Comme j'ai des données dépendantes (chaque participant a travaillé sur tous les essais), je voudrais utiliser un GLMM sur les données. Malheureusement, counterexamples
séparez presque complètement les données (au moins pour un niveau):
with(d.binom, table(response, counterexamples))
## counterexamples
## response few many
## 0 1 22
## 1 231 210
Cela se reflète également dans le modèle:
require(lme4)
options(contrasts=c('contr.sum', 'contr.poly'))
m2 <- glmer(response ~ type * p.validity * counterexamples + (1|code),
data = d.binom, family = binomial)
summary(m2)
## [output truncated]
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 9.42 831.02 0.01 0.99
## type1 -1.97 831.02 0.00 1.00
## p.validity1 1.78 831.02 0.00 1.00
## counterexamples1 7.02 831.02 0.01 0.99
## type1:p.validity1 1.97 831.02 0.00 1.00
## type1:counterexamples1 -2.16 831.02 0.00 1.00
## p.validity1:counterexamples1 2.35 831.02 0.00 1.00
## type1:p.validity1:counterexamples1 2.16 831.02 0.00 1.00
Les erreurs standard pour les paramètres sont tout simplement folles. Étant donné que mon objectif final est d'évaluer si certains effets sont importants ou non, les erreurs types ne sont pas totalement sans importance.
- Comment gérer la séparation quasi complète? Ce que je veux, c'est obtenir des estimations à partir desquelles je peux juger si oui ou non un certain effet est significatif ou non (par exemple, en utilisant le
PRmodcomp
packagepkrtest
, mais c'est une autre étape non décrite ici).
Les approches utilisant d'autres packages sont également très bien.