Tôi có bảng sau 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
Tôi có thể vẽ các điểm và khớp tuyến tính của Tukey ( line
hàm trong R
) thông qua
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)
sản xuất:
Tất cả đều tốt. Biểu đồ trên cho thấy các giá trị tiêu thụ năng lượng, dự kiến chỉ tăng, vì vậy tôi hài lòng với sự phù hợp khi không đi qua hai điểm đó (sau đó sẽ được gắn cờ là ngoại lệ).
Tuy nhiên, "chỉ" xóa điểm cuối cùng và thay thế lại
df <- df[-nrow(df),]
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$
)$fitted.values)
Kết quả hoàn toàn khác nhau.
Nhu cầu của tôi là có kết quả lý tưởng giống nhau trong cả hai kịch bản trên. R dường như không sẵn sàng sử dụng hàm cho hồi quy đơn điệu, bên cạnh isoreg
đó là hằng số piecewise.
BIÊN TẬP:
Như @Glen_b đã chỉ ra tỷ lệ kích thước ngoài mẫu là quá lớn (~ 28%) cho kỹ thuật hồi quy được sử dụng ở trên. Tuy nhiên, tôi tin rằng có thể có một cái gì đó khác để xem xét. Nếu tôi thêm các điểm ở đầu bảng:
df <- rbind(data.frame(x=c(as.Date("2003-10-01"), as.Date("2003-12-01")), y=c(5253,5853)), df)
và tính toán lại như trên plot(data=df, y ~ x); lines(df$x, line(df$x,df$y)$fitted.values)
tôi nhận được kết quả tương tự, với tỷ lệ ~ 22%
line
. Bạn có thể có thêm thông tin chi tiết bằng cách gõ ?line
vào bảng điều khiển r
nnls
gói (bình phương tối thiểu không âm). Điều đó sẽ giúp bạn với các hạn chế tích cực, nhưng không phải với các ngoại lệ.