Συσχέτιση στο R: Pearson & Spearman με Matrix Παράδειγμα

Μια διμερή σχέση περιγράφει μια σχέση -ή συσχέτιση- μεταξύ δύο μεταβλητών και. Σε αυτό το σεμινάριο, συζητάμε την έννοια της συσχέτισης και δείχνουμε πώς μπορεί να χρησιμοποιηθεί για τη μέτρηση της σχέσης μεταξύ οποιωνδήποτε δύο μεταβλητών.

Υπάρχουν δύο βασικές μέθοδοι για τον υπολογισμό της συσχέτισης μεταξύ δύο μεταβλητών.

  • Pearson: Παραμετρική συσχέτιση
  • Spearman: Μη παραμετρικός συσχετισμός

Σε αυτό το σεμινάριο, θα μάθετε

  • Συσχέτιση Pearson
  • Συσχέτιση κατάταξης Spearman
  • Πίνακας συσχέτισης
  • Οπτικοποιήστε τον πίνακα συσχέτισης

Συσχέτιση Pearson

Η μέθοδος συσχέτισης Pearson χρησιμοποιείται συνήθως ως πρωταρχικός έλεγχος για τη σχέση μεταξύ δύο μεταβλητών.

Ο συντελεστής συσχέτισης , είναι ένα μέτρο της ισχύος της γραμμικής σχέσης μεταξύ δύο μεταβλητών και. Υπολογίζεται ως εξής:

με

  • , δηλαδή τυπική απόκλιση του
  • , δηλαδή τυπική απόκλιση του

Η συσχέτιση κυμαίνεται μεταξύ -1 και 1.

  • Μια τιμή κοντά ή ίση με 0 σημαίνει μικρή ή καθόλου γραμμική σχέση μεταξύ και.
  • Αντιθέτως, όσο πλησιάζει το 1 ή το -1, τόσο ισχυρότερη είναι η γραμμική σχέση.

Μπορούμε να υπολογίσουμε τη δοκιμή t ως εξής και να ελέγξουμε τον πίνακα διανομής με βαθμό ελευθερίας ισούται με:

Συσχέτιση κατάταξης Spearman

Μια συσχέτιση κατάταξης ταξινομεί τις παρατηρήσεις κατά κατάταξη και υπολογίζει το επίπεδο ομοιότητας μεταξύ της κατάταξης. Μια συσχέτιση κατάταξης έχει το πλεονέκτημα ότι είναι ισχυρή στα ακραία σημεία και δεν συνδέεται με τη διανομή των δεδομένων. Σημειώστε ότι, μια συσχέτιση κατάταξης είναι κατάλληλη για την κανονική μεταβλητή.

Ο συσχετισμός κατάταξης του Spearman, είναι πάντα μεταξύ -1 και 1 με μια τιμή κοντά στο άκρο δείχνει ισχυρή σχέση. Υπολογίζεται ως εξής:

με δηλωμένες τις συνδιακυμάνσεις μεταξύ βαθμού και. Ο παρονομαστής υπολογίζει τις τυπικές αποκλίσεις.

Στο R, μπορούμε να χρησιμοποιήσουμε τη συνάρτηση cor (). Χρειάζονται τρία επιχειρήματα και τη μέθοδο.

cor(x, y, method)

Επιχειρήματα :

  • x: Πρώτο διάνυσμα
  • y: Δεύτερο διάνυσμα
  • μέθοδος: Ο τύπος που χρησιμοποιείται για τον υπολογισμό της συσχέτισης. Τρεις τιμές συμβολοσειράς:
    • "pearson"
    • "kendall"
    • "ακοντιστής"

Ένα προαιρετικό όρισμα μπορεί να προστεθεί εάν τα διανύσματα περιέχουν τιμή που λείπει: use = "complete.obs"

