Регрессия в R - PullRequest
       8

Регрессия в R

0 голосов
/ 03 мая 2020

Я пытаюсь сформировать регрессионную модель в R вида Y = A + BX.

x<-rpois(100, 50);
y<-rpois(100, 100);

df = cbind.data.frame(x, y, x*y, x^2, x^3, x^4, y*x^2);

plot(y~x, col = "black", data = df);

regmodel1<-lm(y~x, data = df)

abline(regmodel1, lwd=3, col="red")

coef1<-solve(rbind(c(1*100, sum(df$x)), c(sum(df$x), sum(df$`x^2`))), cbind(c(sum(df$y), sum(df$`x * y`))));

eq1=function(x){coef1[1]+coef1[2]*x}

par(new=TRUE)

plot(eq1, lwd=3, col="blue", axes=FALSE)

, но с использованием команды lm и концепции нормализованных уравнений

enter image description here

дают две очень разные линии регрессии.

enter image description here

почему ....?

1 Ответ

1 голос
/ 03 мая 2020

Обе линии практически одинаковы с небольшой разницей между прогнозируемыми и фактическими значениями. Поскольку вы сохранили ось = ЛОЖЬ, вы не сможете увидеть разницу в масштабе. Если вы можете установить предел оси Y одинаково для обоих графиков, вы можете увидеть линии, появляющиеся вместе с небольшой разницей в наклоне и пересечении.

Кстати, я не вижу причины для ручного расчета коэффициентов, когда вы можете получить, запустив regmodel1$coefficients. Кроме того, вы создаете пользовательскую функцию function(x), всякий раз, когда вы используете функцию, вам нужно вызвать функцию x, например eq1(df$x). Поскольку вы не назвали значения, график принял распределение от 0 до 1. Поэтому, когда вы рисуете вторую, сохраняя ось = TRUE, вы могли видеть ось x между 0 и 1 вместо исходных значений x.

PS: вместо function(x){coef1[1]+coef1[2]*x} вы можете использовать predict(regmodel1)

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