0

質問があります。Matlab には、20 年間の毎日のデータ (X) のベクトルと、関連する日付 (DATES) のベクトルがあります。1 年あたりの日次データの平均値を見つけるために、次のスクリプトを使用します。

A = fints(DATES,X);                          %convert to financial time series
B = toannual(A,'CalcMethod', 'SimpAvg');     %calculate average value per year
C = fts2mat(B);                              %Convert fts object to vector

C は 20 個の値のベクトルです。20年ごとの毎日のデータの平均値を示しています。これまでのところ、とても良い..今、私は同じことをしようとしていますが、毎年平均値を計算する代わりに、毎年stdを計算する必要がありますが、関数「toannual」にはそのようなオプションがないようです.

これを行う方法についてのアイデアはありますか?

前もって感謝します

4

1 に答える 1

1

X は財務情報であり、毎年均等に分布していると仮定しています。そうでない場合は、これを変更する必要があります。明確にするために、均等な分布とは、20 年があり、X に 200 の値がある場合、各年に 10 の値があることを意味します。

次のようなことができるはずです。

num_years = length(C);
span_size = length(X)/num_years;
for n = 0:num_years-1
    std_dev(n+1,1) = std(X(1+(n*span_size):(n+1)*span_size));
end

アイデアは、特定の年の日付 (日々の値) を matlab の標準偏差関数に渡すだけです。これにより、その年の std-dev が返されます。は、年平均のベクトルstd_devと 1:1 で相関する列ベクトルである必要があります。C


unique_Dates = unique(DATES) %This should return a vector of 20 elements since you have 20 years.
std_dev = zeros(size(unique_Dates)); %Just pre allocating the standard deviation vector.
for n = 1:length(unique_Dates)
    std_dev(n) = std(X(DATES==unique_Dates(n)));
end

DATESこれは、マトリックスが一意の関数に渡され、予想される日付のリストが返されることを前提としています。数値形式の日付がある場合、これが機能することはわかっていますが、日付が文字列形式であることだけが心配です。

それらが文字列形式である場合は、使用regexpして情報を解析し、一致する日付を数値識別子に置き換えて、上記のコードを使用することができます。または、この背後にある基本的な理論を採用して、自分に最適なものに適応させることもできます!

于 2012-08-01T14:38:25.233 に答える