Korrelationen mit ungeordneten kategorialen Variablen


123

Ich habe einen Datenrahmen mit vielen Beobachtungen und vielen Variablen. Einige von ihnen sind kategorisch (ungeordnet) und die anderen sind numerisch.

Ich suche nach Assoziationen zwischen diesen Variablen. Ich konnte die Korrelation für numerische Variablen berechnen (Spearman-Korrelation), aber:

  • Ich weiß nicht, wie ich die Korrelation zwischen ungeordneten kategorialen Variablen messen soll.
  • Ich weiß nicht, wie ich die Korrelation zwischen ungeordneten kategorialen Variablen und numerischen Variablen messen soll.

Weiß jemand, wie das gemacht werden könnte? Wenn ja, gibt es R-Funktionen, die diese Methoden implementieren?


Antworten:


113

Es hängt davon ab, welchen Sinn für eine Korrelation Sie haben möchten. Wenn Sie die Produktmomentkorrelation des Prototyps Pearson ausführen, erhalten Sie ein Maß für die Stärke der Assoziation und einen Test für die Bedeutung dieser Assoziation. Typischerweise unterscheiden sich jedoch der Signifikanztest und das Maß der Effektgröße .

Signifikanztests:

Effektgröße (Assoziationsstärke):


5
Eine sehr gründliche Erklärung des Falls Kontinuierlich vs. Nominal findet sich hier: Korrelation zwischen einer nominalen (IV) und einer kontinuierlichen (DV) Variablen .
gung

3
Im binären vs Intervall-Fall gibt es die Punkt-Biserial-Korrelation .
Glen_b

Was wäre eine bessere Alternative zum Chi-Quadrat-Test für große Proben?
Waldir Leoncio

2
p<.055%

1
Wie @gung hervorhob, ist die Korrelation zwischen einer nominalen (IV) und einer kontinuierlichen (DV) Variablen ein hervorragender Zusammenhang für die Korrelation bei gemischten Variablen. Hmisc::rcorrtut dies wunderbar und wir können es wie folgt überprüfen (für einen Datenrahmen mit gemischten Variablen):as.data.frame(rcorr(as.matrix(data_frame),type = "pearson")$P) as.data.frame(rcorr(as.matrix(data_frame),type = "pearson")$r)
KarthikS

15

Ich habe das folgende Cheatsheet gesehen, das vorher verlinkt wurde:

https://stats.idre.ucla.edu/other/mult-pkg/whatstat/

Es kann für Sie nützlich sein. Es gibt sogar Links zu bestimmten R-Bibliotheken.


3
Das Problem mit diesem Cheatsheet ist, dass es sich nur um kategoriale / ordinale / Intervallvariablen handelt. Was ich suche, ist eine Methode, mit der ich sowohl numerische als auch kategoriale unabhängige Variablen verwenden kann.
Clément F

6

Wenn Sie eine Korrelationsmatrix mit kategorialen Variablen wünschen, können Sie die folgende Wrapper-Funktion verwenden (für die das 'vcd'-Paket erforderlich ist):

catcorrm <- function(vars, dat) sapply(vars, function(y) sapply(vars, function(x) assocstats(table(dat[,x], dat[,y]))$cramer))

Wo:

vars ist ein Zeichenfolgenvektor von kategorialen Variablen, die Sie korrelieren möchten

dat ist ein data.frame, der die Variablen enthält

Das Ergebnis ist eine Matrix von Cramer's V's.


6

XKtichKich=1,,pXtichR2

Eine solche Analyse kann als Verallgemeinerung der Mehrfachkorrespondenzanalyse angesehen werden und ist unter vielen Namen bekannt, wie beispielsweise kanonische Korrelationsanalyse, Homogenitätsanalyse und viele andere. Eine Implementierung in R befindet sich im homalsPaket (auf CRAN). googeln für einige dieser Namen wird eine Fülle von Informationen geben, es gibt ein vollständiges Buch: Albert Gifi, "Nonlinear Multivariate Analysis". Viel Glück!


1
1

Ich werde diesen Kommentar bearbeiten, um ihn zu berücksichtigen.
kjetil b halvorsen

2

Ich hatte ein ähnliches Problem und habe den Chi-Quadrat-Test wie vorgeschlagen ausprobiert, aber ich war sehr verwirrt bei der Beurteilung der P-Werte gegen die NULL-Hypothese.

Ich werde erklären, wie ich kategoriale Variablen interpretiert habe. Ich bin mir nicht sicher, wie relevant es in Ihrem Fall ist. Ich hatte die Antwortvariable Y und zwei Prädiktorvariablen X1 und X2, wobei X2 eine kategoriale Variable mit zwei Ebenen ist, nämlich 1 und 2. Ich habe versucht, ein lineares Modell anzupassen

ols = lm(Y ~ X1 + X2, data=mydata)

Aber ich wollte verstehen, wie unterschiedlich das Niveau von X2 zur obigen Gleichung passt. Ich bin auf eine R-Funktion gestoßen durch ()

by(mydata,X2,function(x) summary(lm(Y~X1,data=x)))

Dieser Code versucht, für jede Ebene von X2 in das lineare Modell zu passen. Dies gab mir alle P-Werte und R-Quadrate, Reststandardfehler, die ich verstehe und interpretieren kann.

Ich bin mir wieder nicht sicher, ob Sie das wollen. Ich habe verschiedene Werte von X2 verglichen, um Y vorherzusagen.


1

Um die Verbindungsstärke zwischen zwei kategorialen Variablen zu messen, würde ich eher die Verwendung einer Kreuztabelle mit der Statistik chisquare vorschlagen

Um die Verbindungsstärke zwischen einer numerischen und einer kategorialen Variablen zu messen, können Sie einen Mittelwertvergleich verwenden, um festzustellen, ob sich diese von einer Kategorie zu einer anderen signifikant ändert


2
Willkommen auf der Site @DaSilvaLionel. Möglicherweise stellen Sie fest, dass oben bereits die Verwendung des Chi-Quadrat-Tests mit zwei kategorialen Variablen vorgeschlagen wurde.
gung
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.