2013-06-19 30 views
8

的子集下面是一些数据和曲线:geom_smooth数据

set.seed(18) 
data = data.frame(y=c(rep(0:1,3),rnorm(18,mean=0.5,sd=0.1)),colour=rep(1:2,12),x=rep(1:4,each=6)) 

ggplot(data,aes(x=x,y=y,colour=factor(colour)))+geom_point()+ geom_smooth(method='lm',formula=y~x,se=F) 

enter image description here

正如可以看到线性回归高度的值,其中x = 1的影响。 我可以得到对x> = 2计算的线性回归,但显示x = 1(y等于0或1)的值。 除了线性回归之外,所得图形将完全相同。他们不会因为abscisse上的数值的影响而“受到影响”。1

回答

10

它就像geom_smooth(data=subset(data, x >= 2), ...)一样简单。如果这个情节只是为了你自己,并不重要,但是如果你不提及回归是如何进行的,那么认识到这样的事情会误导别人。我建议改变排除点的透明度。

ggplot(data,aes(x=x,y=y,colour=factor(colour)))+ 
geom_point(data=subset(data, x >= 2)) + geom_point(data=subset(data, x < 2), alpha=.2) + 
geom_smooth(data=subset(data, x >= 2), method='lm',formula=y~x,se=F) 

enter image description here

+1

Aahh我喜欢简单的解决方案!非常感谢。并且还要感谢建议和透明度的窍门。 –

+0

如果此解决方案在我的数据集上产生此错误“美学必须为长度1或与数据相同”,我该怎么办? –

7

常规lm功能有weights参数,你可以用它来分配权重,以特定的观察。通过这种方式,您可以清楚观察观察对结果的影响。我认为这是处理这个问题的一般方法,而不是数据的子集化。当然,分配权重对于分析的统计可靠性并不是一个好兆头。总是最好有一个权重背后的基本原理,例如低重量观测具有较高的不确定性。

我觉得引擎盖ggplot2使用lm函数,所以你应该可以通过weights的参数。你可以通过审美(aes)添加的权重,假设重量存储在向量:

ggplot(data,aes(x=x,y=y,colour=factor(colour))) + 
    geom_point()+ stat_smooth(aes(weight = runif(nrow(data))), method='lm') 

你也可以把重量在一列中的数据集:

ggplot(data,aes(x=x,y=y,colour=factor(colour))) + 
    geom_point()+ stat_smooth(aes(weight = weight), method='lm') 

其中列被称为weight