Apakah ada paket yang harus dilakukan regresi linier satu demi satu, yang dapat mendeteksi banyak simpul secara otomatis? Terima kasih. Ketika saya menggunakan paket strucchange. Saya tidak bisa mendeteksi titik perubahan. Saya tidak tahu bagaimana mendeteksi titik perubahan. Dari plot, saya bisa melihat ada beberapa poin yang saya inginkan dapat membantu saya memilihnya. Adakah yang bisa memberi contoh di sini?
regression
change-point
Honglang Wang
sumber
sumber
segmented
paketnya adalah apa yang Anda cari.segmented
paket R : stackoverflow.com/a/18715116/857416Jawaban:
Apakah MARS berlaku? R memiliki paket
earth
yang mengimplementasikannya.sumber
Secara umum, agak aneh jika ingin memasukkan sesuatu sebagai linear yang bijaksana. Namun, jika Anda benar-benar ingin melakukannya, maka algoritma MARS adalah yang paling langsung. Ini akan membangun fungsi satu simpul pada satu waktu; dan kemudian biasanya memangkas kembali jumlah simpul untuk melawan pohon keputusan yang terlalu pas. Anda dapat mengakses algotitme MARS di R via
earth
ataumda
. Secara umum, ini sesuai dengan GCV yang tidak begitu jauh dari kriteria informasi lainnya (AIC, BIC, dll.)MARS tidak akan benar-benar memberikan Anda yang "optimal" cocok karena simpul ditanam satu per satu. Akan sangat sulit untuk menyesuaikan jumlah simpul yang benar-benar "optimal" karena kemungkinan permutasi penempatan simpul akan cepat meledak.
Secara umum, inilah mengapa orang beralih ke smoothing splines. Kebanyakan spline smoothing berbentuk kubik hanya agar Anda dapat menipu mata manusia sehingga tidak memiliki diskontinuitas. Akan sangat mungkin untuk melakukan spline smoothing linier. Keuntungan besar dari smoothing splines adalah parameter tunggal mereka untuk dioptimalkan. Itu memungkinkan Anda untuk dengan cepat mencapai solusi yang benar-benar "optimal" tanpa harus mencari melalui sekumpulan permutasi. Namun, jika Anda benar-benar ingin mencari titik belok, dan Anda memiliki cukup data untuk melakukannya, maka sesuatu seperti MARS mungkin akan menjadi taruhan terbaik Anda.
Berikut adalah beberapa contoh kode untuk penghalusan spline linier yang dihukum dalam R:
Simpul aktual yang dipilih belum tentu berkorelasi dengan titik belok sejati.
sumber
Saya telah memprogram ini dari awal beberapa tahun yang lalu, dan saya memiliki file Matlab untuk melakukan regresi linear sepotong-bijaksana di komputer saya. Sekitar 1 hingga 4 breakpoint secara komputasi dimungkinkan untuk sekitar 20 titik pengukuran. 5 atau 7 break point mulai terlalu banyak.
Pendekatan matematika murni seperti yang saya lihat adalah mencoba semua kombinasi yang mungkin seperti yang disarankan oleh pengguna mbq dalam pertanyaan yang ditautkan dalam komentar di bawah pertanyaan Anda.
Karena garis yang dipasang semua berurutan dan berdekatan (tidak ada tumpang tindih), kombinatorik akan mengikuti segitiga Pascals. Jika ada tumpang tindih antara titik data yang digunakan oleh segmen garis saya percaya bahwa kombinatorik akan mengikuti angka Stirling dari jenis kedua sebagai gantinya.
Solusi terbaik dalam pikiran saya adalah memilih kombinasi garis pas yang memiliki standar deviasi terendah dari nilai korelasi R ^ 2 dari garis pas. Saya akan mencoba menjelaskan dengan sebuah contoh. Perlu diingat bahwa menanyakan berapa banyak break point yang harus ditemukan dalam data, sama dengan mengajukan pertanyaan "Berapa lama pantai Inggris?" seperti di salah satu makalah Benoit Mandelbrots (ahli matematika) tentang fraktal. Dan ada trade-off antara jumlah break point dan kedalaman regresi.
Sekarang untuk contoh.
These y values have the graph:
Which clearly has two break points. For the sake of argument we will calculate the R^2 correlation values (with the Excel cell formulas (European dot-comma style)):
for all possible non-overlapping combinations of two fitted lines. All the possible pairs of R^2 values have the graph:
The question is which pair of R^2 values should we choose, and how do we generalize to multiple break points as asked in the title? One choice is to pick the combination for which the sum of the R-square correlation is the highest. Plotting this we get the upper blue curve below:
The blue curve, the sum of the R-squared values, is the highest in the middle. This is more clearly visible from the table with the value1,0455 as the highest value.
However it is my opinion that the minimum of the red curve is more accurate. That is, the minimum of the standard deviation of the R^2 values of the fitted regression lines should be the best choice.
Piece wise linear regression - Matlab - multiple break points
sumber
There is a pretty nice algorithm described in Tomé and Miranda (1984).
The code and a GUI are available in both Fortran and IDL from their website: http://www.dfisica.ubi.pt/~artome/linearstep.html
sumber
... first of all you must to do it by iterations, and under some informative criterion, like AIC AICc BIC Cp; because you can get an "ideal" fit, if number of knots K = number od data points N, ok. ... first put K = 0; estimate L = K + 1 regressions, calculate AICc, for instance; then assume minimal number of data points at a separate segment, say L = 3 or L = 4, ok ... put K = 1; start from L-th data as the first knot, calculate SS or MLE, ... and step by step the next data point as a knot, SS or MLE, up to the last knot at the N - L data; choose the arrangement with the best fit (SS or MLE) calculate AICc ... ... put K = 2; ... use all previous regressions (that is their SS or MLE), but step by step divide a single segment into all possible parts ... choose the arrangement with the best fit (SS or MLE) calculate AICc ... if the last AICc occurs greater then the previous one: stop the iterations ! This is an optimal solution under AICc criterion, ok
sumber
I once came across a program called Joinpoint. On their website they say it fits a joinpoint model where "several different lines are connected together at the 'joinpoints'". And further: "The user supplies the minimum and maximum number of joinpoints. The program starts with the minimum number of joinpoint (e.g. 0 joinpoints, which is a straight line) and tests whether more joinpoints are statistically significant and must be added to the model (up to that maximum number)."
The NCI uses it for trend modelling of cancer rates, maybe it fits your needs as well.
sumber
In order to fit to data a piecewise function :
wherea1,a2,p1,q1,p2,q2,p3,q3 are unknown parameters to be approximately computed, there is a very simple method (not iterative, no initial guess, easy to code in any math computer language). The theory given page 29 in paper : https://fr.scribd.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf and from page 30 :
For example, with the exact data provided by Mats Granvik the result is :
Without scattered data, this example is not very signifiant. Other examples with scattered data are shown in the referenced paper.
sumber
You can use the
mcp
package if you know the number of change points to infer. It gives you great modeling flexibility and a lot of information about the change points and regression parameters, but at the cost of speed.The mcp website contains many applied examples, e.g.,
Then you can visualize:
Or summarise:
Disclaimer: I am the developer of mcp.
sumber