Как иметь несколько групп в модели линейных смешанных эффектов Python statsmodels?

Я пытаюсь использовать модель линейных смешанных эффектов Python statsmodels для подбора модели, имеющей два случайных перехвата, например, две группы. Я не могу понять, как инициализировать модель, чтобы я мог сделать это.

Вот пример. У меня есть данные, которые выглядят следующим образом (взяты изВот):

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

Я хочу создать линейную модель смешанных эффектов с двумя случайными эффектами - один для предметной группы и один для сценарной группы. Я пытаюсь сделать это:

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

Я продолжаю получать эту ошибку:

LinAlgError: Singular matrix

Работает нормально в R. Когда я используюlme4 в R с рендерингом на основе формул он отлично вписывается:

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

Я не понимаю, почему это происходит. Это работает, когда я использую любой случайный эффект / группу, например

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

Тогда я получаю:

                 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                              
===============================================================

В качестве альтернативы, если я сделаю:

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

Вот результат, который я получаю:

              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                               
================================================================

Я понятия не имею, что происходит. Я чувствую, что упускаю что-то фундаментальное в статистике проблемы.

Ответы на вопрос(2)

Ваш ответ на вопрос