我有以下表格的数据:
x y
0 0
0.01 1
0.03 0
0.04 1
0.04 0
x
从0到1是连续的,并且间距不等,y是二进制。
我想使用R在x轴上平滑y
,但无法找到合适的包。我发现的内核平滑函数产生的密度估计值为x
,或者在x的末尾给出错误的估计值,因为它们对小于0且大于1的区域进行平均。
我还想避免像Loess givens那样的线性平滑器,然后是y
的二进制形式。我所见的移动平均函数假设等间距x值。
您是否了解任何可以平滑且理想情况下具有带宽选择程序的R功能?我可以写一个移动平均函数和交叉验证来确定带宽,但我更愿意找到一个经过审查的现有函数。
答案 0 :(得分:7)
我建议使用像
这样的东西d <- data.frame(x,y) ## not absolutely necessary but good practice
library(mgcv)
m1 <- gam(y~s(x),family="binomial",data=d)
这将(1)尊重数据的二进制性质(2)使用广义交叉验证自动进行平滑度(术语中的“带宽”)选择。
使用
plot(y~x, data=d)
pp <- data.frame(x=seq(0,1,length=101))
pp$y <- predict(m1,newdata=pp,type="response")
with(pp,lines(x,y))
或
library(ggplot2)
ggplot(d,aes(x,y))+geom_smooth(method="gam",family=binomial)
获得预测/绘制结果。
(我希望你的真实数据集有超过5个观察结果......否则会失败......)