我有两个向量,x
和y
。
x
是一个向量,其中每个条目代表几年的一个月,所以我有(比方说)10 年的数据,length(x) = 120
依此类推。(我使用了“posix.ct”命令,所以从这个意义上说它们确实是“月”,但我不能只x
使用数字向量之类的c(1:n)
东西,因为我已经知道哪个月和哪个年的某个元素c(1:n)
对应于?即如果x = c(1:n)
,我知道那x[13]
是第二年的二月,依此类推..)
y 是一个向量,其中每个元素都是在某个月份对特定变量的观察。所以观察到的数据是这样分组的(一月,0.123),(二月,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
为NA,则除第一个和最后一个之外的所有值都是 NA,它们等于 input 的值。 x1
ksmooth$y
y
所以我尝试了一些带宽
h = 0.1
::现在smooth$y = y
,和以前一样。产生一个垂直条(它与我在命令中指定的颜色相同lines()
,因此它必须与ksmooth
命令有关。)
h = 10
:得到一些不奇怪的结果 smooth$y,然而,一个垂直条像以前一样产生.
然后,我尝试了超大带宽的疯狂想法;
h = 1e+06
:这在我使用时没有产生任何结果x1
,x2
就像上面的代码一样。但是,当我更改x2
为时x1
,我得到了一些不错的结果。因为h = 1e+09
(那是巨大的!!)我得到了一个非常好的结果。(我得到一条适合数据并且看起来不错的曲线)但是h = 1e+09
,这合理吗?在我看过的所有示例中,h 是介于 0.1 和 10 之间的东西,给予或接受。听说过一些经验法则: h 应该等于 n^(-1/5) 其中 n 是数据点的数量。