Seite 1 von 1

Spearman Correlation wiederholt für verschiedene Teile eines data.frames

Verfasst: Sa Mai 27, 2017 9:40 am
von Laubsauger
Die stark reduzierte Form meines Datensatzes sieht folgendermaßen aus:

Code: Alles auswählen

   report_ctry partner_ctry year   MONEY_ex   MONEY_im   WIOT_ex   WIOT_im
1           AT           DE 2002  8.5808372 16.1630741 34.591100 45.201509
2           AT           ES 2002  1.2446250  4.7767391  2.656151  1.816262
3           AT           FR 2002  4.4816485 11.0260916  5.083568  4.733376
4           AT           IT 2002  3.0898398  0.1929551 10.143348  8.083901
5           AT           DE 2003  5.6349645 14.5028460 34.435932 46.410414
6           AT           ES 2003  1.6063861  0.1514109  2.633816  1.974869
7           AT           FR 2003  5.9736713 13.3159089  4.917519  4.586031
8           AT           IT 2003  1.7273679  4.7489207 10.075955  7.980019
9           AT           DE 2004 17.9224117 30.2373377 34.298943 45.947375
10          AT           ES 2004  3.4296986  8.3922485  2.608634  1.872469
11          AT           FR 2004  6.4216556  7.5793763  4.319266  4.657179
12          AT           IT 2004  7.4142497  4.0909515  9.669970  7.809957
13          BE           DE 2002  9.9820546  0.0000000 20.237328 20.692120
14          BE           ES 2002  0.7359349  5.7678236  3.936783  2.832228
15          BE           FR 2002  8.4192416 20.7078779 17.434342 15.367698
16          BE           IT 2002  0.0000000 17.9215481  6.655783  4.421916
17          BE           DE 2003  0.0000000 15.2294935 20.638146 21.085703
18          BE           ES 2003  0.7007664  1.7057427  3.940353  3.140245
19          BE           FR 2003  9.9963343  0.0000000 18.158921 16.020745
20          BE           IT 2003  8.6150366  3.1672175  6.717638  4.511633
21          BE           DE 2004  5.9230610  0.0000000 21.101395 21.400769
22          BE           ES 2004  5.0732147  6.6526799  4.001297  3.063394
23          BE           FR 2004 17.0925231 10.5683422 18.076162 15.840100
24          BE           IT 2004  2.7509869  7.4083929  6.498400  4.421462
Lies: Ich habe da für jedes report_ctry mehrere partner_ctry und dann Daten für mehrere Jahre. Was ich jetzt machen möchte ist die spearman correlation ausrechnen zwischen MONEY_ex und MONEY_im für jede Kombination von report_ctry und year. D.h. Ich möchte die Korrelation zwischen den beiden Variablen für AT im Jahr 2002, für AT im Jahr 2003, für AT im Jahr 2004, für BE im Jahr 2002 etc. Die Ergebnisse sollen jeweils bitte in einem Vektor gespeichert werden.

Die Korrelation an sich ist ja nun nicht so schwierig:

Code: Alles auswählen

 rcorr(df$MONEY_ex, df$MONEY_im, type="spearman")
Ich vermute mal, man muss wieder mal mit lapply und function hantieren. Aber wie so oft ist aller Anfang in R sehr schwer, erst recht wenn man keinen Programmierer-Hintergrund hat.

Später möchte ich dann auch noch andere Sachen machen, z.B. Korrelationsmatrizen für jede Ausprägung von report_ctry. Das läuft ja dann vom Befehl her in dieselbe Richtung, nehme ich mal an.

Re: Spearman Correlation wiederholt für verschiedene Teile eines data.frames

Verfasst: Sa Mai 27, 2017 11:49 am
von bigben
Hi!

Nehmen wir an, Dein Datensatz heißt "daten". Tut das Folgende, was Du willst?

Code: Alles auswählen

by(daten, list(daten$report_ctry, daten$year), function(x) cor(x$MONEY_ex, x$MONEY_im, method = "spearman"))
LG,
Bernhard

Re: Spearman Correlation wiederholt für verschiedene Teile eines data.frames

Verfasst: Sa Mai 27, 2017 12:12 pm
von Laubsauger
Jau, das sieht schon mal sehr gut aus! :)

Jetzt ist nur noch die Frage, wie ich den Output in ein verwertbares Format speichere. Das folgende funktioniert schonmal nicht:

Code: Alles auswählen

 rank_cors <- by(daten, list(daten$report_ctry, daten$year), function(x) cor(x$MONEY_ex, x$MONEY_im, method = "spearman"))

cor <- data.frame(rank_cors)
Da kriege ich den Fehler "Kann Klasse "by" nicht in data.frame umwandeln".

Ich hätte die entsprechenden Korrelationen halt am Ende gerne in einem data.frame, wo sie wieder den entsprechenden Ländern und Jahren zugeordnet sind.

Re: Spearman Correlation wiederholt für verschiedene Teile eines data.frames

Verfasst: Sa Mai 27, 2017 1:43 pm
von jogo

Code: Alles auswählen

rank_cors <- by(daten, list(daten$report_ctry, daten$year), function(x) cor(x$MONEY_ex, x$MONEY_im, method = "spearman"))
unclass(rank_cors)
ansonsten hättest Du auch (wie schon richtig von Dir vermutet) split() und lapply() (bzw. sapply()) anwenden können:

Code: Alles auswählen

L <- split(daten, list(daten$report_ctry, daten$year))
sapply(L, function(x) cor(x$MONEY_ex, x$MONEY_im, method = "spearman"))
Das vermeidet das komische by-Objekt.

Gruß, Jörg

Re: Spearman Correlation wiederholt für verschiedene Teile eines data.frames

Verfasst: Mo Mai 29, 2017 3:26 pm
von Laubsauger
Wunderbar, das spuckt weitgehend das aus, was ich brauche. Herzlichen Dank.