移動平均データからデータポイントを抽出することは可能ですか?
言い換えれば、データのセットが前の30ポイントの単純な移動平均のみを持っている場合、元のデータポイントを抽出することは可能ですか?
もしそうなら、どのように?
移動平均データからデータポイントを抽出することは可能ですか?
言い換えれば、データのセットが前の30ポイントの単純な移動平均のみを持っている場合、元のデータポイントを抽出することは可能ですか?
もしそうなら、どのように?
回答:
完了したfabeeの回答に+1。手元の操作を行うことがわかったパッケージに基づいて、Rに変換するためのメモです。私の場合、NOAAの気温を3か月単位で予測したデータがありました:1月から2月から3月、2月から3月、4月、3月から4月、5月などです。 3か月の各期間の温度が本質的に平均であると仮定した場合の月単位の値。
library (Matrix)
library (matrixcalc)
# Feb-Mar-Apr through Nov-Dec-Jan temperature forecasts:
qtemps <- c(46.0, 56.4, 65.8, 73.4, 77.4, 76.2, 69.5, 60.1, 49.5, 41.2)
# Thus I need a 10x12 matrix, which is a band matrix but with the first
# and last rows removed so that each row contains 3 1's, for three months.
# Yeah, the as.matrix and all is a bit obfuscated, but the results of
# band are not what svd.inverse wants.
a <- as.matrix (band (matrix (1, nrow=12, ncol=12), -1, 1)[-c(1, 12),])
ai <- svd.inverse (a)
mtemps <- t(qtemps) %*% t(ai) * 3
それは私にとって素晴らしい作品です。ありがとう@fabee。
編集:OK、RをPythonに逆翻訳すると、次のようになります:
from numpy import *
from numpy.linalg import *
qtemps = transpose ([[46.0, 56.4, 65.8, 73.4, 77.4, 76.2, 69.5, 60.1, 49.5, 41.2]])
a = tril (ones ((12, 12)), 2) - tril (ones ((12, 12)), -1)
a = a[0:10,:]
ai = pinv (a)
mtemps = dot (ai, qtemps) * 3
(Rバージョンよりもデバッグに時間がかかりました。まず、RほどPythonに精通していないためですが、Rが対話的にはるかに使いやすいためです。)
私はwhuberが言ったことを答えに入れようとします。n = 2000エントリの大きなベクトルとします。もし長さのウィンドウで移動平均を計算する場合ℓ = 30、あなたはベクトル行列乗算としてこれを書くことができ、Y = A X、ベクトルのX行列と
これには、の行があり、行を進みながら30個の行がシフトして、マトリックスの最後に到達します。ここで、平均化されたベクトルyは1970次元です。マトリックスには、1970行と2000列があります。したがって、それは可逆的ではありません。
多くの数値プログラムは擬似逆関数を提供します(Matlab、pythonのnumpyなど)。
ここに私の例から信号を生成するためのPythonコードがあります:
from numpy import *
from numpy.linalg import *
from matplotlib.pyplot import *
# get A and its inverse
A = (tril(ones((2000,2000)),-1) - tril(ones((2000,2000)),-31))/30.
A = A[30:,:]
pA = pinv(A) #pseudo inverse
# get x
x = random.randn(2000) + 5
y = dot(A,x)
# reconstruct
x2 = dot(pA,y)
plot(x,label='original x')
plot(y,label='averaged x')
plot(x2,label='reconstructed x')
legend()
show()
お役に立てば幸いです。