Verfasst am: 25.08.2016, 13:08
Titel: HILFE: "Matrix is singular to working precision"
Hallo an alle MATLAB-Liebhaber
ich hoffe ihr könnt uns helfen
Für eine Hausarbeit müssen wir eine Pooled-Regression durchführen.
Leider harkt es immer wieder an verschiedenen Stellen.
Und zwar haben wir eine riesige Excel Tabelle mit insgesamt 50 Spalten und 138037 Zeilen. Davon sind 43 Zahlen lediglich Dummy Variablen die entweder einen Wert von 0 oder 1 haben, da jede Dummy Variable für eine Jahreszahl steht. Dementsprechend hat sie als Wert eine 1, wenn wir uns in der jeweiligen Zeile in dem Jahr befinden etc.
Da wir auch eine Menge NaN Werte in unserer Tabelle haben, lassen wir diese Zeilen komplett löschen.
Allerdings bekommen wir die Warnung "Matrix is singular to working precision", also dass die Matrix nahe an der Singularität ist. Dies hat höchstwahrscheinlich damit zu tun, dass wir so viele Zeilen bei den Dummy Variablen mit einer 0 gefüllt haben, was aber ja auch sein musste.
Leider bekommen wir dann viele Ergebnisse mit NaN raus, wie das Bestimmtheitsmaß r2 oder einige Beta Werte, was uns leider eigentlich ja nicht passieren darf...auch die Inverse enthält viele NaN Werte.
Wir haben auch nicht mit der Funktion inv gearbeitet, sondern es mannuell mit / berechnet.
Andere Gruppen sind für Ihre pooled Regression ähnlich vorgegangen und hatten das Problem nicht.
Hätte eventuell jemand von euch einen Lösungsvorschlag, wie wir das ganze umgehen können oder was wir falsch machen?
Gerne können wir auch unser Skript oder die Exceltabelle, die uns als Datengrundlage dient, hochladen, falls das viel helfen würde.
ohne weitere Informationen (Code, Beispieldaten) sehe ich keine Möglichkeit, dir zu helfen. Ob das mit diesen Informationen dann anders aussieht, ist zugegebenermaßen die andere Frage.
% Einzigartige Elemente aus der Stichprobe extrahieren
vCountyUnique=unique(mData(:,1));
vYearUnique=unique(mData(:,2));
% Anzahl von Beobachtungen feststellen
iN=size(vCountyUnique,1);
iT=size(vYearUnique,1);
%% Pooled Regression: die klassische OLS Variante % Inverse finden; der zeiteffiziente Weg
mX_Inv=(mX'*mX)\eye(size(mX,2));
% Beta-Koeffizienten
vBetaPooled=mX_Inv*mX'*vY;
% Anzahl der Variablen (inklusive der Konstante)
iK=size(vBetaPooled,1)-1;
% 'Prognose' von Y
vYDach_OLS=mX*vBetaPooled;
% Residuen
vResiduen_OLS=vY-vYDach_OLS;
% Sum of Squered Residuals (SSR)
dSSR_OLS=sum(vResiduen_OLS.^2);
% Mittelwert von Y
dMittelY=mean(vY);
% Sum of Squared Totals (SST)
dSST_OLS=sum((vY-dMittelY).^2);
% R2
dR2=1-dSSR_OLS/dSST_OLS;
% Inferenz % Varianz der Residuen
dVarRes=dSSR_OLS/(iN*iT-iK-1);
% Standardfehler der Koeffizienten
vBetaPooled_SE=sqrt(diag(dVarRes*mX_Inv));
% t-Teststatistik
vBetaPooled_TValue=vBetaPooled./vBetaPooled_SE;
% Irrtumswahrscheinlichkeit
vBetaPooled_PValue=2*(tcdf(-abs(vBetaPooled_TValue),iN*iT-iK-1));
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.