Как нарисовать линию на основе точки и наклона? (Линия SD) - PullRequest
2 голосов
/ 24 января 2020

Чтобы изучить связь между двумя переменными, я хотел бы нарисовать линию SD, которая определяется как

"линия, которая проходит через точку средних значений и поднимается со скоростью одно вертикальное SD для каждого горизонтального SD " Freedman D., Pisani R. & Purves R. (2007). Статистика (4-е изд).

Таким образом, это базовый c вопрос аналити c геометрия: нарисуйте линию с заданной точкой и уклоном. Попытка сделать это abline() кажется наиболее подходящим инструментом. Тем не менее, abline() требует перехвата, хотя моя точка не обязательно на оси Y.

Пример: Изучение связи между weight и mpg в mtcars

data(mtcars)

## calculate means
mean_wt <- mean(mtcars$wt)
mean_mpg <- mean(mtcars$mpg)

## calculate standard deviations
sd_wt <- sd(mtcars$wt)
sd_mpg <- sd(mtcars$mpg)

## scatter plot
plot(x = mtcars$wt, y = mtcars$mpg)

## add the "point of averages"
points(mean_wt, mean_mpg, col = "red", cex = 1.5, pch = 16)

plot

Теперь я хочу нарисовать линию SD следующим образом

sdline

рассчитать наклон линии как отношение SD:

slope <- -1*sd_mpg/sd_wt
## [1] -6.159643

Мой вопрос: дано slope и точка (mean_wt, mean_mpg), как можно нарисовать линию, как на рисунке?

Ответы [ 2 ]

3 голосов
/ 24 января 2020

Вы можете добавить линию, используя «кривую», как показано ниже. Не забудьте включить «add = TRUE»

data(mtcars)

## calculate means
mean_wt <- mean(mtcars$wt)
mean_mpg <- mean(mtcars$mpg)

## calculate standard deviations
sd_wt <- sd(mtcars$wt)
sd_mpg <- sd(mtcars$mpg)

## scatter plot
plot(x = mtcars$wt, y = mtcars$mpg)

## add the "point of averages"
points(mean_wt, mean_mpg, col = "red", cex = 1.5, pch = 19)

slope <- -1*sd_mpg/sd_wt

curve(expr = x*slope + (mean_mpg - slope*mean_wt), add = TRUE, col = 'blue')

, что дает следующий рисунок:

enter image description here

1 голос
/ 24 января 2020

Вы можете рассчитать точку перехвата. Вот функция.

get_intercept <- function(x1, y1, slope) {
    # Point slope formula (y - y1) = slope(x - x1)
    y_intercept = slope * (- x1) + y1
    return(y_intercept)
}

Для вашего примера:

get_intercept(mean_wt, mean_mpg, slope)

Дает:

[1] 39.90773

Теперь вы можете использовать abline:

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