簡體   English   中英

R 具有高斯分布的加權平均值

[英]R weighted mean with gaussian distribution

有限的統計教育,所以可能正在嘗試定義一些簡單的 function,或者為什么我找不到現有的答案

問題是計算時間序列的加權平均值,對最新數據具有更大的權重。 權重應遵循“高斯曲線的一側”function(“S”曲線?),從最近(最后)點開始的最高值。 我意識到會有幾個系數來定義曲線的梯度,但假設“正常”

R 中沿“S”曲線的加權點

這似乎在問同樣的問題,但唯一的答案對於我正在尋找的東西來說有點過度設計

我可以生成一個線性加權平均值如下

# time series data
d <- c(7, 8, 10, 7, 8, 11, 9, 6, 13, 10, 11, 11)
# weight coefficients
w <- seq(1, length(d), 1)
w <- w / sum(w)
w
[1] 0.01282051 0.02564103 0.03846154 0.05128205 0.06410256 0.07692308 0.08974359 0.10256410
[9] 0.11538462 0.12820513 0.14102564 0.15384615
weighted.mean(d, w, na.rm = T)
[1] 9.846154

如何使用w的“高斯序列”而不是線性序列?

您可以獲得遵循正態分布左側的權重,如下所示:

w <- dnorm(seq(-3, 0, length = length(d)))
w <- w / sum(w)

所以權重看起來像這樣:

plot(w)

在此處輸入圖像描述

如果希望曲線更陡峭,可以將dnormsd參數設置為小於 1,如果希望曲線更平緩,則增加其值。 目前示例顯示默認值,sd = 1。


編輯

一種可能允許更好控制的替代方法是邏輯曲線:

w <- plogis(seq(-1, 1, length = length(d)), scale = 0.3)
w <- w / sum(w)
plot(w)

在此處輸入圖像描述

w <- plogis(seq(-1, 1, length = length(d)), scale = 0.15)
w <- w / sum(w)
plot(w)

在此處輸入圖像描述

要沿時間序列運行加權平均值,出於效率原因,我建議使用convolve ,而不是嘗試重新實現它。 例如:

d <- c(7, 8, 10, 7, 8, 11, 9, 6, 13, 10, 11, 11)

k <- dnorm(seq(-2,2, length.out = 5))

convolve(d, k/sum(k), type = "filter")


[1]  9.466427  7.427122  8.213693 10.465371  8.894341  7.066883 11.933909
[8] 10.425011

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM