функция для взвешенных оценок методом наименьших квадратов

Есть ли в R функция взвешенных наименьших квадратов? В частности, я ищу что-то, что вычисляет точку пересечения и наклон.

Наборы данных

  1. 1 3 5 7 9 11 14 17 19 25 29
  2. 17 31 19 27 31 62 58 35 29 21 18
  3. 102153 104123 96564 125565 132255 115454 114555 132255 129564 126455 124578

Зависимая переменная - это набор данных 3, а наборы данных 1 и 2 - независимые переменные.


person HazelnutCoffee    schedule 16.06.2011    source источник
comment
Из ваших комментариев не похоже, что вы действительно хотите взвешенных наименьших квадратов, а вместо этого множественная регрессия. Хотите правильно изменить свой вопрос?   -  person Aaron left Stack Overflow    schedule 16.06.2011
comment
Мне все еще не ясно (прочитав ответы и комментарии ниже), как веса входят в картину.   -  person Ben Bolker    schedule 17.06.2011
comment
Подробнее о наименьших квадратах здесь и здесь.   -  person hhh    schedule 14.11.2011


Ответы (3)


Да, конечно, есть опция weights= для lm(), базовой функции аппроксимации линейной модели. Быстрый пример:

R> df <- data.frame(x=1:10)
R> lm(x ~ 1, data=df)            ## i.e. the same as mean(df$x)

Call:
lm(formula = x ~ 1, data = df)

Coefficients:
(Intercept)  
        5.5  

R> lm(x ~ 1, data=df, weights=seq(0.1, 1.0, by=0.1))

Call:
lm(formula = x ~ 1, data = df, weights = seq(0.1, 1, by = 0.1))

Coefficients:
(Intercept)  
          7  

R> 

таким образом, если более тщательно взвесить более поздние наблюдения, среднее значение последовательности от 1 до 10 переместится с 5,5 на 7.

person Dirk Eddelbuettel    schedule 16.06.2011
comment
не уверен, следую ли я. если у меня есть 3 набора данных, как бы я оценил перехват и уклоны. набор данных 1): 1 3 5 7 9 11 14 17 19 25 29 набор данных 2:17 31 19 27 31 62 58 35 29 21 18 набор данных 3: 102153 104123 96564 125565 132255 115454 114555 132255 129564 126455 124578 зависимая переменная - набор данных 3 и набор данных 1 и 2 - независимые переменные - person HazelnutCoffee; 16.06.2011
comment
Теперь мы не следим. Какие веса вы хотите использовать? - person Aaron left Stack Overflow; 16.06.2011
comment
какой бы вес ни предсказывал Y наилучшим образом. - person HazelnutCoffee; 16.06.2011
comment
Тогда это не похоже на то, что вам все-таки нужен взвешенный метод наименьших квадратов. - person Aaron left Stack Overflow; 16.06.2011
comment
@Dirk: можешь уточнить, что на самом деле означает "x ~ 1"? Ответ Чейза предполагает, что такие вещи, как "y ~ x1 + x2", похожи на зависимые вары VS независимые вары, или я чрезмерно интерпретирую? - person hhh; 13.11.2011
comment
@hhh: x~1 - это регрессионная модель только с перехватом. Эти формулы являются основой регрессионного моделирования в R: если вам нужно выполнить регрессию, вы должны начать с чтения соответствующего раздела во введении в R (и, возможно, черновика книги по линейному моделированию Faraway в разделе дополнительных документов на веб-сайте R) - - также см. ссылку в ответе Чейза - person Ben Bolker; 13.11.2011

Сначала создайте свои наборы данных. Я помещаю их в один data.frame, но это не обязательно.

dat <- data.frame(x1 = c(1,3,5,7,9,11,14,17,19,25, 29)
                  , x2 = c(17, 31, 19, 27, 31, 62, 58, 35, 29, 21, 18)
                  , y  = c(102153, 104123, 96564, 125565, 132255, 115454
                           , 114555, 132255, 129564, 126455, 124578)
                  )

Во-вторых, оцените модель:

> lm(y ~ x1 + x2, data = dat)

Call:
lm(formula = y ~ x1 + x2, data = dat)

Coefficients:
(Intercept)           x1           x2  
  104246.37       906.91        85.76

В-третьих, при необходимости добавьте свои веса, следуя советам @Dirk.

В-четвертых, что наиболее важно - прочтите пару руководств по регрессии в R. Google считает это лучшим хитом: http://www.jeremymiles.co.uk/regressionbook/extras/appendix2/R/

person Chase    schedule 16.06.2011
comment
@RyanB - Я бы добавил ваши данные к вашим вопросам, чтобы все было в одном месте. Кроме того, если это ответ на ваш вопрос, нажав на галочку, чтобы принять, это позволит другим в будущем узнать, что это было полезно для вас. - person Chase; 16.06.2011
comment
@RyanB Тогда обратите внимание на терминологию, используемую @Chase и @Aaron - то, что вы делаете, не является методом наименьших квадратов веса (WLS), если вы не укажете некоторые веса. То, что показывает @Chase, является обычным методом наименьших квадратов. Ответ @Dirk показывает вам, как начать использовать WLS с функцией lm(). - person Gavin Simpson; 16.06.2011
comment
Да, Гэвин, комбинация этих двух ответов отвечает на мой вопрос. - person HazelnutCoffee; 17.06.2011
comment
как насчет того, если у вас есть модель со случайными константами перед переменными x1 и x2, например "y ~ \beta_{1} x1 + \beta_{2} x2+error", где вы предполагаете, что ошибка не коррелирует с x1 и x2? - person hhh; 14.11.2011

Еще один взгляд на это. Сначала вы можете создать матрицу весов. Например:

samplevar = var(ydata)

M = diag(40,1/samplevar)

На данный момент M представляет собой диагональную матрицу 40x40. Вы можете преобразовать его в вектор, применив diag к M:

M_vector = diag(M)

Затем используйте это в lm:

   lm ( YXDATAFRAME, weights=M_vector)
person Community    schedule 19.03.2014