添加p值和R2 ggplot [后续]

时间:2016-09-05 14:52:07

标签: r ggplot2

这是一个后续行动question。当我运行下面给出的代码时,我收到警告消息,我认为是由于我的代码中没有facet要求,而链接中提到的源代码包括facets。看看,请告诉我哪个部分需要修改。期待!

代码:

library(dplyr) 
library(ggplot2)
library(ggpmisc)

df <- diamonds %>%
  dplyr::filter(cut%in%c("Fair","Ideal")) %>%
  dplyr::filter(clarity%in%c("I1" ,  "SI2" , "SI1" , "VS2" , "VS1",  "VVS2")) %>%
  dplyr::mutate(new_price = ifelse(cut == "Fair", 
                                   price* 0.5, 
                                   price * 1.1))


p <- ggplot(df, aes(x,y, color=factor(cut))) 
p <- p + stat_smooth(method = "lm", formula = y ~ x-1, size = 1, level=0.95) 
p <- p + geom_point(alpha = 0.3) 
p <- p + stat_poly_eq(aes(label = paste(..rr.label..)),
                      label.x.npc = "right", label.y.npc = 0.15, formula = formula, 
                      parse = TRUE, size = 3) + 
          stat_fit_glance(method = 'lm', method.args = list(formula = formula),
                      geom = 'text', aes(label = paste("P-value = ", 
                      signif(..p.value.., digits = 4), sep = "")),label.x.npc = 'right',
                      label.y.npc = 0.35, size = 3)
print(p)

警告讯息:

1:stat_poly_eq()中的计算失败: 'closure'类型的对象不是可子集化的

2:stat_fit_glance()中的计算失败: 'closure'类型的对象不是可子集化的

1 个答案:

答案 0 :(得分:3)

简短回答:您需要添加

formula <- y ~ x
在您致电ggplot之前(即在阅读p <- ggplot(...)的行之前

(或您定义公式的任何内容)。

A "closure" is a type of function in R.因此警告消息“类型'闭包的对象'不是子集表”意味着您运行的任何代码都不期望某个对象是函数。

当我们仔细查看您的代码时,我们会在您致电formula = formulastat_poly_eq时看到stat_fit_glance。请注意,formula是R中的函数。如果没有单独定义formula对象,R将指示您指的是formula函数。 stat_poly_eq()stat_fit_glance()抱怨,因为他们希望函数中的formula 参数formula - 类对象,而不是函数。< / p>

更一般地说,你不应该将你的公式命名为“公式”,因为它会造成混乱。你可以用例如相反,“模特”。