WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

HILFE: "Matrix is singular to working precision"

 

Bjoernstefanson
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2016, 13:08     Titel: HILFE: "Matrix is singular to working precision"
  Antworten mit Zitat      
Hallo an alle MATLAB-Liebhaber

ich hoffe ihr könnt uns helfen Smile
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.


Vielen Dank im Vorraus schonmal! Smile
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.08.2016, 13:35     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Bjoernstefanson
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2016, 15:33     Titel:
  Antworten mit Zitat      
Also so sieht unser Code aus:
Code:

mData = xlsread('DateienFinalAlles.xlsx');

mData(any(isnan(mData')),:)=[];

% 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);

% Variablenauswahl
vCol=[4:50];
mX=[ones(size(mData,1),1) mData(:,vCol)];
vY=mData(:,3);

%% 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));

%% Ergebisausgabe
mResPooled=[vBetaPooled,vBetaPooled_SE,vBetaPooled_TValue,vBetaPooled_PValue];
cColNames={'Variable','Beta','SE','t-Wert','p-Wert'};
cResPooled=[cColNames;['Konst.';cNames(:,[27:31 33:37])'] num2cell(mResPooled)];



Hier die benötigte Excel Datei:
http://www.file-upload.net/download.....teienFinalAlles.xlsx.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Bjoernstefanson
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2016, 11:35     Titel:
  Antworten mit Zitat      
Hallo zusammen,

kann uns da wirklich keiner einen Tipp geben, wo genau unser Problem liegt? :/
(Außer, dass unsere Matrix nah an der Singularität ist halt).
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.08.2016, 12:04     Titel:
  Antworten mit Zitat      
Hallo,

die Matrix ist nicht nur nahe an der Singularität, sie ist singulär. Sie enthält z.B. 7 Spalten mit ausschließlich Nullen.
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.