本篇主要分为四部分:
- 揭示不确定性
- 统计摘要
- 添加图形注解
- 含权数据
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") ##含权重信息的直方图 下右图 >
不含权重信息的直方图展示了郡的数量,而含权重信息的直方图展示了人口数量。权重的增加确实改变了对图形的理解。