Hallo zusammen,
ich möchte eine Spearman-Korrelation berechnen. Allerdings nicht mit der "normalen" Formel, sondern mit der Formel, welche sich auch dann noch eignet, wenn viele verbundene Ränge vorliegen (beschrieben beispielsweise in Bortz und Schuster, 2010, S. 179). Soweit ich es bisher nachvollziehen konnte, berechnen sowohl cor.test (method = "spearman"), pSpearman und spearman.test aber jeweils nur die "normale" Formel. Habe ich etwas übersehen (gut möglich, bin ein absoluter R-Neuling), oder müsste ich nun wirklich eine eigene Funktion schreiben, um eben diese andere Berechnungsformel verwenden zu können?
Im Voraus schonmal vielen Dank für alle Antworten!
Spearman-Korrelation mit vielen verbundenen Rängen
Moderator: EDi
Re: Spearman-Korrelation mit vielen verbundenen Rängen
Hallo Laura,
willkommen im Forum!
Kannst Du bitte die Nummern der Formeln aus Bortz&Schuster 2010 angeben?
Ist es die Formel (10.37)?
Ich habe schon nach dem Thema etwas gesucht; bei google trifft es wohl am ehesten "rank correlation repeated ranks".
SO liefert leider nichts R-spezifisches:
https://stackoverflow.com/search?q=%5Br ... ated+ranks
Notfalls muss man die Formel selber implementieren, etwa so:
Der gleiche Wert wird berechnet bei:
Wenn es nur um den Wert geht, dann reicht auch:
Die gesimpelte Berechnung (ohne Berücksichtigung von verbundenen Rängen, Formel (10.35)) liefert ein anderes Ergebnis:
Gruß, Jörg
willkommen im Forum!
Kannst Du bitte die Nummern der Formeln aus Bortz&Schuster 2010 angeben?
Ist es die Formel (10.37)?
Ich habe schon nach dem Thema etwas gesucht; bei google trifft es wohl am ehesten "rank correlation repeated ranks".
SO liefert leider nichts R-spezifisches:
https://stackoverflow.com/search?q=%5Br ... ated+ranks
Notfalls muss man die Formel selber implementieren, etwa so:
Code: Alles auswählen
# Bortz&Schuster 2010, 179
# google: rank correlation repeated ranks
BS <- data.frame(Bruder = c(2,4,2,3,3,2,1,3,4,3),
Schwester = c(3,5,3,3,1,2,2,3,4,3))
BS$rB <- rank(BS$Bruder)
BS$rS <- rank(BS$Schwester)
BS$d2 <- with(BS, (rB-rS)^2)
TU <- function(r) {
tab <- table(r)
tab <- tab[tab>1]
sum(tab^3-tab)/12
}
rs37 <- function(rx, ry) {
T <- TU(rx); U <- TU(ry); n <- length(rx)
n12 <- (n^3-n)/12
( 2*n12 - T - U - sum((rx - ry)^2) ) / 2 / sqrt((n12 - T)*(n12 -U))
}
rs37(BS$rB, BS$rS)
Code: Alles auswählen
cor.test(BS$rB, BS$rS, method="spearman")
Code: Alles auswählen
cor(BS$rB, BS$rS, method="spearman")
Code: Alles auswählen
rs35 <- function(d) { n <- length(d); 1 - 6*sum(d^2)/n/(n^2-1) }
rs35(BS$rB - BS$rS)
Re: Spearman-Korrelation mit vielen verbundenen Rängen
Hallo Laura,
so wie Deine Frage derzeit geschrieben steht
Bitte schau Dir die offiziele Hilfe zu cor.test mithilfe von help(cor.test) einmal an, und wenn die dort stehenden Hinweise auf das Argument exact und der Verweis auf ein anderes Paket die Frage nicht beantworten sollten, dann stellt sich die Frage: Wie kompliziert ist die Formel in Bortz und Schuster und kann man die vielleicht einfach selbst implementieren.
LG,
Bernhard
so wie Deine Frage derzeit geschrieben steht
ist sie für jeden, der nicht dieses Buch in dieser Auflage zur Hand hat, ein Ratespiel.
Bitte schau Dir die offiziele Hilfe zu cor.test mithilfe von help(cor.test) einmal an, und wenn die dort stehenden Hinweise auf das Argument exact und der Verweis auf ein anderes Paket die Frage nicht beantworten sollten, dann stellt sich die Frage: Wie kompliziert ist die Formel in Bortz und Schuster und kann man die vielleicht einfach selbst implementieren.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte