样本回归,x =月,巨大带宽

时间:2012-10-13 17:00:15

标签: r time regression

我有两个向量,xy

x是一个向量,其中每个条目代表一个月的一个月,所以我(比如说)有10年的数据,然后是length(x) = 120,依此类推。 (我使用了“posix.ct”命令,因此在这个意义上它们确实是“月”,但我不能只将x作为c(1:n)之类的数字向量,因为我已经知道c(1:n)的某个元素对应于哪个月和哪一年?即x = c(1:n),我知道x[13]是第二年的2月,依此类推......)

y是一个向量,其中每个元素是某个月的特定变量的观察值。 所以观察到的数据分组如下(1月,1。023),(2月,2.125)等等。 这几个月我有两个载体;

x1 = seq(as.POSIXct("YYYY-MM-DD", tz="GMT"),
       as.POSIXct("YYYY-MM-DD", tz="GMT"),
       by="month")
x2 = c(1:length(x1)) 

我想做的是运行ksmooth:

plot(x1,y)
smooth = ksmooth(x2,y,"normal")     
lines(smooth)

我在plot()命令中使用x1的原因是我不知道如何及时获得x轴。

当我没有指定任何东西时,R应该自动找到一个合适的平滑参数。结果是ksmooth $ y等于输入向量y!此外,在图中生成垂直条。如果我在上面的代码中将x2替换为x1,则ksmooth$y除了第一个和最后一个之外的所有值都是NA,它们与输入y的值相等。

所以我尝试了一些带宽: h = 0.1:现在smooth$y = y,和以前一样。生成一个垂直条(它与我在lines()命令中指定的颜色相同,因此它必须与ksmooth命令有关。) h = 10:为平滑的$ y获得一些非奇怪的结果,但是,会像以前一样生成垂直条。

然后,我尝试了非常大的带宽的疯狂想法; h = 1e+06:当我在上面的代码中使用x1x2时,这没有产生任何结果。当我将x2更改为x1时,我得到了一些好结果。对于h = 1e+09(这是巨大的!)我得到了一个非常好的结果。 (我得到一条适合数据的曲线,看起来不错) 但是h = 1e+09,这是合理的吗?在我看过的所有例子中,h是0.1到10之间的东西,给予或接受。听说过一些经验法则:h应该等于n ^( - 1/5),其中n是数据点的数量。

1 个答案:

答案 0 :(得分:3)

我认为你缺少的一件事是当你没有指定任何东西时R 没有找到一个合适的平滑参数,它只是使用0.5的带宽,这是完全没用的在你的情况下。

您可能遗漏的另一件事是,在ksmooth中,bandwidth参数是x。如果ksmooth的{​​{1}}值为x,则会将其转换为数字,即的数量。因此,您的带宽将在几秒钟内测量,这是一个不良结果。如果Date的月份值为ksmooth,则默认为0.5个月的带宽,这也是不可取的。

您要做的是为您正在使用的x指定合理的带宽。这是一个例子:

x

Smoothed random time series