Как оценить функцию наилучшего соответствия диаграмме рассеяния в R?

У меня есть диаграмма рассеяния двух переменных, например:

x<-c(0.108,0.111,0.113,0.116,0.118,0.121,0.123,0.126,0.128,0.131,0.133,0.136)

y<-c(-6.908,-6.620,-5.681,-5.165,-4.690,-4.646,-3.979,-3.755,-3.564,-3.558,-3.272,-3.073)

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

если быть точным, я хотел бы сравнить примерку трех моделей: linear, exponential и logarithmic.

Я думал о том, чтобы подогнать каждую функцию к моим значениям, рассчитать вероятности в каждом случае и сравнить значения AIC.

Но я действительно не знаю, как и с чего начать. Любая возможная помощь по этому поводу будет чрезвычайно признательна.

Заранее большое спасибо.

Тина.


person user18441    schedule 23.02.2013    source источник
comment
Пробовали ли вы символическую регрессию с пакетом rgp? Если вы включите некоторые образцы данных, мы можем попробовать это. Подробнее здесь: rsymbolic.org/projects/rgp/wiki/Symbolic_Regression   -  person Ben    schedule 23.02.2013
comment
Насколько просто мы должны идти сюда? Вы читали данные? Вы делали какие-нибудь разведывательные участки? Вы хотя бы знаете, как подогнать линейную модель к пакету lm? Мы как бы застряли на уровне без немного больше ...   -  person Spacedman    schedule 23.02.2013
comment
большое спасибо, я добавил пример, я довольно хорошо знаю основы R, но я новичок, когда дело доходит до подбора более сложных моделей, чем регрессия.   -  person user18441    schedule 23.02.2013


Ответы (3)


Вот пример сравнения пяти моделей. Благодаря форме первых двух моделей мы можем использовать lm для получения хороших начальных значений. (Обратите внимание, что модели, использующие разные преобразования y, не следует сравнивать, поэтому мы не должны использовать lm1 и lm2 в качестве моделей сравнения, а только для начальных значений.) Теперь запустите nls для каждого из первых двух. После этих двух моделей мы пробуем полиномы различных степеней в x. К счастью, lm и nls используют согласованные определения AIC (хотя не обязательно верно, что другие функции подбора модели R имеют согласованные определения AIC), поэтому мы можем просто использовать lm для полиномов. Наконец, мы наносим данные и подгонки первых двух моделей.

Чем ниже AIC, тем лучше, поэтому за nls1 лучше всего следовать lm3.2, за которым следует nls2.

lm1 <- lm(1/y ~ x)
nls1 <- nls(y ~ 1/(a + b*x), start = setNames(coef(lm1), c("a", "b")))
AIC(nls1) # -2.390924

lm2 <- lm(1/y ~ log(x))
nls2 <- nls(y ~ 1/(a + b*log(x)), start = setNames(coef(lm2), c("a", "b")))
AIC(nls2) # -1.29101

lm3.1 <- lm(y ~ x) 
AIC(lm3.1) # 13.43161

lm3.2 <- lm(y ~ poly(x, 2))
AIC(lm3.2) # -1.525982

lm3.3 <- lm(y ~ poly(x, 3))
AIC(lm3.3) # 0.1498972

plot(y ~ x)

lines(fitted(nls1) ~ x, lty = 1) # solid line
lines(fitted(nls2) ~ x, lty = 2) # dashed line

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

ДОБАВЛЕНО еще несколько моделей, а затем исправлены и изменены обозначения. Также, чтобы продолжить комментарий Бена Болкера, мы можем заменить AIC везде выше на AICc из пакета AICcmodavg.

person G. Grothendieck    schedule 23.02.2013

Я бы начал с пояснительных сюжетов, примерно так:

x<-c(0.108,0.111,0.113,0.116,0.118,0.121,0.123,0.126,0.128,0.131,0.133,0.136)
y<-c(-6.908,-6.620,-5.681,-5.165,-4.690,-4.646,-3.979,-3.755,-3.564,-3.558,-3.272,-3.073)
dat <- data.frame(y=y,x=x)
library(latticeExtra)
library(grid)
xyplot(y ~ x,data=dat,par.settings = ggplot2like(),
       panel = function(x,y,...){
         panel.xyplot(x,y,...)
       })+
  layer(panel.smoother(y ~ x, method = "lm"), style =1)+  ## linear
  layer(panel.smoother(y ~ poly(x, 3), method = "lm"), style = 2)+  ## cubic
  layer(panel.smoother(y ~ x, span = 0.9),style=3)  + ### loeess
  layer(panel.smoother(y ~ log(x), method = "lm"), style = 4)  ## log

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

похоже, вам нужна кубическая модель.

 summary(lm(y~poly(x,3),data=dat))

Residual standard error: 0.1966 on 8 degrees of freedom
Multiple R-squared: 0.9831, Adjusted R-squared: 0.9767 
F-statistic: 154.8 on 3 and 8 DF,  p-value: 2.013e-07 
person agstudy    schedule 23.02.2013
comment
+1 это очень хорошо, как насчет значений AIC? Метод изучения сглаживателей в ggplot находится здесь: ats.ucla.edu /stat/r/faq/smooths.htm - person Ben; 23.02.2013
comment
большое спасибо, у меня возникли проблемы с установкой пакета сетки, я думаю, это вы имеете в виду: stat.auckland.ac.nz/~paul/grid/grid.html (у меня Mac). - person user18441; 23.02.2013
comment
да. сетка Пола Мюррелла (благослови его). Нет необходимости устанавливать ее, просто загрузите ее, она распространяется с R, как указано в ссылке, которую вы даете. - person agstudy; 23.02.2013

Вы можете начать с прочтения классической статьи Бокса и Кокса о преобразованиях. Они обсуждают, как сравнивать преобразования и как находить значимые преобразования в наборе или семействе потенциальных преобразований. Логарифмическое преобразование и линейная модель являются частными случаями семейства Бокса-Кокса.

И, как сказал @agstudy, всегда также отображайте данные.

person Greg Snow    schedule 23.02.2013