Θα χρησιμοποιήσουμε το σύνολο δεδομένων BudgetUK. Αυτό το σύνολο δεδομένων αναφέρει την κατανομή του προϋπολογισμού των βρετανικών νοικοκυριών μεταξύ 1980 και 1982. Υπάρχουν 1519 παρατηρήσεις με δέκα χαρακτηριστικά, μεταξύ των οποίων:

  • wfood: μοιραστείτε τις δαπάνες μεριδίου φαγητού
  • wfuel: μοιραστείτε την κατανάλωση καυσίμου
  • wcloth: μερίδιο προϋπολογισμού για δαπάνες ρούχων
  • walc: μοιραστείτε τις δαπάνες για το αλκοόλ
  • wtrans: μοιραστείτε τις δαπάνες μεταφοράς
  • wother: μερίδιο δαπανών άλλων αγαθών
  • totexp: συνολικές δαπάνες νοικοκυριού σε λίβρες
  • συνολικό καθαρό εισόδημα νοικοκυριού
  • ηλικία: ηλικία νοικοκυριού
  • παιδιά: αριθμός παιδιών
Παράδειγμα
library(dplyr)PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/british_household.csv"data <-read.csv(PATH)filter(income < 500)mutate(log_income = log(income),log_totexp = log(totexp),children_fac = factor(children, order = TRUE, labels = c("No", "Yes")))select(-c(X,X.1, children, totexp, income))glimpse(data)

Επεξήγηση κώδικα

  • Πρώτα εισάγουμε τα δεδομένα και ρίχνουμε μια ματιά με τη συνάρτηση () από τη βιβλιοθήκη dplyr.
  • Τρεις βαθμοί είναι πάνω από 500K, οπότε αποφασίσαμε να τους αποκλείσουμε.
  • Είναι συνήθης πρακτική η μετατροπή μιας νομισματικής μεταβλητής στο αρχείο καταγραφής. Βοηθά στη μείωση του αντίκτυπου των ακραίων τιμών και μειώνει την ασυμμετρία στο σύνολο δεδομένων.

Παραγωγή:

## Observations: 1,516## Variables: 10## $ wfood  0.4272, 0.3739, 0.1941, 0.4438, 0.3331, 0.3752, 0… ## $ wfuel  0.1342, 0.1686, 0.4056, 0.1258, 0.0824, 0.0481, 0… ## $ wcloth  0.0000, 0.0091, 0.0012, 0.0539, 0.0399, 0.1170, 0… ## $ walc  0.0106, 0.0825, 0.0513, 0.0397, 0.1571, 0.0210, 0… ## $ wtrans  0.1458, 0.1215, 0.2063, 0.0652, 0.2403, 0.0955, 0… ## $ wother  0.2822, 0.2444, 0.1415, 0.2716, 0.1473, 0.3431, 0… ## $ age  25, 39, 47, 33, 31, 24, 46, 25, 30, 41, 48, 24, 2… ## $ log_income  4.867534, 5.010635, 5.438079, 4.605170, 4.605170,… ## $ log_totexp  3.912023, 4.499810, 5.192957, 4.382027, 4.499810,… ## $ children_fac  Yes, Yes, Yes, Yes, No, No, No, No, No, No, Yes,… 

Μπορούμε να υπολογίσουμε τον συντελεστή συσχέτισης μεταξύ μεταβλητών εισοδήματος και wfood με τις μεθόδους "pearson" και "spearman".

cor(data$log_income, data$wfood, method = "pearson")

παραγωγή:

## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")

Παραγωγή:

## [1] -0.2501252 

Πίνακας συσχέτισης

Η συσχέτιση των δύο διαφορών είναι μια καλή αρχή, αλλά μπορούμε να έχουμε μια ευρύτερη εικόνα με την ανάλυση πολλαπλών παραλλαγών. Μια συσχέτιση με πολλές μεταβλητές απεικονίζεται μέσα σε μια μήτρα συσχέτισης . Ένας πίνακας συσχέτισης είναι ένας πίνακας που αντιπροσωπεύει τη συσχέτιση ζευγών όλων των μεταβλητών.

