Saya pikir ini adalah masalah yang menarik, jadi saya menulis kumpulan data sampel dan penaksir kemiringan linier di R. Saya harap ini membantu Anda dengan masalah Anda. Saya akan membuat beberapa asumsi, yang terbesar adalah Anda ingin memperkirakan kemiringan konstan, yang diberikan oleh beberapa segmen dalam data Anda. Asumsi lain untuk memisahkan blok data linier adalah bahwa 'reset' alami akan ditemukan dengan membandingkan perbedaan berturut-turut dan menemukan yang penyimpangan standar-X di bawah rata-rata. (Saya memilih 4 sd, tetapi ini bisa diubah)
Berikut adalah sebidang data, dan kode untuk menghasilkannya ada di bagian bawah.
Sebagai permulaan, kami menemukan jeda dan pas untuk setiap set nilai-y dan mencatat lereng.
# 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]))
Inilah lerengnya: (3.309110, 4.419178, 3.292029, 4.531126, 3.675178, 4.294389)
Dan kita bisa mengambil mean untuk menemukan kemiringan yang diharapkan (3.920168).
Sunting: Memprediksi kapan seri mencapai 120
Saya menyadari bahwa saya tidak menyelesaikan prediksi ketika seri mencapai 120. Jika kami memperkirakan kemiringan menjadi m dan kami melihat reset pada waktu t ke nilai x (x <120), kami dapat memperkirakan berapa lama lagi untuk mencapai 120 oleh beberapa aljabar sederhana.
Di sini, t adalah waktu yang dibutuhkan untuk mencapai 120 setelah reset, x adalah apa yang diatur ulang, dan m adalah kemiringan yang diperkirakan. Saya bahkan tidak akan menyentuh subjek unit di sini, tetapi praktik yang baik untuk menyelesaikannya dan memastikan semuanya masuk akal.
Edit: Membuat Data Sampel
Data sampel akan terdiri dari 100 poin, derau acak dengan kemiringan 4 (Semoga kita akan memperkirakan ini). Ketika nilai-y mencapai cutoff, mereka mereset ke 50. Cutoff dipilih secara acak antara 115 dan 120 untuk setiap reset. Berikut adalah kode R untuk membuat kumpulan data.
# 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