将观察结果分成两半

时间:2012-01-15 02:36:19

标签: r

在一个图(x,y)中,是否有任何方法可以绘制一条线/曲线/函数,它将在每个x处分割**(参见DWins comment)** 2个半部分的观测结果?因此**在每个x的arround(参见DWins comment)** **相同​​数量的观察值在这条线/曲线/函数的上方和下方?有没有办法得到(x,y)坐标或这条直线/曲线/函数的函数?

由于异常值/非正常性等导致数据回归是有问题的,我认为编程方法可能提供一种可行的解决方案而无需采用复杂的回归方法。

非常感谢

2 个答案:

答案 0 :(得分:4)

首先生成一些测试数据:

x <- c(1, 1, 1, 2, 2, 3, 3, 3, 3)
y <- seq_along(x)

现在假设数据按x排序,计算每个x的中位数并绘制:

plot(y ~ x)

m <- tapply(y, x, median)
lines(m ~ unique(x))

答案 1 :(得分:2)

实施Bolker的想法非常简单。这只是在封装quantreg的rq函数

中绘制第一个示例的结果
require(quantreg)
 data(stackloss); fit <- rq(stack.loss ~ Air.Flow, .5, data=stackloss)
 with(stackloss,   plot(Air.Flow, stack.loss))
 abline(a=coef(fit)[1], b=coef(fit)[2])

然而,这不是“每个点”的解决方案,因此请考虑采用loess方法:

fit <-loess(stack.loss ~ Air.Flow, data=stackloss, family="symmetric")
plot(stack.loss ~ Air.Flow, data=stackloss)
with(stackloss, lines(sort(unique(Air.Flow)),  
                      predict(fit, data.frame(Air.Flow=sort(unique(Air.Flow))))))

在只有一个值但在使用family =“symmetric”选项时似乎非常接近中位数的x vlaues中表现不佳。