Η συνάρτηση cor () επιστρέφει έναν πίνακα συσχέτισης. Η μόνη διαφορά με τη συσχέτιση των δύο διαφορών είναι ότι δεν χρειάζεται να καθορίσουμε ποιες μεταβλητές. Από προεπιλογή, το R υπολογίζει τη συσχέτιση μεταξύ όλων των μεταβλητών.

Σημειώστε ότι, μια συσχέτιση δεν μπορεί να υπολογιστεί για μεταβλητή παράγοντα. Πρέπει να βεβαιωθούμε ότι απορρίπτουμε κατηγορηματική δυνατότητα πριν περάσουμε το πλαίσιο δεδομένων μέσα στο cor ().

Μια μήτρα συσχέτισης είναι συμμετρική που σημαίνει ότι οι τιμές πάνω από τη διαγώνια έχουν τις ίδιες τιμές με αυτές παρακάτω. Είναι πιο οπτικό να εμφανίζεται το μισό του πίνακα.

Εξαιρούμε το Children_fac επειδή είναι μια μεταβλητή επιπέδου παράγοντα. cor δεν εκτελεί συσχέτιση σε μια κατηγορηματική μεταβλητή.

# the last column of data is a factor level. We don't include it in the codemat_1 <-as.dist(round(cor(data[,1:9]),2))mat_1

Επεξήγηση κώδικα

  • cor (data): Εμφάνιση της μήτρας συσχέτισης
  • γύρος (δεδομένα, 2): Στρογγυλοποιήστε τη μήτρα συσχέτισης με δύο δεκαδικά ψηφία
  • as.dist (): Εμφανίζει μόνο το δεύτερο ημίχρονο

Παραγωγή:

## wfood wfuel wcloth walc wtrans wother age log_income## wfuel 0.11## wcloth -0.33 -0.25## walc -0.12 -0.13 -0.09## wtrans -0.34 -0.16 -0.19 -0.22## wother -0.35 -0.14 -0.22 -0.12 -0.29## age 0.02 -0.05 0.04 -0.14 0.03 0.02## log_income -0.25 -0.12 0.10 0.04 0.06 0.13 0.23## log_totexp -0.50 -0.36 0.34 0.12 0.15 0.15 0.21 0.49

Επίπεδο σημασίας

Το επίπεδο σημασίας είναι χρήσιμο σε ορισμένες περιπτώσεις όταν χρησιμοποιούμε τη μέθοδο pearson ή spearman. Η συνάρτηση rcorr () από τη βιβλιοθήκη Hmisc υπολογίζει για μας την τιμή p. Μπορούμε να κατεβάσουμε τη βιβλιοθήκη από το conda και να αντιγράψουμε τον κώδικα για να την επικολλήσουμε στο τερματικό:

conda install -c r r-hmisc 

Το rcorr () απαιτεί ένα πλαίσιο δεδομένων να αποθηκεύεται ως μήτρα. Μπορούμε να μετατρέψουμε τα δεδομένα μας σε έναν πίνακα πριν από τον υπολογισμό του πίνακα συσχέτισης με την τιμή p.

library("Hmisc")data_rcorr <-as.matrix(data[, 1: 9])mat_2 <-rcorr(data_rcorr)# mat_2 <-rcorr(as.matrix(data)) returns the same output

Το αντικείμενο λίστας mat_2 περιέχει τρία στοιχεία:

  • r: Έξοδος του πίνακα συσχέτισης
  • n: Αριθμός παρατήρησης
  • P: τιμή p

Μας ενδιαφέρει το τρίτο στοιχείο, η τιμή p. Είναι σύνηθες να εμφανίζεται ο πίνακας συσχέτισης με την τιμή p αντί για τον συντελεστή συσχέτισης.

p_value <-round(mat_2[["P"]], 3)p_value

Επεξήγηση κώδικα

  • mat_2 [["P"]]: Οι τιμές p αποθηκεύονται στο στοιχείο που ονομάζεται P
  • στρογγυλό (mat_2 [["P"]], 3): Στρογγυλοποιήστε τα στοιχεία με τρία ψηφία

Παραγωγή:

