Как получить R^2 с помощью ggpairs?

Как заставить ggpairs сообщать о верхнем углу с R ^ 2 вместо корреляции?

library(GGally)    
ggpairs(mtcars[c("mpg", "disp", "hp", "drat", "wt", "qsec")])

Я думаю, что вам нужно будет написать пользовательскую функцию — см. cor_fn здесь для примера. Вам нужно будет изменить корреляции на lm/r^2. Помните, что в отличие от корреляции r ^ 2 предполагает зависимость, поэтому это может быть неразумно.

user20650 18.12.2020 18:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
1
451
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что вам нужно будет написать пользовательскую функцию, показанную ниже. (Одно предостережение в отношении этого подхода заключается в том, что в отличие от корреляции r ^ 2 предполагает зависимую переменную, поэтому это может быть неразумно).

library(GGally) # version 1.5.0

lm_fun <- function(data, mapping, ndp=2, ...){

    # Extract the relevant columns as data
    x <- eval_data_col(data, mapping$x)
    y <- eval_data_col(data, mapping$y)

    # Calculate the r^2 & format output
    m <- summary(lm(y ~ x))
    lbl <- paste("r^2: ", formatC(m$r.squared, digits=ndp, format = "f"))

    # Write out label which is centered at x&y position
    ggplot(data=data, mapping=mapping) + 
      annotate("text", x=mean(x, na.rm=TRUE), y=mean(y, na.rm=TRUE), label=lbl, parse=TRUE, ...)+
      theme(panel.grid = element_blank()) 
  }

# Call
ggpairs(mtcars[c("mpg", "disp", "hp", "drat", "wt", "qsec")], 
        upper=list(continuous=lm_fun))

Обновлено: Не могли бы вы объяснить, как добавить новую строку в lbl между r^2 и значением?

Вы можете использовать atop, изменив соответствующий код на:

lbl <- substitute(atop(~r^2*':', v), 
                  list(v=formatC(m$r.squared, digits=ndp, format = "f")))

или

 v <- formatC(m$r.squared, digits=ndp, format = "f")
 lbl <- bquote(atop(~r^2*':', .(v))) 

Затем вам нужно настроить вызов annotate, чтобы правильно проанализировать метку.

annotate("text", x=mean(x, na.rm=TRUE), y=mean(y, na.rm=TRUE), 
          label=deparse(lbl), parse=TRUE, hjust=0, ...)

Я добавил hjust=0 в попытке выровнять текст по левому краю, но это не совсем сработало.

Не могли бы вы помочь объяснить, как добавить новую строку в lbl между r ^ 2 и значением? Добавление sep='\n' в paste(), lbl <- paste("r^2: ", formatC(m$r.squared, digits=ndp, format = "f"), sep='\n' ) не работает.

ju. 21.12.2020 23:33

@ю. ; пожалуйста, смотрите обновление fr частичный ответ на комментарий

user20650 22.12.2020 02:00

Другие вопросы по теме