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

У меня есть фрейм данных x1, который был сгенерирован с помощью следующего фрагмента кода,

x <- c(1:10)
y <- x^3
z <- y-20
s <- z/3
t <- s*6
q <- s*y
x1 <- cbind(x,y,z,s,t,q)
x1 <- data.frame(x1)

Я хотел бы извлечь перехват оси Y и наклон линейной регрессии подходит для данных,

    x    y   z          s    t             q
1   1    1 -19  -6.333333  -38     -6.333333
2   2    8 -12  -4.000000  -24    -32.000000
3   3   27   7   2.333333   14     63.000000
4   4   64  44  14.666667   88    938.666667
5   5  125 105  35.000000  210   4375.000000
6   6  216 196  65.333333  392  14112.000000
7   7  343 323 107.666667  646  36929.666667
8   8  512 492 164.000000  984  83968.000000
9   9  729 709 236.333333 1418 172287.000000
10 10 1000 980 326.666667 1960 326666.666667 

Я использую следующие коды, чтобы растопить и построить три столбца данных,

xm <- melt(x1, id=names(x1)[1], measure=names(x1)[c(2, 4, 5)], variable = "cols")
plt <- ggplot(xm) +
    geom_point(aes(x=x,y= value, color=cols), size=3) +
    labs(x = "x", y = "y") 

Теперь мне нужно получить линейный метод наименьших квадратов, подходящий для всех данных отдельно, и сохранить полученный перехват и наклон в новом фрейме данных.

я использую plt + geom_abline() но я не получаю желаемого результата. Может ли кто-нибудь дать мне знать, как решить эту проблему.

1 ответ

Решение

Я полагаю, вы ищете geom_smooth, Если вы вызываете эту функцию с аргументом method = "lm", он рассчитает линейное соответствие для всех групп:

ggplot(xm, aes(x = x, y = value, color = cols)) +
  geom_point(size = 3) +
  labs(x = "x", y = "y") + 
  geom_smooth(method = "lm", se = FALSE)

введите описание изображения здесь

Вы также можете указать квадратичное соответствие с poly функция и formula аргумент:

ggplot(xm, aes(x = x, y = value, color=cols)) +
  geom_point(size = 3) +
  labs(x = "x", y = "y") + 
  geom_smooth(method = "lm", se = FALSE, formula = y ~ poly(x, 2))

введите описание изображения здесь


Чтобы извлечь соответствующие коэффициенты регрессии, вы можете использовать этот подход:

# create a list of coefficients
fits <- by(xm[-2], xm$cols, function(i) coef(lm(value ~ x, i)))

# create a data frame
data.frame(cols = names(fits), do.call(rbind, fits))

#   cols X.Intercept.         x
# y    y   -277.20000 105.40000
# s    s    -99.06667  35.13333
# t    t   -594.40000 210.80000

Если вы хотите квадратичную посадку, просто замените value ~ x с value ~ poly(x, 2),

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