wfood wfuel wcloth walc wtrans wother age log_income log_totexpwfood NA 0.000 0.000 0.000 0.000 0.000 0.365 0.000 0wfuel 0.000 NA 0.000 0.000 0.000 0.000 0.076 0.000 0wcloth 0.000 0.000 NA 0.001 0.000 0.000 0.160 0.000 0walc 0.000 0.000 0.001 NA 0.000 0.000 0.000 0.105 0wtrans 0.000 0.000 0.000 0.000 NA 0.000 0.259 0.020 0wother 0.000 0.000 0.000 0.000 0.000 NA 0.355 0.000 0age 0.365 0.076 0.160 0.000 0.259 0.355 NA 0.000 0log_income 0.000 0.000 0.000 0.105 0.020 0.000 0.000 NA 0log_totexp 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 NA

Οπτικοποιήστε τον πίνακα συσχέτισης

Ένας χάρτης θερμότητας είναι ένας άλλος τρόπος για να δείξετε μια μήτρα συσχέτισης. Η βιβλιοθήκη GGally είναι μια επέκταση του ggplot2. Προς το παρόν, δεν είναι διαθέσιμο στη βιβλιοθήκη conda. Μπορούμε να το εγκαταστήσουμε απευθείας στην κονσόλα.

install.packages("GGally")

Η βιβλιοθήκη περιλαμβάνει διάφορες συναρτήσεις για την εμφάνιση των συνοπτικών στατιστικών, όπως η συσχέτιση και η κατανομή όλων των μεταβλητών σε μια μήτρα.

Η συνάρτηση ggcorr () έχει πολλά ορίσματα. Θα παρουσιάσουμε μόνο τα επιχειρήματα που θα χρησιμοποιήσουμε στο σεμινάριο:

Η συνάρτηση ggcorr

ggcorr(df, method = c("pairwise", "pearson"),nbreaks = NULL, digits = 2, low = "#3B9AB2",mid = "#EEEEEE", high = "#F21A00",geom = "tile", label = FALSE,label_alpha = FALSE)

Επιχειρήματα:

  • df : Χρησιμοποιήθηκε σύνολο δεδομένων
  • μέθοδος : Τύπος για τον υπολογισμό της συσχέτισης. Από προεπιλογή, υπολογίζονται ζεύγη και Pearson
  • nbreaks : Επιστρέψτε ένα κατηγοριακό εύρος για το χρωματισμό των συντελεστών. Από προεπιλογή, δεν υπάρχει διακοπή και η χρωματική κλίση είναι συνεχής
  • ψηφία : Γύρος του συντελεστή συσχέτισης. Από προεπιλογή, ορίστε σε 2
  • χαμηλή : Ελέγξτε το χαμηλότερο επίπεδο του χρωματισμού
  • mid : Ελέγξτε το μεσαίο επίπεδο του χρωματισμού
  • υψηλή : Ελέγξτε το υψηλό επίπεδο του χρωματισμού
  • geom : Ελέγξτε το σχήμα του γεωμετρικού ορίσματος. Από προεπιλογή, "πλακίδιο"
  • ετικέτα : Boolean τιμή. Εμφάνιση ή όχι της ετικέτας. Από προεπιλογή, ορίστε σε «FALSE»

Βασικός χάρτης θερμότητας

Το πιο βασικό σχέδιο του πακέτου είναι ένας χάρτης θερμότητας. Το υπόμνημα του γραφήματος δείχνει ένα χρώμα διαβάθμισης από - 1 έως 1, με ζεστό χρώμα που δείχνει έντονη θετική συσχέτιση και κρύο χρώμα, μια αρνητική συσχέτιση.

library(GGally)ggcorr(data)

Επεξήγηση κώδικα

  • ggcorr (δεδομένα): Απαιτείται μόνο ένα όρισμα, το οποίο είναι το όνομα του πλαισίου δεδομένων. Οι μεταβλητές επιπέδου παράγοντα δεν περιλαμβάνονται στο διάγραμμα.

Παραγωγή:

Προσθέστε έλεγχο στον χάρτη θερμότητας

