Làm cách nào để thêm đường xu hướng phi tuyến tính vào biểu đồ phân tán trong R? [đóng cửa]


27

Tôi có một âm mưu phân tán. Làm cách nào để thêm đường xu hướng phi tuyến tính?


4
Bạn đã có phương trình của đường cong xu hướng hay việc thêm nó bao gồm tính toán phương trình của nó từ dữ liệu?
whuber

Câu trả lời:


34

Hãy tạo một số dữ liệu.

n <- 100
x <- seq (n)
y <- rnorm (n, 50 + 30 * x ^ (- 0,2), 1)
Dữ liệu <- data.frame (x, y)

Sau đây cho thấy làm thế nào bạn có thể phù hợp với một dòng hoàng thổ hoặc phù hợp với hồi quy phi tuyến tính.

cốt truyện (y ~ x, Dữ liệu)

# phù hợp với một dòng hoàng thổ
loess_fit <- hoàng thổ (y ~ x, Dữ liệu)
dòng (Dữ liệu $ x, dự đoán (loess_fit), col = "blue")

# phù hợp với hồi quy phi tuyến tính
nls_fit <- nls (y ~ a + b * x ^ (- c), Dữ liệu, start = list (a = 80, b = 20, 
    c = 0,2))
dòng (Dữ liệu $ x, dự đoán (nls_fit), col = "đỏ")

lô của chunk export_plot


1
về âm mưu, đối với những người gặp phải vấn đề đặt hàng, lời khuyên này rất hữu ích
tflutre

23

Nếu bạn sử dụng ggplot2(hệ thống vẽ thứ ba, trong R, sau cơ sở R và mạng), điều này trở thành:

library(ggplot2)
ggplot(Data, aes(x,y)) + geom_point() + geom_smooth()

âm mưu

Bạn có thể chọn cách làm mịn dữ liệu: xem ?stat_smoothchi tiết và ví dụ.


Đồ thị đẹp và giải thích! Nhưng những gì có nghĩa là khu vực bóng tối?
Darwin PC

3
Vùng bóng mờ là khoảng tin cậy xung quanh đường được làm mịn. Bạn có thể tự mình tìm ra điều này bằng cách truy cập tệp trợ giúp R stat_smoothbằng cách nhập ?stat_smoothnhư Vincent đã nêu. :-)
Tôi thích Mã

9

Không biết chính xác những gì bạn đang tìm kiếm, sử dụng latticegói bạn có thể dễ dàng thêm một đường cong hoàng thổ với type="smooth"; ví dụ,

> library(lattice)
> x <- rnorm(100)
> y <- rnorm(100)
> xyplot(y ~ x, type=c("smooth", "p"))

Xem help("panel.loess")các đối số có thể được chuyển cho thói quen phù hợp hoàng thổ để thay đổi, ví dụ, mức độ của đa thức sử dụng.

nhập mô tả hình ảnh ở đây

Cập nhật

Để thay đổi màu của đường cong hoàng thổ, bạn có thể viết một hàm nhỏ và chuyển nó dưới dạng paneltham số tới xyplot:

x <- rnorm(100)
y <- rnorm(100)

panel_fn <- function(x, y, ...)
{
    panel.xyplot(x, y, ...)
    panel.xyplot(x, y, type="smooth", col="red", ...)
}

xyplot(y ~ x, panel=panel_fn)

nhập mô tả hình ảnh ở đây


Làm thế nào bạn sẽ làm cho dòng một màu khác nhau?
EngrStudent - Phục hồi Monica

1
@EngrStudent Tôi đã cập nhật câu trả lời của mình.
Jason Morgan

8

Câu hỏi của bạn hơi mơ hồ, vì vậy tôi sẽ đưa ra một số giả định về vấn đề của bạn là gì. Nó sẽ giúp ích rất nhiều nếu bạn có thể đưa ra một biểu đồ phân tán và mô tả dữ liệu một chút. Xin vui lòng, nếu tôi đang đưa ra các giả định xấu thì bỏ qua câu trả lời của tôi.

Đầu tiên, có thể dữ liệu của bạn mô tả một số quy trình mà bạn tin tưởng hợp lý là phi tuyến tính. Chẳng hạn, nếu bạn đang cố gắng thực hiện hồi quy về khoảng cách để xe dừng lại với phanh đột ngột so với tốc độ của xe, thì vật lý cho chúng ta biết rằng năng lượng của xe tỷ lệ với bình phương vận tốc - không phải là vận tốc chinh no. Vì vậy, bạn có thể muốn thử hồi quy đa thức trong trường hợp này và (trong R) bạn có thể làm một cái gì đó như thế model <- lm(d ~ poly(v,2),data=dataset). Có rất nhiều tài liệu về cách đưa các phi tuyến tính khác nhau vào mô hình hồi quy.

Mặt khác, nếu bạn có một dòng "chao đảo" và bạn không biết tại sao nó lại chao đảo, thì điểm khởi đầu tốt có thể là hồi quy có trọng số cục bộ hoặc loesstrong R. Điều này thực hiện hồi quy tuyến tính trên một mức nhỏ khu vực, trái ngược với toàn bộ dữ liệu. Dễ dàng nhất để tưởng tượng một phiên bản "k lân cận gần nhất", trong đó để tính giá trị của đường cong tại bất kỳ điểm nào, bạn tìm thấy các điểm k gần điểm quan tâm nhất và tính trung bình của chúng. Loess chỉ như vậy nhưng sử dụng hồi quy thay vì trung bình thẳng. Đối với điều này, sử dụng model <- loess(y ~ x, data=dataset, span=...), trong đó các spanbiến kiểm soát mức độ làm mịn.

Trên bàn tay thứ ba (hết tay) - bạn đang nói về xu hướng? Đây có phải là một vấn đề thời gian? Nếu có, hãy thận trọng một chút với việc diễn giải các đường xu hướng và ý nghĩa thống kê. Xu hướng trong chuỗi thời gian có thể xuất hiện trong các quy trình "tự phát" và đối với các quy trình này, tính ngẫu nhiên của quy trình đôi khi có thể tạo ra các xu hướng do nhiễu ngẫu nhiên và kiểm tra ý nghĩa thống kê sai có thể cho bạn biết điều đó có ý nghĩa khi không!


6

Đặt các điểm mẫu biểu đồ phân tán và đường cong trơn tru trên cùng một biểu đồ:

  library(graphics)
  ## Create some x,y sample points falling on hyperbola, but with error:
  xSample = seq(0.1, 1.0, 0.1)
  ySample = 1.0 / xSample
  numPts <- length(xSample)
  ySample <- ySample + 0.5 * rnorm(numPts) ## Add some noise

  ## Create x,y points for smooth hyperbola:
  xCurve <- seq(0.1, 1.0, 0.001)
  yCurve <- 1.0 / xCurve

  plot(xSample, ySample, ylim = c(0.0, 12.0))   ## Plot the sample points
  lines(xCurve, yCurve, col = 'green', lty = 1) ## Plot the curve

Sơ đồ phân tán với đường cong mượt mà

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.