2 つの列 (時間、結果) を含むデータがあります。毎秒、「結果」の値が異なります。特定の条件を超えた場合、「結果」の値を毎秒確認したい。前の平均に基づいて、「結果」の値ごとに条件が変化しています。前の平均は、次の指数加重移動平均 (EWMA) に基づいて計算されます。
μn = μn−1 + (1 − lambda)Xn ,
lambda is the EWMA factor (for this example use 0.2)
μn−1 is the mean value calculated from measurements prior to record n.
μn is the mean.
Xn is the value of 'Result' in the nth record.
n is number of records in the df
条件は次のとおりです。
g は、条件が真になるたびに増加する変数です。
if (Xn > (1.5)μn−1) {
g<-g+1
}
このロジックは、データ内のすべてのレコードに対して実行する必要があります。
MWE は次のとおりです。
readFile<- read.table("data.tr",header=F, stringsAsFactor=F)
colnames(readFile)<-c("time","Results")
df<-data.frame(Time=readFile$time,Results=readFile$Results)
#The data looks like (df);
Time Results
1 10
2 15
3 15
4 10
5 10
6 30
7 15
8 25
9 40
10 22
11 48
12 50
13 30
14 40
15 64
16 46
17 30
18 10
19 17
20 53
#define variables
g<-0
result<-0
previousAverage<-0
for(i in df){
result<-df&Results[i]
# Here I'm confused how to make the recursive call !!
#I'm assuming the average should be returned from a separate method
#(i.e AverageCalculation) and use in the condition
condition <- (1.5) * previousAverage
if ( result > condition){
g<-g+1
}
}
「qcc」パッケージが EWMA を計算し、計算を簡素化することがわかりました。ただし、上記の式を使用したいと思います。私にとって難しいのは、最初のレコードから n-1 番目のレコードまでの平均を計算し、シフトし続ける方法です。現在の記録値を保持する方法。
助言がありますか?!!!