これは興味深い問題だと思ったので、サンプルデータセットと線形勾配推定器をRで作成しました。問題の解決に役立つことを願っています。私はいくつかの仮定を立てますが、最大のものは、データのいくつかのセグメントによって与えられる一定の勾配を推定したいということです。線形データのブロックを分離するもう1つの仮定は、自然な「リセット」は、連続する差を比較し、平均よりもX標準偏差が大きいものを見つけることによって見つかることです。(私は4つのSDを選択しましたが、これは変更できます)
これはデータのプロットで、それを生成するためのコードは一番下にあります。
まず、ブレークを見つけて、Y値の各セットを近似し、勾配を記録します。
# Find the differences between adjacent points
diffs = y_data[-1] - y_data[-length(y_data)]
# Find the break points (here I use 4 s.d.'s)
break_points = c(0,which(diffs < (mean(diffs) - 4*sd(diffs))),length(y_data))
# Create the lists of y-values
y_lists = sapply(1:(length(break_points)-1),function(x){
y_data[(break_points[x]+1):(break_points[x+1])]
})
# Create the lists of x-values
x_lists = lapply(y_lists,function(x) 1:length(x))
#Find all the slopes for the lists of points
slopes = unlist(lapply(1:length(y_lists), function(x) lm(y_lists[[x]] ~ x_lists[[x]])$coefficients[2]))
勾配は次のとおりです:(3.309110、4.419178、3.292029、4.531126、3.675178、4.294389)
そして、平均をとって、予想される勾配(3.920168)を見つけることができます。
編集:シリーズが120に達する時期の予測
系列が120に達したときに予測を完了していなかったことに気付きました。勾配をmと推定し、時間tで値x(x <120)にリセットされた場合、到達するのにかかる時間を予測できます。いくつかの単純な代数による120。
ここで、tはリセット後120に達するまでの時間、xはリセット後の時間、mは推定勾配です。ここではユニットの主題に触れることはしませんが、それらを解決してすべてが理にかなっていることを確認することは良い習慣です。
編集:サンプルデータの作成
サンプルデータは、100ポイント、勾配4のランダムノイズで構成されます(できればこれを推定します)。y値がカットオフに達すると、50にリセットされます。カットオフは、リセットごとに115〜120の間でランダムに選択されます。以下は、データセットを作成するためのRコードです。
# Create Sample Data
set.seed(1001)
x_data = 1:100 # x-data
y_data = rep(0,length(x_data)) # Initialize y-data
y_data[1] = 50
reset_level = sample(115:120,1) # Select initial cutoff
for (i in x_data[-1]){ # Loop through rest of x-data
if(y_data[i-1]>reset_level){ # check if y-value is above cutoff
y_data[i] = 50 # Reset if it is and
reset_level = sample(115:120,1) # rechoose cutoff
}else {
y_data[i] = y_data[i-1] + 4 + (10*runif(1)-5) # Or just increment y with random noise
}
}
plot(x_data,y_data) # Plot data