本篇主要分为四部分:

  • 揭示不确定性
  • 统计摘要
  • 添加图形注解
  • 含权数据

1.揭示不确定性

关于不确定的信息,怎么展示很重要,在ggplot2中共有四类几何对象可以用于这项工作,具体使用取决于x的值是离散型还是连续型的。这些几何对象列于下表中:

变量X类型 仅展示区间 同时展示区间和中间值
连续型 geom_ribbon geom_smooth(stat = "identity")
离散型

geom_errorbar

geom_linerange

geom_crossbar

geom_pointrange

 

下例拟合了一个双因素含交互效应回归模型,并且展示了如何提取边际效应和条件效应,以及如何将其可视化。

> library(ggplot2)
> library(effects)
> d <- subset(diamonds , carat <2.5 & rbinom(nrow(diamonds),1,0.2)==1)
> d$lcarat <- log10(d$carat)
> d$lprice <- log10(d$price)
> qplot(lcarat,lprice,data=d)
> #剔除整体的线性趋势
> detrend <- lm(lprice ~ lcarat,data=d)
> d$lprices <- resid(detrend)
> mod <- lm(lprices ~ lcarat*color,data=d)
> effectdf <- function(...){
+ suppressWarnings(as.data.frame(effect(...)))
+ }
> color <- effectdf("color",mod)
> both1 <- effectdf("lcarat:color",mod)
> carat <- effectdf("lcarat",mod,default.levels=50)
> both2 <- effectdf("lcarat:color",mod,default.levels = 3)
> qplot(lcarat,lprice,data=d,colour=color) #图1

  

> qplot(lcarat,lprices,data=d,colour=color)#图2

  

以上进行数据变换以移除显而易见的效应,图1对x轴和y轴的数据均取以10 为底的对数对数以剔除非线性性。图2剔除了主要的线性趋势。

> fplot <- ggplot(mapping = aes(y=fit,ymin=lower,ymax=upper)) + ylim(range(both2$lower,both2$upper))
> fplot %+% color + aes(x=color) + geom_point() +geom_errorbar() #图3 下左
> fplot %+% both2 +
+ aes(x = color,colour=lcarat,group=interaction(color,lcarat))+
+ geom_errorbar() + geom_line(aes(group=lcarat))+
+ scale_colour_gradient()                                          #图4 下右

  

上两张图展示了模型评估结果中变量color的不确定性。左图为color的边际效应,右图是针对carat的不同水平(level),变量color的条件效应,误差棒显示了95%的逐点置信区间。

> fplot %+% carat + aes(x=lcarat)+geom_smooth(stat="identity") 图5 下左
> ends <- subset(both1,lcarat==max(lcarat))
> fplot %+% both1 + aes(x=lcarat,colour=color) + 
+ geom_smooth(stat="identity")+
+ scale_colour_hue() + theme(legend.position = "none")+
+ geom_text(aes(label=color,x=lcarat+0.02),ends)                #图6 下右
>

  

上图展示模型估计结果中变量carat的不确定性。上左图为carat的边际效应,上右图则是针对变量color的不同水平,变量carat的条件效应。误差带显示了95%的逐点置信区间。

2.统计摘要

对于每个x的取值,计算对应y值的统计摘要通常是很有用的。在ggplot2中,这一角色由stat_summary()但当,它使用ymin,y和ymax等图形属性,为汇总y的条件分布提供了一种灵活的方法。

2.1单独的统计摘要函数

参数fun.y,fun.ymin和fun.ymax能够接受简单的数值型摘要计算函数,即该函数能够传入一个数据向量并返回一个数值型结果,如:mean(),median(),min(),max().

2.2统一的摘要计算函数

fun.data可以支持更复杂的摘要计算函数,当然也可以使用自己编写的摘要计算函数:如下,此函数应返回一个各元素有名称的向量作为输出。

3.添加图形注解

在使用额外的标签注解时,要记住的重要一点:这些注解仅仅是额外的数据而已。添加图形注解有两种方式:逐个添加或者批量添加。

下面的例子,我们分别以两种方式,向经济数据中加入有关美国总统的信息。

> (unemp <- qplot(date,unemploy,data=economics,geom="line",
+ xlab="",ylab="No.unemployed(1000s)"))

  

> presidential <- presidential[-(1:3),]
> yrng <- range(economics$unemploy)
> xrng <- range(economics$date)
> unemp + geom_vline(aes(xintercept = as.numeric(start)),data=presidential)
> 

  

 4.含权数据

在处理整合数据时,数据集地每一行可能代表了许多中观测值,此时我们需要以某种方式把权重变量考虑进去。这里以2000年美国人口普查中,中西部各州地统计数据为例。

权重变量地不同将极大地影响图形内容以及观察结论。有两种可以用于表现权重地可调图形属性。

首先对于线和点这类简单地几何对象,我们可以根据点地数量调整图形属性size来改变点地大小。

> qplot(percwhite,percbelowpoverty,data=midwest) ##无权重 下图左
> qplot(percwhite,percbelowpoverty,data=midwest,size=poptotal /1e6) + scale_size_area("Population\n(milions)",breaks=c(0.5,1,2,4))  ##以人口数量为权重  下图中
> qplot(percwhite,percbelowpoverty,data=midwest,size=area) + scale_size_area()  ##以面积为权重 下图右

  

对于更复杂、涉及到统计变换地情况,我们通过修改weight属性来表现权重。这些权重将被传递给统计汇总计算函数。比如各类平滑器,分位回归,箱线图,直方图以及各类密度图。

我们无法直接看到这个权重变量,而且它也没有对应地图例,但它却可以改变统计汇总地结果。

 > lm_smooth <- geom_smooth(method = lm,size=1)
 > qplot(percwhite,percbelowpoverty,data=midwest) + lm_smooth ##未考虑权重地最优拟合曲线 ##下左图
 > qplot(percwhite,percbelowpoverty,data=midwest,weight=popdensity,size=popdensity) + lm_smooth  ##以人口数量作为权重地最优拟合曲线  下右图

  

在我们使用总人口作为权重去修改直方图或密度图地时候,我们地视角将从郡数量分布转换到对人口数量分布地观察。

> qplot(percbelowpoverty,data=midwest,binwidth=1)  ##不含权重信息 下左图
>  qplot(percbelowpoverty,data=midwest,weight=poptotal,binwidth=1) + ylab("population")  ##含权重信息的直方图 下右图
> 

  

不含权重信息的直方图展示了郡的数量,而含权重信息的直方图展示了人口数量。权重的增加确实改变了对图形的理解。