Biểu đồ hồi quy phức trong R


10

Tôi cần vẽ một đồ họa phức tạp để phân tích dữ liệu trực quan. Tôi có 2 biến và một số lượng lớn các trường hợp (> 1000). Ví dụ: số là 100 nếu để phân tán bớt "bình thường"):

x <- rnorm(100,mean=95,sd=50)
y <- rnorm(100,mean=35,sd=20)
d <- data.frame(x=x,y=y)

1) Tôi cần vẽ đồ thị dữ liệu thô với kích thước điểm, tương ứng tần số trùng khớp tương đối, do đó plot(x,y)không phải là một tùy chọn - Tôi cần kích thước điểm. Nên làm gì để đạt được điều này?

2) Trên cùng một âm mưu, tôi cần vẽ hình elip khoảng tin cậy 95% và đường biểu thị sự thay đổi của mối tương quan (không biết cách đặt tên chính xác) - đại loại như thế này:

library(corrgram)
corrgram(d, order=TRUE, lower.panel=panel.ellipse, upper.panel=panel.pts)

tương quan

nhưng với cả hai biểu đồ tại một ô.

3) Cuối cùng, tôi cần vẽ mô hình hồi quy linar kết quả lên trên tất cả:

r<-lm(y~x, data=d)
abline(r,col=2,lwd=2)

nhưng với phạm vi lỗi ... giống như trên QQ-cốt truyện:

Cốt truyện QQ

nhưng đối với lỗi phù hợp, nếu có thể.

Vì vậy, câu hỏi là:

Làm thế nào để đạt được tất cả điều này tại một biểu đồ?

Câu trả lời:


29

Hình ảnh dưới đây trông giống như những gì bạn muốn đạt được?

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

Đây là mã R được cập nhật , theo ý kiến ​​của bạn:

do.it <- function(df, type="confidence", ...) {
  require(ellipse)
  lm0 <- lm(y ~ x, data=df)
  xc <- with(df, xyTable(x, y))
  df.new <- data.frame(x=seq(min(df$x), max(df$x), 0.1))
  pred.ulb <- predict(lm0, df.new, interval=type)
  pred.lo <- predict(loess(y ~ x, data=df), df.new)
  plot(xc$x, xc$y, cex=xc$number*2/3, xlab="x", ylab="y", ...)
  abline(lm0, col="red")
  lines(df.new$x, pred.lo, col="green", lwd=1.5)
  lines(df.new$x, pred.ulb[,"lwr"], lty=2, col="red")
  lines(df.new$x, pred.ulb[,"upr"], lty=2, col="red")    
  lines(ellipse(cor(df$x, df$y), scale=c(sd(df$x),sd(df$y)), 
        centre=c(mean(df$x),mean(df$y))), lwd=1.5, col="green")
  invisible(lm0)
}

set.seed(101)
n <- 1000
x <- rnorm(n, mean=2)
y <- 1.5 + 0.4*x + rnorm(n)
df <- data.frame(x=x, y=y)

# take a bootstrap sample
df <- df[sample(nrow(df), nrow(df), rep=TRUE),]

do.it(df, pch=19, col=rgb(0,0,.7,.5))

Và đây là phiên bản ggplotized

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

được sản xuất với đoạn mã sau:

xc <- with(df, xyTable(x, y))
df2 <- cbind.data.frame(x=xc$x, y=xc$y, n=xc$number)
df.ell <- as.data.frame(with(df, ellipse(cor(x, y), 
                                         scale=c(sd(x),sd(y)), 
                                         centre=c(mean(x),mean(y)))))
library(ggplot2)

ggplot(data=df2, aes(x=x, y=y)) + 
  geom_point(aes(size=n), alpha=.6) + 
  stat_smooth(data=df, method="loess", se=FALSE, color="green") + 
  stat_smooth(data=df, method="lm") +
  geom_path(data=df.ell, colour="green", size=1.2)

Nó có thể được tùy chỉnh thêm một chút nữa bằng cách thêm các chỉ số phù hợp với mô hình, như khoảng cách của Cook, với hiệu ứng tô màu.


1
@chl +1, đồ thị đẹp và mã ngắn.
mpiktas

@mpiktas Cảm ơn. Điều này khiến tôi nhận ra rằng tôi đã không làm việc với mẫu phù hợp, trên thực tế :-)
chl

df.new <- data.frame(x = seq(min(x), max(x), 0.1))s size is also strange (too small). Also tryed x,dflibrary(car) cr.plots(m0)

(x,y)car::dataEllipseellipse

2
@Tal Việc giải thích hình elip giống như trong corrgramgói: nó cho thấy vùng tin cậy theo cặp 95% giả sử phân phối chuẩn bivariate tập trung vào giá trị trung bình và được chia tỷ lệ theo SD (x) và SD (y). Mặc dù vậy, tôi không phải là một fan hâm mộ lớn của điều này khi được sử dụng trong một scatterplot. Nhưng hãy xem Murdoch & Chow, Một màn hình đồ họa của ma trận tương quan lớn , Am Stat (1996) 50: 178 hoặc Thân thiện, Biểu đồ: Hiển thị khám phá cho ma trận tương quan , Am Stat (2002) 56: 316.
chl

2

Đối với điểm 1, chỉ cần sử dụng cextham số trên ô để đặt kích thước điểm.

Ví dụ

x = rnorm(100)
plot(x, pch=20, cex=abs(x))

Để có nhiều biểu đồ trong một ô, hãy sử dụng par(mfrow=c(numrows, numcols))bố cục cách đều nhau hoặc layouttạo các biểu đồ phức tạp hơn.


1
+1 cho tiền boa về cex, nhưng tôi nghĩ OP muốn tất cả mọi thứ trên cùng một khu vực âm mưu, không phải trên các khu vực riêng biệt.
chl

À ... giờ thì tôi đã hiểu câu hỏi. Chà, sau đó anh ta chỉ có thể sử dụng curvehoặc pointsghi đè lên ba biểu đồ;)
nico
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.