линейная регрессия с использованием lm () - удивлен результатом

Я применил линейную регрессию к имеющимся у меня данным, используя функцию lm. Все работает (нет сообщения об ошибке), но результат меня почему-то удивил: у меня сложилось впечатление, что R "пропускает" группу точек, т.е. точка пересечения и наклон не подходят. Например, я имею в виду группу точек с координатами x = 15-25, y = 0-20.

Мои вопросы:

  • есть ли функция для сравнения соответствия с «ожидаемыми» коэффициентами и «lm-вычисленными» коэффициентами?
  • Я сделал глупую ошибку при кодировании, заставив lm сделать это?

После некоторых ответов: дополнительная информация о x и y

x и y - визуальные оценки симптомов болезни. У них обоих одинаковая неуверенность. График данных с линейной регрессией и аббревиатурой ожидаемых результатов

Данные и код находятся здесь:

x1=c(24.0,23.9,23.6,21.6,21.0,20.8,22.4,22.6,
     21.6,21.2,19.0,19.4,21.1,21.5,21.5,20.1,20.1,
     20.1,17.2,18.6,21.5,18.2,23.2,20.4,19.2,22.4,
     18.8,17.9,19.1,17.9,19.6,18.1,17.6,17.4,17.5,
     17.5,25.2,24.4,25.6,24.3,24.6,24.3,29.4,29.4,
     29.1,28.5,27.2,27.9,31.5,31.5,31.5,27.8,31.2,
     27.4,28.8,27.9,27.6,26.9,28.0,28.0,33.0,32.0,
     34.2,34.0,32.6,30.8)

y1=c(100.0,95.5,93.5,100.0,98.5,99.5,34.8,
     45.8,47.5,17.4,42.6,63.0,6.9,12.1,30.5,
     10.5,14.3,41.1, 2.2,20.0,9.8,3.5,0.5,3.5,5.7,
     3.1,19.2,6.4, 1.2, 4.5, 5.7, 3.1,19.2, 6.4,
     1.2,4.5,81.5,70.5,91.5,75.0,59.5,73.3,66.5,
     47.0,60.5,47.5,33.0,62.5,87.0,86.0,77.0,
     86.0,83.0,78.5,83.0,83.5,73.0,69.5,82.5,78.5,
     84.0,93.5,83.5,96.5,96.0,97.5)   



## x11()
plot(x1,y1,xlim=c(0,35),ylim=c(0,100))

# linear regression
reg_lin=lm(y1 ~ x1)
abline(reg_lin,lty="solid", col="royalblue")
text(12.5,25,labels="R result",col="royalblue", cex=0.85)
text(12.5,20,labels=bquote(y== .(5.26)*x - .(76)),col="royalblue", cex=0.85)

# result I would have imagined
abline(a=-150,b=8,lty="dashed", col="red")
text(27.5,25,labels="What I think is better",col="red", cex=0.85)
text(27.5,20,labels=bquote(y== .(8)*x - .(150)),col="red", cex=0.85)

person NOTM    schedule 06.08.2015    source источник
comment
Просто вычислите сумму квадратов остатков с вашим предполагаемым наилучшим соответствием и полученным lm.   -  person MichaelChirico    schedule 06.08.2015
comment
Как можно сказать, что пересечение и наклон не подходят? а если нет, то по какой модели они таковы: линейная, лёссовая, обобщенная и т. д. и т. д.?   -  person SabDeM    schedule 06.08.2015
comment
Спасибо за ответы. @ SabDeM: Я имею в виду линейную модель. Я не уверен, что пересечение и наклон не подходят лучше всего, но я удивлен, что линия регрессии не проходит между точками (особенно, кажется, что отсутствует группа точек внизу графика). Но это, конечно, только впечатление. @MichaelChirico: есть ли функция для этого?   -  person NOTM    schedule 06.08.2015
comment
ваша красная линия выглядит так, как будто это то, что вы получили бы из общего наименьших квадратов (минимизируя расстояние в обоих направлениях)   -  person Rorschach    schedule 06.08.2015
comment
@nongkrong Я думаю, вы имеете в виду полное абсолютное отклонение, а это другое. смотри мой ответ.   -  person MichaelChirico    schedule 06.08.2015
comment
@MichaelChirico нет, я имел в виду метод наименьших квадратов, или ортогональную регрессию. похоже, хотя   -  person Rorschach    schedule 06.08.2015
comment
@nongkrong интересно, никогда об этом не слышал.   -  person MichaelChirico    schedule 06.08.2015
comment
@nongkrong для справки, я бы сформулировал это как минимизацию ортогонального расстояния от прогноза, как прекрасно проиллюстрировано здесь   -  person MichaelChirico    schedule 06.08.2015
comment
Что касается того, что вы думаете, лучше: поймите, наш мозг - мощные визуализаторы. Что кажется лучше, так это линия, где все точки расположены ближе по x и y. Метод наименьших квадратов рассматривает только ошибки в y. Если вы хотите рассмотреть ошибку в обоих измерениях, возможно, посмотрите на Всего наименьших квадратов или что-то в этом роде. похожий.   -  person Mike Williamson    schedule 06.08.2015
comment
отличный вопрос, хорошие ответы (может быть, немного лучше для CrossValidated ...)   -  person Ben Bolker    schedule 06.08.2015


