2015-11-18 8 views
3

У меня есть более 100 файлов с похожими данными, соответствующими почти той же тенденции. Мне удалось получить лучшие приемы для всех, но теперь я хочу сравнить это с теоретическим аргументом. Другими словами, я хотел бы создать одно уравнение для наилучших подходящих кривых, которые я создал с использованием экспериментальных данных; уравнение будет работать для любых случайных значений в определенном диапазоне и будет производить аналогичную кривую, как прежде, с несколькими ошибками.Извлечь уравнение, используемое для получения наилучшего соответствия с использованием решетки (panel.smoother) или ggplot

Код:

set.seed(42) 
x <-sort(round(runif(10,0,53))) ## random x values 
y <- runif(10,0,400)    ## random y values 
data1 <- data.frame(y=y,x=x)  ## creating a data frame 

Теперь я либо использовать lattice, как показано ниже:

library(lattice) 
library(latticeExtra) 
xyplot(y ~ x,data=data1,par.settings = ggplot2like(), 
        panel = function(x,y,...){ 
        panel.xyplot(x,y,...) 
        })+ layer(panel.smoother(y ~ x, se = FALSE, span = 0.5)) 

Или ggplot следующим образом:

library(ggplot2) 
ggplot(data1, aes(x=x, y=y)) + geom_point() + geom_smooth(se = FALSE) 

enter image description here

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

ответ

4

Сглажители, как правило, сложнее, чем вы, кажется, понимаете. Обычно они определяются только локально, поэтому глобального уравнения нет, так как может быть многочлен. Функция panel.smoother использует по умолчанию loess более плавный, и в объекте, возвращенном с вашего вызова, нет уравнения xyplot. Скорее есть вызов функции panel.smoother хранится в lay узле панели-узел:

myplot <- xyplot(y ~ x,data=data1,par.settings = ggplot2like(), 
       panel = function(x,y,...){ 
       panel.xyplot(x,y,...) 
       })+ layer(panel.smoother(y ~ x, se = FALSE, span = 0.5)) 
get('lay', envir = environment(myplot$panel)) 
#------------- 
[[1]] 
expression(panel.smoother(y ~ x, se = FALSE, span = 0.5)) 
attr(,"under") 
[1] FALSE 
attr(,"superpose") 
[1] FALSE 

attr(,"class") 
[1] "layer" "trellis" 

Это показывает то, что получается, когда это выражение получает оценку:

mysmooth <- loess(y~x) 
str(mysmooth) 
#-------- 
List of 17 
$ n  : int 10 
$ fitted : num [1:10] 176 312 275 261 261 ... 
$ residuals: Named num [1:10] 6.78 -24.43 98.8 -159.25 -75.9 ... 
    ..- attr(*, "names")= chr [1:10] "1" "2" "3" "4" ... 
----------- omitting remaider of output------------ 

Я использовал xyplot -мягкая, потому что попытка найти детали кода внутри функции ggplot-результата еще сложнее, чем эта задача, примененная к решеточному объекту. Мораль этой истории: если вам нужна функция определенной сложности и определяемой характеристики, используйте подходящую сплайн-функцию, такую ​​как spline или psspline в выживании или rcs в rms.

+2

или 'ns' или' bs' в пакете 'splines' ... –

+0

Большое вам спасибо. На самом деле я не понимал функциональности более гладкой перед вашим сообщением. Результат из str() - именно то, что я искал. Используя значения, я думаю, что могу создать необходимое мне уравнение. splines(), похоже, отлично работает. Еще раз спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^