Matrixmultiplikation

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

tr206

Matrixmultiplikation

Beitrag von tr206 »

Hallo,

ich versuche eine PCA zu machen und hierzu zwei Vektoren bzw. Matrizen zu multiplizieren. Der code sieht so aus

Code: Alles auswählen

data<-equityfunds[,-1]

PC<-prcomp(data)

coef1<-PC$rotation

data<-as.matrix(data)

PC1<-coef1 %*% data
Leider klappt das nicht und ich verstehe nicht warum.

Das Resultat soll dann ins Excel exportiert werden. Ich habe das so probiert

Code: Alles auswählen

 WriteXLS(coef1,ExcelFileName = "PCAtest.xls")
The Perl script 'WriteXLS.pl' failed to run successfully.
Warning message:
running command 'perl -I"C:/Users/Thorsten/Documents/R/win-library/3.3/WriteXLS/Perl" "C:/Users/Thorsten/Documents/R/win-library/3.3/WriteXLS/Perl/WriteXLS.pl" --CSVPath "C:\Users\Thorsten\AppData\Local\Temp\RtmpAn2KM9/WriteXLS" --verbose FALSE --AdjWidth FALSE --AutoFilter FALSE --BoldHeaderRow FALSE --FreezeRow 0 --FreezeCol 0 --Encoding UTF-8 "C:\Users\Thorsten\Documents\PCAtest.xls"' had status 127 
Leider klappt das ganze nicht. Was mach ich denn falsch?

Vielen Dank vorab.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrixmultiplikation

Beitrag von jogo »

Bei einer Matrixmultiplikation ist die Reihenfolge nicht egal, d.h. das Kommutativgesetz gilt nicht. Selbst wenn die Formate von zwei Matrizen A und B so beschaffen sind, dass man sowohl A %*% B als auch B %*% A bilden kann, bedeutet dass nicht, dass (A %*% B) == (B %*% A)

Code: Alles auswählen

equityfunds <- read.csv2("equityfunds.csv", header=TRUE, dec='.')
data <- equityfunds[,-1]
PC <- prcomp(data)
coef1 <- PC$rotation
PC1 <- as.matrix(data) %*% coef1
Gruß, Jörg
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Matrixmultiplikation

Beitrag von student »

Hallo,

zu R und Excel hast Du einen Hinweis bekommen. Entspricht das Ergebnis der Matrizenmultiplikation Deiner Erwartung (welche hoffentlich dem richtigen Ergebnis entspricht)?
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
tr206

Re: Matrixmultiplikation

Beitrag von tr206 »

Ja, danke die Multiplikation passt wie ich es wollte.

Aber mit dem Export passt das noch nicht, da ich immer so eine csv Datei bekomme in der die Werte in einer Zeile stehen. Ich will aber die Werte in einer einzelnen Zelle haben, da ich die Werte dann besser in Excel weiter nutzen kann.
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Matrixmultiplikation

Beitrag von student »

Hallo,

dann bleibt nur aus meiner Sicht write.csv2() und dann die csv-Datei in Deine Excel-Version (Gebietsschema Deutsch) einlesen. Dann brauchst Dur Dir keine Gedanken über das Format zu machen.

Oder Du verwendest das Flaggschiff XLConnect.....
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
tr206

Re: Matrixmultiplikation

Beitrag von tr206 »

Das klappt ganz gut aber ich bekomme dann so zerrissene Daten, d.h. die Vorkommastelle ist dann in einer anderen Spalte angegeben als die Nachkommastellen (siehe als Beispiel den Anhang). Kann das durch ein weiteres argument in write.csv2() korrigiert werden?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrixmultiplikation

Beitrag von jogo »

Du kannst beim Export per write.csv2() das Argument dec='.' setzen, also write.csv2(..., dec='.')
Siehe den Hilfetext der Funktion

Code: Alles auswählen

?write.table
tr206

Re: Matrixmultiplikation

Beitrag von tr206 »

Das habe ich schon probiert aber es geht leider nicht.

Code: Alles auswählen

write.csv2(PC1,file ="D:\\PCACanada.csv",dec=".")
Warning message:
In write.csv2(PC1, file = "D:\\PCACanada.csv", dec = ".") :
  attempt to set 'dec' ignored
Mit WriteXLS krieg ich das auch nicht hin:

Code: Alles auswählen

WriteXLS(PC1,ExcelFileName ="PCACanada.xls")
Error in WriteXLS(PC1, ExcelFileName = "PCACanada.xls") : 
  'x' must be the name of a data frame, the name of a list of data frames, a data frame object, a list object of data frames.
Write.table() funktioniert noch weniger. Mit write.csv() bin ich bis auf die Darstellung der Werte zufrieden, da dies relativ nahe dem ist was ich will.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrixmultiplikation

Beitrag von jogo »

Eine andere Variante ist, die Datei nicht mit der Endung *.csv zu versehen, sondern mit *.txt

Code: Alles auswählen

write.csv2(PC1,file ="D:\\PCACanada.txt")
Beim Import in Excel kann man dann alles Mögliche an Optionen einstellen.
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Matrixmultiplikation

Beitrag von student »

Hallo tr206,

also, Deine Datei sieht so aus:
"";"PC1";"PC2";"PC3";"PC4";"PC5"
"1";-3,17795849936673;-2,87531358655512;-2,50442180685335;3,68211984262637;-2,34892049862692
"2";-3,44984714202019;-2,87143859947737;-2,54006724080431;3,76264622616785;-2,15594810554274
"3";-3,52762756313604;-2,81163250548469;-2,62351295939327;3,73962303154399;-2,08456818211715
"4";-3,50100548788881;-2,73112691715543;-2,6
Sieht doch gut aus!? Das Dezimaltrennzeichen ist ein Komma und lässt sich prima in Excel als csv-Datei einlesen (siehe Bild):
Excel-Datei.jpg
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Antworten