15

这是一些数据和图表:

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)

在此处输入图像描述

如您所见,线性回归受 x=1 的值的影响很大。我可以得到为 x >= 2 计算的线性回归,但显示 x=1 的值(y 等于 0 或 1)。除了线性回归之外,结果图将完全相同。他们不会“受到”值对 abscisse = 1 的影响

4

3 回答 3

18

就像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)

在此处输入图像描述

于 2013-06-19T15:39:39.977 回答
8

常规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

于 2013-06-19T15:40:38.737 回答
0

我尝试了@Matthew Plourde 的解决方案,但subset对我不起作用。与原始数据相比,当我使用子集时,它没有改变任何东西。我替换subsetfilter并且它起作用了:

ggplot(data,aes(x=x,y=y,colour=factor(colour)))+
geom_point(data=data[data$x >= 2,]) + geom_point(data=data[data$x < 2,], alpha=.2) +
geom_smooth(data=data[data$x >= 2,], method='lm',formula=y~x,se=F)
于 2022-01-26T18:33:40.933 回答