Spearman-Korrelation mit vielen verbundenen Rängen

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
Laura
Beiträge: 1
Registriert: Do Mär 05, 2020 4:17 pm

Spearman-Korrelation mit vielen verbundenen Rängen

Beitrag von Laura »

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!
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Spearman-Korrelation mit vielen verbundenen Rängen

Beitrag von jogo »

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:

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)
Der gleiche Wert wird berechnet bei:

Code: Alles auswählen

cor.test(BS$rB, BS$rS, method="spearman")
Wenn es nur um den Wert geht, dann reicht auch:

Code: Alles auswählen

cor(BS$rB, BS$rS, method="spearman")
Die gesimpelte Berechnung (ohne Berücksichtigung von verbundenen Rängen, Formel (10.35)) liefert ein anderes Ergebnis:

Code: Alles auswählen

rs35 <- function(d) { n <- length(d); 1 - 6*sum(d^2)/n/(n^2-1) }
rs35(BS$rB - BS$rS)
Gruß, Jörg
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Spearman-Korrelation mit vielen verbundenen Rängen

Beitrag von bigben »

Hallo Laura,

so wie Deine Frage derzeit geschrieben steht
Laura hat geschrieben: Do Mär 05, 2020 4:34 pm(beschrieben beispielsweise in Bortz und Schuster, 2010, S. 179).
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
Antworten