【问题标题】:Save data from a gam plot without actually plotting the data?从游戏图中保存数据而不实际绘制数据?
【发布时间】:2015-08-06 18:56:45
【问题描述】:

有没有一种方便的方法可以从 gam 图中提取数据,而无需实际绘制 gam 对象?

这是一个虚拟示例。 plot.data 里面有我想要的数据,但我不希望绘图窗口受到影响。

library(mgcv)    
x=1:10000/1000
y = sin(x)+rnorm(10000,sd=2)
m = gam(y~s(x))
plot.data<-plot(m,plot=F)

【问题讨论】:

  • gam 属于哪个包?还有s
  • 您要准确提取哪些“数据”? plot.data 中的所有内容?
  • mgcv。为清楚起见进行了编辑
  • 用于构建绘图的数据。我想获取这些数据,也许用它做点什么,然后将它添加到不同的情节中。
  • 只需 names(summary(m))names(m) 看看你想要什么 ant 然后只需使用 m$thing_you_wantsummary(m)$thing_you_want 子集即可。

标签: r mgcv


【解决方案1】:

plot.gam 似乎没有不绘图的选项。不过你可以试试

plot.data <- {
    dev.new()
    res <- plot(m)
    dev.off()
    res
}

或者可能

plot.data <- {
    pdf(NULL)
    res <- plot(m)
    invisible(dev.off())
    res
}

【讨论】:

  • 这很聪明,虽然有点骇人听闻。谢谢!
  • 啊!这行得通,但如果你让它在循环中运行(我正在尝试制作一些骇人听闻的动画),它会劫持你的桌面环境,以至于返回终端并点击 control-C 有点困难!
  • @generic_user 好的,试试这个更新的黑客,使用 pdf null 设备
【解决方案2】:

如果您使用包gam 中的gam(),则可以通过调用preplot(m) 以列表形式获取这些数据。以下是您的数据的样子:

library(gam)
x = 1:10000/1000
y = sin(x)+rnorm(10000,sd=2)
m = gam(y~s(x))
preplot(m)

List of 1
 $ s(x):List of 5
  ..$ x   : num [1:10000] 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 ...
  ..$ y   : Named num [1:10000] 0.421 0.421 0.421 0.421 0.421 ...
  .. ..- attr(*, "names")= chr [1:10000] "1" "2" "3" "4" ...
  ..$ se.y: Named num [1:10000] 0.0783 0.0782 0.0781 0.0781 0.078 ...
  .. ..- attr(*, "names")= chr [1:10000] "1" "2" "3" "4" ...
  ..$ xlab: chr "x"
  ..$ ylab: chr "s(x)"
  ..- attr(*, "class")= chr "preplot.gam"
 - attr(*, "class")= chr "preplot.gam"

该列表中的 xy 组件是我认为您所追求的。据推测,如果您的模型中有多个平滑项,preplot 列表的第 i 个组件将对应于您对 gam() 的原始调用中的第 i 个平滑项。

【讨论】:

    猜你喜欢
    • 2015-05-10
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    相关资源
    最近更新 更多