Μπορούμε να προσθέσουμε περισσότερα στοιχεία ελέγχου στο γράφημα.

ggcorr(data,nbreaks = 6,low = "steelblue",mid = "white",high = "darkred",geom = "circle")

Επεξήγηση κώδικα

  • nbreaks = 6: σπάστε το μύθο με 6 τάξεις.
  • low = "steelblue": Χρησιμοποιήστε πιο ανοιχτά χρώματα για αρνητική συσχέτιση
  • mid = "white": Χρησιμοποιήστε λευκά χρώματα για συσχέτιση μεσαίων περιοχών
  • high = "darkred": Χρησιμοποιήστε σκούρα χρώματα για θετικό συσχετισμό
  • geom = "circle": Χρησιμοποιήστε τον κύκλο ως σχήμα των παραθύρων στον χάρτη θερμότητας. Το μέγεθος του κύκλου είναι ανάλογο με την απόλυτη τιμή του συσχετισμού.

Παραγωγή:

Προσθέστε ετικέτα στον χάρτη θερμότητας

Το GGally μας επιτρέπει να προσθέσουμε μια ετικέτα μέσα στα παράθυρα.

ggcorr(data,nbreaks = 6,label = TRUE,label_size = 3,color = "grey50")

Επεξήγηση κώδικα

  • label = TRUE: Προσθέστε τις τιμές των συντελεστών συσχέτισης στο χάρτη θερμότητας.
  • color = "grey50": Επιλέξτε το χρώμα, δηλαδή γκρι
  • label_size = 3: Ορίστε το μέγεθος της ετικέτας ίσο με 3

Παραγωγή:

ggpairs

Τέλος, παρουσιάζουμε μια άλλη λειτουργία από τη βιβλιοθήκη GGaly. Ggpair. Παράγει ένα γράφημα σε μορφή μήτρας. Μπορούμε να εμφανίσουμε τρία είδη υπολογισμών μέσα σε ένα γράφημα. Ο πίνακας είναι μια διάσταση, με ίσο με τον αριθμό των παρατηρήσεων. Το πάνω / κάτω μέρος εμφανίζει παράθυρα και στη διαγώνια. Μπορούμε να ελέγξουμε ποιες πληροφορίες θέλουμε να δείξουμε σε κάθε μέρος του πίνακα. Ο τύπος για το ggpair είναι:

ggpair(df, columns = 1: ncol(df), title = NULL,upper = list(continuous = "cor"),lower = list(continuous = "smooth"),mapping = NULL)

Επιχειρήματα :

  • df : Χρησιμοποιήθηκε σύνολο δεδομένων
  • στήλες : Επιλέξτε τις στήλες για να σχεδιάσετε το διάγραμμα
  • title : Συμπεριλάβετε έναν τίτλο
  • άνω : Ελέγξτε τα κουτιά πάνω από τη διαγώνια του γραφήματος. Πρέπει να παρέχετε τον τύπο υπολογισμών ή γραφήματος για επιστροφή. Εάν είναι συνεχές = "cor", ζητάμε από τον R να υπολογίσει τη συσχέτιση. Σημειώστε ότι, το όρισμα πρέπει να είναι μια λίστα. Μπορούν να χρησιμοποιηθούν και άλλα επιχειρήματα, ανατρέξτε στο [vignette] ("http://ggobi.github.io/ggally/#custom_functions") για περισσότερες πληροφορίες.
  • Κάτω : Ελέγξτε τα πλαίσια κάτω από τη διαγώνια.
  • Χαρτογράφηση : Υποδεικνύει την αισθητική του γραφήματος. Για παράδειγμα, μπορούμε να υπολογίσουμε το γράφημα για διαφορετικές ομάδες.

Διμερή ανάλυση με ggpair με ομαδοποίηση

Το επόμενο γράφημα απεικονίζει τρεις πληροφορίες:

  • Η μήτρα συσχέτισης μεταξύ μεταβλητής log_totexp, log_income, ηλικίας και wtrans ομαδοποιείται κατά πόσον το νοικοκυριό έχει παιδί ή όχι.
  • Σχεδιάστε την κατανομή κάθε μεταβλητής ανά ομάδα
  • Εμφανίστε το διάγραμμα διασποράς με την τάση ανά ομάδα
