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 ( line
fungsi dalam R
) via
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)
yang menghasilkan:
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.
Kebutuhan saya adalah untuk memiliki hasil yang sama dalam kedua skenario di atas. R tampaknya tidak memiliki fungsi siap pakai untuk regresi monoton, selain isoreg
itu 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%
sumber
line
. Anda dapat memiliki lebih banyak detail dengan mengetik?line
di konsol rnnls
paket (kotak paling tidak negatif). Itu akan membantu Anda dengan kendala positif, tetapi tidak dengan outlier.Jawaban:
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
rlm
fungsi dalamMASS
(M-estimasi) harus berurusan dengan ini khususnya kasus (memiliki breakdown tinggi terhadap y-outlier), tetapi tidak akan memiliki ketahanan untuk berpengaruh outlier.Fungsi
lqs
dalam 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 mengapaline
rusak seperti itu tergantung pada yang mana dari beberapa penaksir kuat yang Tukey sebutkan danline
mungkin 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 implementasikanline
mungkin 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
line
memiliki beberapa perilaku aneh - sangat aneh sehingga saya bertanya-tanya apakah mungkin ada bug - jika Anda melakukan ini:Maka
line
garis memiliki kemiringan 1.2: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.sumber
lqs
melakukan pekerjaan! Jadi saya menerima jawaban Anda :-) terima kasih banyak. Jika Anda masih bisa membantu saya memahami bagan ketiga akan sangat bagus! Cheerslqs
untuk saat ini. Terima kasih lagi