我有一个时间序列的比例,IE
, ...
我要平滑. 我应该直接将平滑函数应用于,或者我应该平滑和单独,然后重新计算比例?
我的直觉告诉我你应该平滑单个时间序列,然后重新计算。假设三个时间序列中的每一个都有噪声(这就是我们对平滑开始感兴趣的原因),那么也许,. 然后是比例, 可以通过取来平滑
我有一个时间序列的比例,IE
, ...
我要平滑. 我应该直接将平滑函数应用于,或者我应该平滑和单独,然后重新计算比例?
我的直觉告诉我你应该平滑单个时间序列,然后重新计算。假设三个时间序列中的每一个都有噪声(这就是我们对平滑开始感兴趣的原因),那么也许,. 然后是比例, 可以通过取来平滑
计算平滑计数的比率是错误的,因为许多比率可能不是真实的比例——它们可能(很容易)超出有效范围至. (这发生在下面描述的示例中。)
由于分母变化很大,并且基于这种分母的计数通常具有与分母成比例的方差,您应该考虑使用作为权重。
为了研究这个,我创建了时间序列和它们变化很大并且在时间上是相关的。这有基于计数的二项式分布,具有规律(正弦)变化的概率。这些,以及它们的比例, 如下图第一行所示。(观察点按比例缩放,因此它们的面积与:更大的点代表更可靠的数据。)然后我计算四个可能的平滑:平滑的比率、平滑的比率和两个加权版本。它们占据接下来的两行:一排用于未加权版本,另一行用于加权版本。最后,底行显示了这四个平滑相对于真实概率的散点图。
在试验不同的值n(系列的长度,范围从至) 和m(最大可能值,范围从至),我发现加权平滑比率比未加权平滑比率稍微——但明显——好于未加权平滑比率,并且两者都始终比平滑比率(加权或不加权)好得多。 将右下角散点图(“Wtd 平滑比率”)与其未加权对应物进行比较,底部左数第二个(“平滑比率”)。理想情况下,这些图将是对角线。注意平滑比率的狂野行为及其与理想的极端偏离。在第一列(第二行和第三行)中显示的数据的平滑图中,这种可怕性同样明显。

n <- 80
m <- 30
z <- 1.1
p <- (1 + sin(2 * pi * 1:n / n)) / (1+z)
q <- (1 + sin(5/3 * 2 * pi * 1:n / n)) / (1+z)
b <- ceiling(0.001 + m * q)
scale <- sqrt(b/m)*3
set.seed(26)
a <- rbinom(n, b, p)
col = c(rgb(.8,.2,.2), rgb(.2,.2,.8), rgb(.2,.8,.2), "Black", "Gray")
par(mfrow=c(4,4))
plot(p, type="l", lwd=2, col=col[1], main="Actual")
plot(a, col=col[2], main="Numerators")
plot(b, col=col[3], main="Denominators")
plot(a/b, col=col[5], main="Observed Ratios", cex=scale)
a.smooth <- loess(a ~ as.vector(1:n))
b.smooth <- loess(b ~ as.vector(1:n))
a.b.smooth <- loess(a/b ~ as.vector(1:n))
plot(a.smooth$fitted / b.smooth$fitted, col=col[1], type="l", lwd=2,
main="Ratio of Smooths")
points(a/b, col=col[5], cex=scale)
plot(a.smooth$fitted, col=col[2], type="l", lwd=2, main="Smoothed Numerators")
plot(b.smooth$fitted, col=col[3], type="l", lwd=2, main="Smoothed Denominators")
plot(a.b.smooth$fitted, col=col[4], type="l", lwd=2, main="Smoothed Ratios")
points(a/b, col=col[5], cex=scale)
a.smooth.w <- loess(a ~ as.vector(1:n), weights=b)
b.smooth.w <- loess(b ~ as.vector(1:n), weights=b)
a.b.smooth.w <- loess(a/b ~ as.vector(1:n), weights=b)
plot(a.smooth.w$fitted / b.smooth.w$fitted, col=col[1], type="l", lwd=2,
main="(Weighted version)")
points(a/b, col=col[5], cex=scale)
plot(a.smooth.w$fitted, col=col[2], type="l", lwd=2, main="(Weighted version)")
plot(b.smooth.w$fitted, col=col[3], type="l", lwd=2, main="(Weighted version)")
plot(a.b.smooth.w$fitted, col=col[4], type="l", lwd=2, main="(Weighted version)")
points(a/b, col=col[5], cex=scale)
plot(p, a.smooth$fitted / b.smooth$fitted, col=col[1], type="l", lwd=2,
main="Ratio of Smooths")
plot(p, a.b.smooth$fitted, col=col[1], type="l", lwd=2, main="Smoothed Ratios")
plot(p, a.smooth.w$fitted / b.smooth.w$fitted, col=col[1], type="l", lwd=2,
main="Ratio of Wtd Smooths")
plot(p, a.b.smooth.w$fitted, col=col[1], type="l", lwd=2,
main="Wtd Smoothed Ratios")
我不是时间序列方面的专家,但没有人这么回答......周四下午玩了一点:
#MAKE UP DATA
set.seed(16549678)
time <- 1:100
a <- round(runif(100, 5, 10) + rnorm(100,0,1))
b <- round(a*4+rnorm(100))
x <- a/b
#PLOTS OF RAW DATA, RED IS FOR B
plot(time, a, ylim = c(0,50), type = 'l')
lines(x = time, y=b, col = 2 )
#SMOOTH THE DATA
a.lowess <- lowess(a~time)
b.lowess <- lowess(b~time)
x.lowess <- lowess(x~time)
x.abfirst <- a.lowess$y/b.lowess$y
#Compare
plot(x.lowess$y,x.abfirst)
plot(time,x.lowess$y, ylim = c(.2,.3))
lines(time, x.abfirst, col = 2)
至少对于这个例子来说,这似乎并不重要。