【问题标题】:Implementation of rectangular KDE in RR中矩形KDE的实现
【发布时间】:2013-05-24 20:09:16
【问题描述】:

我想知道 R 中的 KDE 函数是如何实现的,因为我在绘图中看到了一些奇怪的东西。

dates5.csv 无非是:

  day
2013-01-02
2013-03-01

即两个日期。现在我读入数据,根据 if 计算出矩形 KDE,得到下图:

  data <- read.csv("dates5.csv", header=T)
  days <- data$day

  daysPosix <- as.POSIXct(days, tz="Europe/Zurich")

# compute density
  ds <- density(as.numeric(daysPosix), 
                bw = 3600 * 24 * 7,
                kernel = "rectangular",
                cut = 3)
  plot(ds, xaxt ="n", xlab="", ylab="",  ylim = c(0,max(ds$y)),
         main = "Temporal density (uniform kernel,
                     bandwidth = 7 days)")

    points(x = as.numeric(daysPosix),
           y=rep(0, length(daysPosix)),
           pch="|",
           col="#00000080")
    times.seq <- seq(daysPosix[1],
                     daysPosix[length(daysPosix)],
                     by = "weeks")
    labels = strftime(times.seq, "%d.%m.%y")
    axis(1,times.seq,labels)

x 轴上的刻度线以 分隔。乍一看,情节是有道理的,两个矩形形状建立在两个点的顶部。 不过,有两件事我不明白: 为什么每个“形状”的大致范围都超过 3 周,而不是预期的 7天(因为这是带宽?)?为什么这些形状的两边都有陡峭的“悬崖”而不是垂直的?

【问题讨论】:

  • 文档指出:The kernels are scaled such that this is the standard deviation of the smoothing kernel. 所以bw = 3600*24*7/(2*qnorm(0.975)) 似乎给出了一周宽的形状。
  • 您能否再解释一下,也许在我会接受的答案中?
  • 要使形状有垂直下降,增加n,即n=2^15

标签: r kernel kde


【解决方案1】:

?density 注意到:

bw 要使用的平滑带宽。 对内核进行缩放,使其成为平滑内核的标准偏差。

所以bw = 3600*24*7/sqrt(12) 似乎给出了一周宽的形状。换句话说,您需要“缩减”您的带宽,以便当它被density 缩放时,您会得到您想要的。您也可以设置adjust = 1/sqrt(12)

要使形状具有垂直下降,请增加n 以提高计算分辨率,例如n = 2^15

因此,将您的 density 呼叫更改为:

  ds <- density(as.numeric(daysPosix), 
                bw = 3600 * 24 * 7 / sqrt(12),
                kernel = "rectangular",
                cut = 3, n=2^15)

并检查形状的宽度:

which(abs(diff(ds$y))>max(ds$y)/2) # approximate locations of the edges
[1]  1197  4469 28299 31571
(ds$x[4469]-ds$x[1197])/(3600*24*7)
[1] 1.00034

【讨论】:

  • 好的,我以某种方式理解bw = 3600*24*7/(2*qnorm(0.975)) 的部分,除以标准正态分布的 95%。但是由于我们使用统一的内核,除以sqrt(12) 不会给出更合适的结果吗?另一件事是 - 我尝试设置 adjust = 1/(2*qnorm(0.975)) 而不设置 bw,即它使用默认设置 bw = "nrd0".. 但是,从查看情节来看,我得到的结果几乎与指定时完全相同bw = 3600 * 24 * 14 / (2*qnorm(0.975)),即使用 14 天的带宽。这是否意味着默认情况下,“nrd0”...
  • 用我拥有的数据以 14 天的带宽到达?我用不同的时间分布检查了它,但总是得到非常相似的东西。
  • 我仍然没有完全理解为什么一个除以标准正态分布的 95% - 这包括 两个 标准差,而不仅仅是一个,对吧?
  • @wnstnsmth 更仔细地查看形状的宽度,使用 qnorm 大约需要 6.19 天,而 sqrt 方法几乎正好是 7 天。我会改变答案。通过设置adjust 参数,我的意思是调整您的原始带宽。
  • @wnstnsmth 我认为是巧合。请参阅?bw.nrd0 - 等式是:0.9*min(sd(daysPosix),IQR(daysPosix))/1.34*(length(daysPosix)^(-1/5)) 当除以给出天数时给出16.95625
猜你喜欢
  • 2015-12-27
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 2023-03-13
相关资源
最近更新 更多