library(ggplot2)ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"), title = "Bivariate analysis of revenue expenditure by the British household", upper = list(continuous = wrap("cor",size = 3)),lower = list(continuous = wrap("smooth",alpha = 0.3,size = 0.1)),mapping = aes(color = children_fac))

Επεξήγηση κώδικα

  • στήλες = c ("log_totexp", "log_income", "age", "wtrans"): Επιλέξτε τις μεταβλητές που θα εμφανίζονται στο γράφημα
  • title = "Διμερή ανάλυση των εσόδων από το βρετανικό νοικοκυριό": Προσθέστε έναν τίτλο
  • άνω = λίστα (): Ελέγξτε το πάνω μέρος του γραφήματος. Πάνω από τη διαγώνια
  • συνεχής = αναδίπλωση ("cor", μέγεθος = 3)): Υπολογίστε τον συντελεστή συσχέτισης. Τυλίγουμε το όρισμα συνεχώς μέσα στη συνάρτηση wrap () για να ελέγξουμε την αισθητική του γραφήματος (δηλαδή μέγεθος = 3) -lower = list (): Ελέγξτε το κάτω μέρος του γραφήματος. Δηλαδή κάτω από τη διαγώνια.
  • συνεχής = αναδίπλωση ("ομαλή", άλφα = 0,3, μέγεθος = 0,1): Προσθέστε ένα διάγραμμα σκέδασης με γραμμική τάση. Τυλίγουμε το όρισμα συνεχώς μέσα στη συνάρτηση wrap () για να ελέγξουμε την αισθητική του γραφήματος (δηλ. Μέγεθος = 0,1, άλφα = 0,3)
  • χαρτογράφηση = aes (χρώμα = παιδιά_fac): Θέλουμε κάθε τμήμα του γραφήματος να στοιβάζεται από τη μεταβλητή Children_fac, η οποία είναι μια κατηγορηματική μεταβλητή που παίρνει την τιμή 1 εάν το νοικοκυριό δεν έχει παιδιά και 2 διαφορετικά

Παραγωγή:

Διμερή ανάλυση με ggpair με μερική ομαδοποίηση

Το παρακάτω γράφημα είναι λίγο διαφορετικό. Αλλάζουμε τη θέση της χαρτογράφησης στο άνω όρισμα.

ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"),title = "Bivariate analysis of revenue expenditure by the British household",upper = list(continuous = wrap("cor",size = 3),mapping = aes(color = children_fac)),lower = list(continuous = wrap("smooth",alpha = 0.3,size = 0.1)))

Επεξήγηση κώδικα

  • Ακριβής ίδιος κωδικός με το προηγούμενο παράδειγμα εκτός από:
  • χαρτογράφηση = aes (color = children_fac): Μετακίνηση της λίστας στην άνω = λίστα (). Θέλουμε μόνο τον υπολογισμό να συσσωρεύεται ανά ομάδα στο πάνω μέρος του γραφήματος.

Παραγωγή:

Περίληψη

Μπορούμε να συνοψίσουμε τη λειτουργία στον παρακάτω πίνακα:

βιβλιοθήκη

Σκοπός

μέθοδος

κώδικας

Βάση

αμφίδρομη συσχέτιση

Πέρσον

cor(dfx2, method = "pearson")

Βάση

αμφίδρομη συσχέτιση

Ακοντιστής

cor(dfx2, method = "spearman")

Βάση

Πολυμεταβλητή συσχέτιση

αχλάδι

cor(df, method = "pearson")

Βάση

Πολυμεταβλητή συσχέτιση

Ακοντιστής

cor(df, method = "spearman")

Hmisc

Τιμή P

rcorr(as.matrix(data[,1:9]))[["P"]]

Γκάλι

χάρτης θερμότητας

ggcorr(df)

Πολλαπλές παραλλαγές

cf code below

ενδιαφέροντα άρθρα...