5

我有以下形式的数据:

x      y
0      0
0.01   1
0.03   0
0.04   1
0.04   0

x从 0 到 1 是连续的,并且不等距且 y 是二进制的。

我想y使用 R 平滑 x 轴,但找不到合适的包。我发现的核平滑函数会在 x 的末端产生密度估计,x或者会在 x 的末端给出错误的估计,因为它们会在小于 0 和大于 1 的区域上进行平均。

我还想避免像 Loess givens 这样的线性平滑器,然后是y. 我见过的移动平均函数假设等距的 x 值。

你知道任何 R 函数可以平滑并且理想地具有带宽选择过程吗?我可以编写一个移动平均函数并进行交叉验证以确定带宽,但我更愿意找到一个经过审查的现有函数。

4

1 回答 1

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 个观察值......否则这将失败......)

于 2012-12-17T15:51:59.697 回答