R ggplot2 есть эквивалент диаграммы.Корреляционная функция в пакете анализа производительности?

#r #ggplot2

Вопрос:

введите описание изображения здесьВ течение нескольких лет я использовал (превосходную) функцию диаграммы.корреляции в PerformanceAnalytics для подготовки сводных графиков для многомерных данных. Однако, похоже, у него нет вариантов использования взвешенных данных (с которыми мне всегда приходится иметь дело). Я начинаю изучать синтаксис ggplot2, поскольку в нем, похоже, есть возможность взвешивания данных в большинстве функций. Мне интересно, существует ли ggplot2, эквивалентный chart.correlation (см. Изображение ниже), или мне придется создавать свой собственный? Пример кода из PerformanceAnalytics ниже, который быстро создает очень богатый данными и интерпретацией график.

 data(managers)
chart.Correlation(managers[,1:8], histogram=TRUE, pch=" ")
 

Комментарии:

1. ggplot2 он очень мощный и гибкий, и при наличии достаточного количества знаний его можно использовать для создания многих типов сюжетов. Я не знаю о PerformanceAnalytics пакете, но если вы покажете желаемый результат, которого хотите достичь, ggplot2 я уверен, что найдется способ

Ответ №1:

Если вы хотите использовать ggplot2 функциональность, вы можете использовать GGally::ggpairs следующее:

 library(ggplot2)
library(GGally)

ggpairs(data.table(PerformanceAnalytics::managers)[,1:8])
 

Вы можете определить функции для нижнего, диагонального и верхнего участков. Вот простой пример, где я определяю функцию для нижних графиков, которая является простой ggplot с geom_point и geom_smooth

 lower_plots <- function(data, mapping, ...) {
  ggplot(data = data, mapping = mapping)  
    geom_point(color = "black")  
    geom_smooth(method="gam",...)
}  
ggpairs(
  data.table(PerformanceAnalytics::managers)[,1:8],
  diag = list(continuous = wrap("barDiag", bins=50)),
  lower = list(continuous = wrap(lower_plots, color="red", se=F))
)
 

Если бы у вас был вектор весов ( wts ), вы могли бы настроить свою корреляцию на верхних панелях, создав пользовательскую функцию для верхнего:

 upper_plots <- function(data,mapping, weights) {
  # extract x and y data from mapping
  x <- data[[rlang::get_expr(mapping[["x"]])]]
  y <- data[[rlang::get_expr(mapping[["y"]])]]
  # get weighted correlation
  res <- round(cov.wt(data.frame(x,y), wt=weights, cor=T)$cor[1,2],2)
  # plot weighted correlation as a label in a blank plot
  ggplot()   theme_void()   geom_text(aes(0,0,label=res))
}
 

затем, в рамках вашего ggpairs вызова, вы установите значение upper для обернутой версии этой функции

 upper = list(continuous = wrap(upper_plots, weights = wts))
 

Комментарии:

1. Неплохо… просто нужно было добавить библиотеку строк(data.table)! Ожидайте, что теперь мне просто нужно провести небольшое исследование о том, как работать со взвешенными переменными (поиск гистограмм и корреляций, взвешенных по данным).

2. @Markm0705 если у вас есть небольшой набор данных с примерами весов, чтобы мне было легче понять, что вы на самом деле хотите сделать, я был бы рад попытаться помочь

3. Спасибо вам за ваше предложение о помощи. Обычно информация, с которой я сталкиваюсь, взвешивается по поддержке (площадь, длина, масса и так далее). Если вы запустите эти четыре строки, чтобы добавить столбец веса в набор данных «менеджеры», который даст разумный прокси-сервер во фрейме данных «df». df < — (Анализ производительности::менеджеры) df < — df[complete.cases(df),] Wts < — rnorm(длина(df$HAM1), среднее значение = 5, sd = 1) df$Wts

4. @Markm0705 добавил пример пользовательской функции для верхнего, которая получает взвешенную корреляцию, а затем вызывает эту функцию в upper