首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stat_fit_glance与广义加性模型误差

stat_fit_glance与广义加性模型误差
EN

Stack Overflow用户
提问于 2019-11-19 22:09:14
回答 1查看 233关注 0票数 0

我正在尝试将mgcv::gam结果中的p值和R2添加到带有facet的ggplot中。下面是示例数据和代码。是否有一种方法可以成功地将p值和R2粘贴到ggplots上?

代码语言:javascript
复制
DF <- data.frame(Site = rep(LETTERS[20:24], each = 4),
                 Region = rep(LETTERS[14:18], each = 4),
                 time = rep(LETTERS[1:10], each = 10),
                 group = rep(LETTERS[1:4], each = 10),
                 value1 = runif(n = 1000, min = 10, max = 15),
                 value2 = runif(n = 1000, min = 100, max = 150))
DF$time <- as.numeric(DF$time)


GAMFORMULA <- y ~ s(x,bs="cr",k=3)

plot1 <- ggplot(data=DF, 
                aes(x=time, y=value2)) +
  geom_point(col="gray", alpha=0.8,
             name="") +
  geom_line(col="gray", alpha=0.8,
            name="",aes(group=group)) +
  geom_smooth(se=T, col="darkorange", alpha=0.8,
              name="", fill="orange",
              method="gam",formula=GAMFORMULA) +
  theme_bw() + 
  theme(strip.text.x = element_text(size=10),
        strip.text.y = element_text(size=10, face="bold", angle=0),
        strip.background = element_rect(colour="black", fill="gray90"),
        axis.text.x = element_text(size=10),  # remove x-axis text
        axis.text.y = element_text(size=10), # remove y-axis text
        axis.ticks = element_blank(),  # remove axis ticks
        axis.title.x = element_text(size=18), # remove x-axis labels
        axis.title.y = element_text(size=25), # remove y-axis labels
        panel.background = element_blank(), 
        panel.grid.major = element_blank(),  #remove major-grid labels
        panel.grid.minor = element_blank(),  #remove minor-grid labels
        plot.background = element_blank()) + 
  labs(y="Value", x="Time", title = "") +
  stat_fit_glance(method = "gam",
                  method.args = list(formula = GAMFORMULA),
                  aes(label = sprintf('R^2~"="~%.3f~~italic(p)~"="~%.2f',
                                      stat(..r.squared..),stat(..p.value..))),
                  parse = TRUE)


plot1 + facet_wrap(Site~group, scales="free_y", ncol=3)

Error in sprintf("R^2~\"=\"~%.3f~~italic(p)~\"=\"~%.2f", r.squared, p.value) : 
  object 'r.squared' not found
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-20 15:53:41

我的回答解释了为什么不能使用stat_fit_glance()r.sq添加到绘图中,但恐怕is并没有提供一种替代方法。

stat_fit_glance()broom:glance()上的一个包装器,它适合模型并将模型fit对象传递给broom:glance()。在gam()的情况下,broom:glance()不返回R2的估计值,因此stat_fit_glance()也无法返回它。

要查看可用的计算值,可以使用包'gginnards‘中的geom_debug()

代码语言:javascript
复制
library(ggpmisc)
library(gginnards)
library(mgcv)

DF <- data.frame(Site = rep(LETTERS[20:24], each = 4),
                 Region = rep(LETTERS[14:18], each = 4),
                 time = rep(LETTERS[1:10], each = 10),
                 group = rep(LETTERS[1:4], each = 10),
                 value1 = runif(n = 1000, min = 10, max = 15),
                 value2 = runif(n = 1000, min = 100, max = 150))
DF$time <- as.numeric(DF$time)


GAMFORMULA <- y ~ s(x,bs="cr",k=3)

plot1 <- ggplot(data=DF, 
                aes(x=time, y=value2)) +
  geom_point(col="gray", alpha=0.8,
             name="") +
  geom_line(col="gray", alpha=0.8,
            name="",aes(group=group)) +
  geom_smooth(se=T, col="darkorange", alpha=0.8,
              name="", fill="orange",
              method="gam",formula=GAMFORMULA) +
  theme_bw() + 
  theme(strip.text.x = element_text(size=10),
        strip.text.y = element_text(size=10, face="bold", angle=0),
        strip.background = element_rect(colour="black", fill="gray90"),
        axis.text.x = element_text(size=10),  # remove x-axis text
        axis.text.y = element_text(size=10), # remove y-axis text
        axis.ticks = element_blank(),  # remove axis ticks
        axis.title.x = element_text(size=18), # remove x-axis labels
        axis.title.y = element_text(size=25), # remove y-axis labels
        panel.background = element_blank(), 
        panel.grid.major = element_blank(),  #remove major-grid labels
        panel.grid.minor = element_blank(),  #remove minor-grid labels
        plot.background = element_blank()) + 
  labs(y="Value", x="Time", title = "") +
  stat_fit_glance(method = "gam",
                  method.args = list(formula = GAMFORMULA),
                  # aes(label = sprintf('R^2~"="~%.3f~~italic(p)~"="~%.2f',
                  #                     stat(..r.squared..),stat(..p.value..))),
                  # parse = TRUE)
                  geom = "debug")


plot1 + facet_wrap(Site~group, scales="free_y", ncol=3)

上面显示的是stat_fit_glance()为图中的前两个面板返回的值。

注:似乎没有就R-平方对GAM是否有意义达成一致意见.然而,summary()方法对于gam确实返回一个调整的R-平方估计作为成员r.sq.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58943575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档