微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ggplot2 中的半正态图残差图

如何解决ggplot2 中的半正态图残差图

我正在尝试为 ggplot2 中的半正态图中的残差绘制下面显示的图形。

但是,我遇到了一个题为 Error: data must be a data frame,or other object coercible by fortify ()错误,而不是类 hnp 的 S3 对象。

数据如下。

library(hnp)
Stones <- c(rep("Stone1",1),rep("Stone2",rep("Stone3",1))
treat <- c(rep("T6",9),rep("T7",rep("T8",rep("T10",rep("T11",rep("T12",rep("T14",rep("T15",rep("T16",9))
Samples <- c(rep("SampleI",3),rep("SampleF",rep("SampleR",3))
Count <- c(3,3,1,2,6,4,5,0)
Total <- c(rep("6",81))
dados <- data.frame(treat,Stones,Samples,Count,Total);dados
dados$treat = as.factor(dados$treat)
dados$Samples = as.factor(dados$Samples)
dados$Total = as.numeric(dados$Total)
dados$Prop = dados$Count/dados$Total
dados16 = dados[dados$treat=="T16",];dados16`

模型调整如下图。

resp16 <-cbind(dados16$Count,dados16$Total - dados16$Count); resp16
m16 <- glm(resp16 ~ Samples,data = dados16,family = quasibinomial)

Graph16=hnp(m16,xlab = 'Percentil da N(0,1)',ylab = 'Resíduos',main = 'Gráfico normal de Probabilidades')

错误在这里

ggplot(data = Graph16)
Erro: `data` must be a data frame,or other object coercible by `fortify()`,not an S3 object with class hnp

解决方法

如错误所示,ggplot2 需要 data.frame 对象或已为其编写 fortify() S3 方法的对象。 hnp 类对象没有 fortify 方法,因此我们最好的选择可能是从 Graph16 对象中获取数据,并在绘图之前自己将其放入数据框中。下面的示例假定 Graph16 对象与您的代码生成的对象相同。

library(ggplot2)

df <- data.frame(
  x = Graph16$x,lower = Graph16$lower,median = Graph16$median,upper = Graph16$upper,residuals = Graph16$residuals
)

ggplot(df,aes(x)) +
  geom_ribbon(aes(ymin = lower,ymax = upper),alpha = 0.5) +
  geom_point(aes(y = residuals)) +
  geom_line(aes(y = median))

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。