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%
line
. Anda dapat memiliki lebih banyak detail dengan mengetik ?line
di konsol r
nnls
paket (kotak paling tidak negatif). Itu akan membantu Anda dengan kendala positif, tetapi tidak dengan outlier.