¿Cómo tener múltiples grupos en Python statsmodels modelo de efectos lineales mixtos?

Estoy tratando de usar el modelo de efectos mixtos lineales de Python statsmodels para ajustar un modelo que tiene dos intercepciones aleatorias, p. dos grupos. No puedo entender cómo inicializar el modelo para poder hacer esto.

Aquí está el ejemplo. Tengo datos que se parecen a lo siguiente (tomado deaquí):

subject gender  scenario    attitude    frequency
F1  F   1   pol 213.3
F1  F   1   inf 204.5
F1  F   2   pol 285.1
F1  F   2   inf 259.7
F1  F   3   pol 203.9
F1  F   3   inf 286.9
F1  F   4   pol 250.8
F1  F   4   inf 276.8

Quiero hacer un modelo de efectos lineales mixtos con dos efectos aleatorios: uno para el grupo de sujetos y otro para el grupo de escenarios. Estoy tratando de hacer esto:

import statsmodels.api as sm
model = sm.MixedLM.from_formula("frequency ~ attitude + gender", data, groups=data[['subject', 'scenario']])
result = model.fit()
print result.summary()

Sigo recibiendo este error:

LinAlgError: Singular matrix

Funciona bien en R. Cuando usolme4 en R con la representación basada en fórmulas, encaja perfectamente:

politeness.model = lmer(frequency ~ attitude + gender + 
        (1|subject)  + (1|scenario), data=politeness)

No entiendo por qué está sucediendo esto. Funciona cuando uso cualquier efecto / grupo aleatorio, p.

model = sm.MixedLM.from_formula("frequency ~ attitude + gender", data, groups=data['subject'])

Entonces me sale:

                 Mixed Linear Model Regression Results
===============================================================
Model:                MixedLM   Dependent Variable:   frequency
No. Observations:     83        Method:               REML     
No. Groups:           6         Scale:                850.9456 
Min. group size:      13        Likelihood:           -393.3720
Max. group size:      14        Converged:            Yes      
Mean group size:      13.8                                     
---------------------------------------------------------------
                 Coef.   Std.Err.   z    P>|z|  [0.025   0.975]
---------------------------------------------------------------
Intercept        256.785   15.226 16.864 0.000  226.942 286.629
attitude[T.pol]  -19.415    6.407 -3.030 0.002  -31.972  -6.858
gender[T.M]     -108.325   21.064 -5.143 0.000 -149.610 -67.041
Intercept RE     603.948   23.995                              
===============================================================

Alternativamente, si lo hago:

model = sm.MixedLM.from_formula("frequency ~ attitude + gender", data, groups=data['scenario'])

Este es el resultado que obtengo:

              Mixed Linear Model Regression Results
================================================================
Model:               MixedLM    Dependent Variable:    frequency
No. Observations:    83         Method:                REML     
No. Groups:          7          Scale:                 1110.3788
Min. group size:     11         Likelihood:            -402.5003
Max. group size:     12         Converged:             Yes      
Mean group size:     11.9                                       
----------------------------------------------------------------
                 Coef.   Std.Err.    z    P>|z|  [0.025   0.975]
----------------------------------------------------------------
Intercept        256.892    8.120  31.637 0.000  240.977 272.807
attitude[T.pol]  -19.807    7.319  -2.706 0.007  -34.153  -5.462
gender[T.M]     -108.603    7.319 -14.838 0.000 -122.948 -94.257
Intercept RE     182.718    5.502                               
================================================================

No tengo idea de lo que está pasando. Siento que me falta algo fundamental en las estadísticas del problema.

Respuestas a la pregunta(2)

Su respuesta a la pregunta