Ich dachte, dies sei ein interessantes Problem, also schrieb ich einen Beispieldatensatz und einen linearen Steigungsschätzer in R. Ich hoffe, es hilft Ihnen bei Ihrem Problem. Ich werde einige Annahmen treffen, die größte ist, dass Sie eine konstante Steigung schätzen möchten, die von einigen Segmenten in Ihren Daten angegeben wird. Eine andere Annahme, um die Blöcke linearer Daten zu trennen, ist, dass das natürliche "Zurücksetzen" gefunden wird, indem aufeinanderfolgende Unterschiede verglichen und solche gefunden werden, die X-Standardabweichungen unter dem Mittelwert liegen. (Ich habe 4 SDs gewählt, aber das kann geändert werden)
Hier ist eine grafische Darstellung der Daten, und der Code zum Generieren befindet sich unten.
Für den Anfang finden wir die Pausen und passen jeden Satz von y-Werten an und zeichnen die Steigungen auf.
# 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]))
Hier sind die Pisten: (3.309110, 4.419178, 3.292029, 4.531126, 3.675178, 4.294389)
Und wir können einfach den Mittelwert nehmen, um die erwartete Steigung zu finden (3.920168).
Bearbeiten: Vorhersagen, wann die Serie 120 erreicht
Mir wurde klar, dass ich die Vorhersage nicht beendet habe, wenn die Serie 120 erreicht. Wenn wir die Steigung auf m schätzen und zum Zeitpunkt t einen Reset auf einen Wert x (x <120) sehen, können wir vorhersagen, wie lange es dauern würde, bis die Serie erreicht ist 120 durch eine einfache Algebra.
Hier ist t die Zeit, die benötigt wird, um nach einem Zurücksetzen 120 zu erreichen, x ist das, worauf es zurückgesetzt wird, und m ist die geschätzte Steigung. Ich werde hier nicht einmal das Thema Einheiten ansprechen, aber es ist eine gute Praxis, sie auszuarbeiten und sicherzustellen, dass alles Sinn macht.
Bearbeiten: Erstellen der Beispieldaten
Die Beispieldaten bestehen aus 100 Punkten, zufälligem Rauschen mit einer Steigung von 4 (hoffentlich schätzen wir dies). Wenn die y-Werte einen Grenzwert erreichen, werden sie auf 50 zurückgesetzt. Der Grenzwert wird bei jedem Zurücksetzen zufällig zwischen 115 und 120 gewählt. Hier ist der R-Code zum Erstellen des Datensatzes.
# 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