Подгонка многочлена к известному отрезку

Я использую lm(y~poly(x,2)), чтобы подогнать полином второго порядка к моим данным. Но я просто не мог найти способ указать известное значение перехвата. Как я могу подогнать полиномиальную модель с известным значением точки пересечения (скажем, «k»), используя lm?


person MaMu    schedule 13.02.2015    source источник
comment
Может быть, удалить параметр перехвата с - 1 в формуле и вычесть известный перехват из ваших данных?   -  person BrodieG    schedule 13.02.2015
comment
Спасибо @BrodieG. Но, как указал Бен, offset(k) будет более явным.   -  person MaMu    schedule 16.02.2015


Ответы (1)


 lm(y~-1+x+I(x^2)+offset(k))

должен это сделать.

  • -1 подавляет автоматически добавляемый термин перехвата
  • x добавляет линейный член
  • I(x^2) добавляет квадратичный член; I() требуется, чтобы R интерпретировал ^2 как возведение в квадрат, а не взаимодействовал между x и самим собой (что по правилам формул было бы эквивалентно одному x)
  • offset(k) добавляет известный постоянный перехватчик

Я не знаю, сработает ли poly(x,2)-1, чтобы устранить перехват; вы можете попробовать и посмотреть. Вычитание смещения из ваших данных должно работать нормально, но offset(k) может быть немного более явным. Возможно, вам придется сделать k вектор (т. Е. Реплицировать его по длине набора данных или, лучше, включить его в качестве столбца в набор данных и передать данные с помощью data=...

person Ben Bolker    schedule 13.02.2015
comment
offset выглядит отличной функцией для этого; помощь в этом немного сбивает с толку: смещение - это термин, добавляемый к линейному предиктору, например, в обобщенной линейной модели, с известным коэффициентом 1, а не с оценочным коэффициентом. Известный коэффициент 1? Это должно быть опечатка. - person kasterma; 13.02.2015
comment
нет, это просто сбивает с толку. Дело в том, что тогда уравнение будет y=b0+b1*x1+b2*x2+1*offset, а не y=b0+b1*x1+b2*x2+b3*offset (где b3 будет оценочным коэффициентом). - person Ben Bolker; 13.02.2015
comment
Спасибо @BenBolker. Оно работает. Но, честно говоря, я не до конца понимаю эту формулу, и я не могу найти помощи у Р. Не могли бы вы объяснить каждый элемент этой формулы или направить меня туда, где я могу найти объяснение? - person MaMu; 16.02.2015
comment
Ох ... Я не заметил, что вы редактировали ответ до сих пор. большое спасибо. - person MaMu; 19.02.2015
comment
Сработал отлично для меня .... за исключением того, что мне нужно было сгенерировать вектор k, как вы предлагаете - person guero64; 15.04.2020