Ответы (2)


Попробуй это:

reg_lin_int <- reg_lin$coefficients[1]
reg_lin_slp <- reg_lin$coefficients[2]

sum((y1 - (reg_lin_int + reg_lin_slp*x1)) ^ 2)
# [1] 39486.33
sum((y1 - (-150 + 8 * x1)) ^ 2)
# [1] 55583.18

Сумма квадратов остатков ниже под lm линией соответствия. Этого следовало ожидать, поскольку reg_lin_int и reg_lin_slp гарантированно произведут минимальную общую квадратичную ошибку.

Интуитивно мы знаем, что оценки квадратов функций потерь чувствительны к выбросам. Ему «не хватает» группы внизу, потому что она приближается к группе в верхнем левом углу, которая находится намного дальше - и квадрат расстояния придает этим точкам больший вес.

Фактически, если мы используем регрессию наименьших абсолютных отклонений (т. Е. Укажите функцию абсолютных потерь вместо квадрат), результат намного ближе к вашему предположению:

library(quantreg)
lad_reg <- rq(y1 ~ x1)

парень

(Совет от профессионалов: используйте lwd, чтобы сделать ваши графики более более читабельными)

Еще ближе к тому, что вы имели в виду, является Всего наименьших квадратов, как упомянул @nongkrong и @MikeWilliamson. Вот результат TLS для вашего образца:

v <- prcomp(cbind(x1, y1))$rotation
bbeta <- v[-ncol(v), ncol(v)] / v[1, 1]
inter <- mean(y1) - bbeta * mean(x1)

tls

person MichaelChirico    schedule 06.08.2015
comment
Итак, код такой простой. Большое спасибо. Честно говоря, я очень озадачен: как можно минимизировать сумму квадратов, если на линии регрессии отсутствует группа точек (опять же, группа внизу)? Штраф (по сумме квадратов) будет трудно компенсировать. - person NOTM; 06.08.2015
comment
@NOTM см. Обновление. Речь идет о функции потерь, которую выбрала ваша интуиция. - person MichaelChirico; 06.08.2015
comment
Хорошо, еще раз спасибо! Я читал страницы, посвященные общему количеству наименьших квадратов, и набирал код, чтобы показать результаты OLS, LAD и TLS на одной и той же графике. Похоже, ты сделал это быстрее. Еще раз спасибо. - person NOTM; 06.08.2015
comment
@NOTM Имейте в виду: 2 ^ 2 - 1 ^ 2 = 3, но 50 ^ 2 - 49 ^ 2 = 99. Поэтому при использовании метода наименьших квадратов часто полезно попытаться приблизить линию к выбросам, чтобы уменьшить огромная разница между предсказанием и наблюдаемым значением немного, так как это уменьшит квадратичную ошибку намного больше, чем попытка подогнать линию еще ближе к точкам, которые она уже хорошо подходит. Итак, посмотрите, что делает ваша версия наилучшего соответствия (с точки зрения вертикальной ошибки) по сравнению с методом наименьших квадратов, наилучшим образом подходящим для этих выбросов около x = 20, y = 100. - person Dason; 01.01.2016

У вас уже есть хороший ответ, но, возможно, это тоже поможет:

Как вы знаете, OLS минимизирует сумму квадратов ошибок в направлении оси y. Это означает, что неопределенность ваших значений x незначительна, что часто имеет место. Но, возможно, это не относится к вашим данным. Если мы предположим, что неопределенности в x и y равны, и проведем регрессию Деминга, мы получим соответствие, более похожее на то, что вы ожидали.

library(MethComp)
dem_reg <- Deming(x1, y1)
abline(dem_reg[1:2], col = "green")

итоговый сюжет

Вы не предоставляете подробную информацию о своих данных. Таким образом, это может быть полезно или нет.

person Roland    schedule 06.08.2015
comment
Роланд, @MikeWilliamson: вы правы. Я сделал OLS, потому что это техника регрессии, которую я знаю, а не то, что мне следует использовать. В случае с моими данными x и y являются визуальными оценками симптомов болезни: другими словами, неопределенность одинакова для x и y. Так что да, TLS гораздо более уместен. Спасибо вам обоим. - person NOTM; 06.08.2015
comment
Тогда это не имеет отношения к вам, но я все же должен упомянуть об этом: регрессия Деминга позволяет вам указать соотношение неопределенностей по x и y (в случае, если они не равны). - person Roland; 06.08.2015
comment
Хорошо, спасибо, я тоже поищу это! Сегодня многому научился. - person NOTM; 06.08.2015
comment
это хорошее объяснение деминга. есть ли простой способ сделать деминг с абсолютной функцией потерь? - person MichaelChirico; 07.08.2015