0

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 番目のレコードまでの平均を計算し、シフトし続ける方法です。現在の記録値を保持する方法。

助言がありますか?!!!

4

1 に答える 1