Wie kann man in Python-Statistikmodellen mehrere Gruppen mit linearen gemischten Effekten erstellen?

Ich versuche, das lineare gemischte Effektmodell von Python statsmodels zu verwenden, um es an ein Modell anzupassen, das zwei zufällige Abschnitte aufweist, z. zwei Gruppen. Ich kann nicht herausfinden, wie das Modell initialisiert wird, damit ich dies tun kann.

Hier ist das Beispiel. Ich habe Daten, die wie folgt aussehen (entnommen ausHie):

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

Ich möchte ein lineares Modell mit gemischten Effekten mit zwei zufälligen Effekten erstellen - einen für die Themengruppe und einen für die Szenariogruppe. Ich versuche das zu tun:

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

Ich bekomme immer diesen Fehler:

LinAlgError: Singular matrix

Es funktioniert gut in R. Wenn ichlme4 in R mit dem formelbasierten Rendering passt es gut:

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

Ich verstehe nicht, warum das passiert. Es funktioniert, wenn ich einen zufälligen Effekt / eine zufällige Gruppe verwende, z. B.

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

Dann bekomme ich:

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

Alternativ, wenn ich tue:

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

Das ist das Ergebnis, das ich bekomme:

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

Ich habe keine Ahnung, was los ist. Ich habe das Gefühl, ich vermisse etwas Grundlegendes in der Statistik des Problems.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage