Regresi monotonik yang kuat dalam R

8

Saya memiliki tabel berikut ini di R

df <- structure(list(x = structure(c(12458, 12633, 12692, 12830, 13369, 
13455, 13458, 13515), class = "Date"), y = c(6080, 6949, 7076, 
7818, 0, 0, 10765, 11153)), .Names = c("x", "y"), row.names = c("1", 
"2", "3", "4", "5", "6", "8", "9"), class = "data.frame")

> df
           x     y
1 2004-02-10  6080
2 2004-08-03  6949
3 2004-10-01  7076
4 2005-02-16  7818
5 2006-08-09     0
6 2006-11-03     0
8 2006-11-06 10765
9 2007-01-02 11153

Saya dapat memplot poin dan fitting linear Tukey ( linefungsi dalam R) via

plot(data=df,  y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)

yang menghasilkan:

masukkan deskripsi gambar di sini

Semua baik-baik saja Plot di atas menunjukkan nilai konsumsi energi, yang diperkirakan hanya akan meningkat, jadi saya senang dengan fit yang tidak melewati kedua poin tersebut (yang kemudian akan ditandai sebagai outlier).

Namun, "hanya" menghapus poin terakhir dan replot lagi

df <- df[-nrow(df),]
plot(data=df,  y ~ x)
lines(df$x, line(df$x, df$
)$fitted.values)

Hasilnya sangat berbeda.

masukkan deskripsi gambar di sini

Kebutuhan saya adalah untuk memiliki hasil yang sama dalam kedua skenario di atas. R tampaknya tidak memiliki fungsi siap pakai untuk regresi monoton, selain isoregitu bagaimanapun konstan.

EDIT:

Seperti @Glen_b menunjukkan rasio ukuran outliers-to-sampel terlalu besar (~ 28%) untuk teknik regresi yang digunakan di atas. Namun, saya percaya mungkin ada hal lain yang perlu dipertimbangkan. Jika saya menambahkan poin di awal tabel:

df <- rbind(data.frame(x=c(as.Date("2003-10-01"), as.Date("2003-12-01")), y=c(5253,5853)), df)

dan hitung ulang lagi seperti di atas plot(data=df, y ~ x); lines(df$x, line(df$x,df$y)$fitted.values)saya mendapatkan hasil yang sama, dengan rasio ~ 22%

masukkan deskripsi gambar di sini

Michele
sumber
Bisakah Anda menjelaskan kepada kami apa yang Anda maksud dengan "kalimat Tukey"? (Dia menggunakan berbagai metode pemasangan garis tahan.)
whuber
@whuber oh saya mengerti, maaf. Adalah metode yang diterapkan dalam fungsi R line. Anda dapat memiliki lebih banyak detail dengan mengetik ?linedi konsol r
Michele
Terima kasih, tapi saya khawatir itu tidak baik sama sekali: bantuan itu hanya merujuk pada buku EDA 1977 Tukey - yang dengannya saya cukup akrab dan di mana saya dapat mengidentifikasi banyak metode pemasangan garis - dan kode itu hanya memanggil C program. Mungkin kita bisa membuat kemajuan jika Anda bisa menjelaskan dengan lebih jelas apa yang ingin Anda capai. Bagaimana Anda menandai (secara umum) perbedaan antara dua "skenario" Anda? Mengapa Anda lebih suka solusi pertama?
whuber
1
(+1) "Seharusnya hanya meningkat" adalah kuncinya: Anda bertanya tentang bagaimana melakukan regresi monotonik (kuat) . Akan lebih membantu untuk menekankan poin itu lebih dalam pertanyaan Anda: Anda akan mendapatkan jawaban yang lebih baik.
Whuber
1
@ Michele Mungkin Anda bisa melihat-lihat nnlspaket (kotak paling tidak negatif). Itu akan membantu Anda dengan kendala positif, tetapi tidak dengan outlier.
Matteo Fasiolo

Jawaban:

10

Saya perhatikan bahwa setelah Anda menghapus titik terakhir, Anda hanya memiliki tujuh nilai di mana dua (28,6%!) Adalah outlier. Banyak metode yang kuat tidak memiliki titik rincian yang cukup tinggi (misalnya, regresi Theil rusak tepat pada titik itu untuk n = 7, meskipun pada umumnya itu menjadi 29,3%), tetapi jika Anda harus memiliki gangguan tinggi yang itu dapat mengelola banyak outlier, Anda perlu memilih beberapa pendekatan yang sebenarnya memiliki titik kerusakan yang lebih tinggi.n

Ada beberapa yang tersedia di R; yang rlmfungsi dalam MASS(M-estimasi) harus berurusan dengan ini khususnya kasus (memiliki breakdown tinggi terhadap y-outlier), tetapi tidak akan memiliki ketahanan untuk berpengaruh outlier.

Fungsi lqsdalam paket yang sama harus berurusan dengan outlier yang berpengaruh, atau ada sejumlah paket yang baik untuk regresi yang kuat pada CRAN.

Anda dapat menemukan Fox and Weisberg's Robust Regression in R ( pdf ) sumber yang berguna pada beberapa konsep regresi yang kuat.

Semua ini hanya berurusan dengan regresi linier yang kuat dan mengabaikan kendala monotonisitas, tapi saya membayangkan itu akan menjadi sedikit masalah jika Anda menyelesaikan masalah rinciannya. Jika Anda masih mendapatkan kemiringan negatif setelah melakukan regresi robust dengan breakdown tinggi, tetapi menginginkan garis nondecreasing, Anda akan menetapkan garis untuk memiliki kemiringan nol - yaitu memilih estimasi lokasi yang kuat dan mengatur garis agar konstan di sana. (Jika Anda ingin regresi nonlinier-tapi-monotonik yang kuat, Anda harus menyebutkannya secara spesifik.)


Menanggapi hasil edit:

Anda tampaknya telah menafsirkan contoh saya tentang regresi Theil sebagai komentar tentang titik rincian line. Bukan itu; itu hanyalah contoh pertama dari garis kuat yang datang kepada saya yang rusak pada proporsi yang lebih kecil dari kontaminasi.

Seperti yang sudah dijelaskan oleh whuber, kita tidak bisa dengan mudah membedakan mana dari beberapa baris yang digunakan line. Alasan mengapa linerusak seperti itu tergantung pada yang mana dari beberapa penaksir kuat yang Tukey sebutkan dan linemungkin gunakan.

Misalnya, jika garisnya yang 'membagi data menjadi tiga kelompok dan untuk lereng gunakan kemiringan garis yang menghubungkan median dari dua pertiga bagian luar' (kadang-kadang disebut garis tahan tiga kelompok , atau garis median-median) ), maka titik breakdownnya adalah asimptotik 1/6, dan perilakunya dalam sampel kecil tergantung pada bagaimana tepatnya poin dialokasikan ke grup ketika bukan kelipatan 3.n

Harap dicatat bahwa saya tidak mengatakan itu adalah garis resistansi tiga grup yang diterapkan line- pada kenyataannya saya pikir tidak - tetapi hanya bahwa apa pun yang telah mereka implementasikan linemungkin memiliki titik rincian sehingga garis yang dihasilkan tidak dapat berurusan dengan 2 poin aneh dari 8, jika mereka berada di posisi 'benar'.

Sebenarnya baris yang diimplementasikan linememiliki beberapa perilaku aneh - sangat aneh sehingga saya bertanya-tanya apakah mungkin ada bug - jika Anda melakukan ini:

 x = y = 1:9 #all points lie on a line with slope 1
 plot(x,y)
 abline(line(x,y),col=2)

Maka linegaris memiliki kemiringan 1.2:

masukkan deskripsi gambar di sini

Dari atas kepala saya, saya tidak ingat ada garis Tukey yang memiliki perilaku itu.


Ditambahkan jauh kemudian: Saya melaporkan masalah ini ke pengembang beberapa waktu lalu; butuh beberapa rilis sebelum diperbaiki tetapi sekarang line(yang ternyata menjadi bentuk tiga kelompok Tukey) tidak lagi memiliki bug ini; sekarang tampaknya berperilaku seperti yang saya harapkan dalam semua hal yang saya coba.

Glen_b -Reinstate Monica
sumber
Hai terima kasih untuk semua itu. Pada saat ini kebutuhan saya adalah linear regresi monoton. Breakdown point sangat menarik dan saya seharusnya mempertimbangkannya. Namun, bisakah Anda memberi komentar pada bagan ketiga yang baru saja saya tambahkan? Saya menambahkan dua poin di awal yang harus membawa rasio menjadi 22%
Michele
omong-omong lqsmelakukan pekerjaan! Jadi saya menerima jawaban Anda :-) terima kasih banyak. Jika Anda masih bisa membantu saya memahami bagan ketiga akan sangat bagus! Cheers
Michele
1
Saya telah melakukan edit yang saya harap akan mengklarifikasi sesuatu. Jika saya melewatkan sesuatu, beri tahu saya.
Glen_b -Reinstate Monica
Terimakasih banyak. Saya bukan ahli statistik (mudah diceritakan), dan Anda sangat membantu! Saya pikir saya akan tetap dengan lqsuntuk saat ini. Terima kasih lagi
Michele