使用 Lattice (panel.smoother) 或 ggplot 提取用于获得最佳拟合的方程

extract equation used to get the best fit using Lattice (panel.smoother) or ggplot

我有 100 多个具有相似数据且遵循几乎相同趋势的文件。我已经设法获得了所有这些的最佳匹配,但现在我想将其与理论论证进行比较。换句话说,我想为我使用实验数据生成的最佳拟合曲线生成一个方程;该方程适用于特定范围内的任何随机值,并产生与以前类似的曲线,当然有一些错误。

代码:

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)

我只想知道它的方程或者可能只是曲线的一些参数(系数、标准误差值等)

平滑器通常比您看起来理解的要复杂。它们通常只在局部定义,因此没有多项式拟合可能存在的全局方程。 panel.smoother 函数默认使用 loess 平滑器,调用 xyplot 返回的对象中没有方程。而是在面板节点的 lay 节点中保存了对 panel.smoother 函数的调用:

 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-smoother,因为试图在 ggplot 函数结果中查找代码细节比应用于格对象的任务更复杂。这个故事的寓意:如果你想要一个具有特定复杂性和可定义特征的函数,那么使用合适的样条函数,例如生存中的 splinepsspline 或 rms 中的 rcs