Как построить линии линейной регрессии поверх графиков, созданных с помощью функции «пар» - PullRequest
1 голос
/ 14 июня 2019

У меня есть 6 графиков рассеяния, созданных с использованием функции «пар», и я хочу построить линию линейной регрессии для каждого графика рассеяния в верхней части каждого соответствующего графика рассеяния.

Я попытался написать свою собственную функциюи использование этой функции в качестве аргумента для upper.panel

Это код, который создает мои диаграммы рассеяния на верхней диагонали.Каждый цвет представляет различный класс цветка ириса.

pairs(iris_data_excel[1:4], lower.panel=NULL, col=c("red","blue","green") 
[class_to_number])

График, созданный из приведенного выше кода

Это функция, которую я написал и пытался использовать в качестве аргумента для upper.panel

upper_panel_regression_line = function(x,y){
  linear_regression = lm(x, y)
  linear_regression_line = abline(linear_regression)
}

Здесь я ввожу функцию для аргумента "upper.panel"

pairs(iris_data_excel[1:4], lower.panel=NULL, upper.panel = 
upper_panel_regression_line, col=c("red","blue","green")[class_to_number])

Это ошибка, которую я получаю

Error in lower.panel(...)
unused argument (col = c("red", "blue", "green")[class_to_number])

Пример, который можно использовать для воспроизведенияграфик с использованием встроенного набора данных радужной оболочки:

#Extracts the iris species column from the iris dataset
iris_class = iris$Species

#Change the class from characters to numerical values to be used for
#indexing
# #1 = Iris-setosa
# #2 = Iris-versicolor
# #3 = Iris-virginica
class_to_number = as.numeric(factor(iris_class))

#Scatter plot matrix
pairs(iris[1:4], lower.panel=NULL, col=c("red","blue","green") 
[class_to_number])

1 Ответ

0 голосов
/ 14 июня 2019

Вот как вы можете обновить свою функцию

upper_panel_regression_line = function(x,y, ...){
  points(x,y,...)
  linear_regression = lm(y~x)
  linear_regression_line = abline(linear_regression)
}


pairs(iris[1:4], lower.panel=NULL, upper.panel = 
        upper_panel_regression_line, col=c("red","blue","green")[class_to_number])

Так как вы заменяете функцию upper.panel, вам нужно затем нарисовать точки самостоятельно, для чего и существует points().Кроме того, ваша функция должна принять параметр col, который мы делаем через ... Наконец, мы используем формулу с lm(), как и ожидалось.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...