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.