2013-03-26 46 views
46

Tôi đang cố gắng thêm đường hồi quy trên ggplot. Lần đầu tiên tôi cố gắng với abline nhưng tôi đã không quản lý để làm cho nó hoạt động. Sau đó, tôi đã thử điều này ...Thêm đường hồi quy trên ggplot

data = data.frame(x.plot=rep(seq(1,5),10),y.plot=rnorm(50)) 
ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
    geom_smooth(method='lm',formula=data$y.plot~data$x.plot) 

Nhưng nó cũng không hoạt động.

Trả lời

77

Nói chung, để cung cấp công thức riêng của bạn, bạn nên sử dụng lập luận xy rằng sẽ tương ứng với giá trị mà bạn cung cấp trong ggplot() - trong trường hợp này x sẽ được hiểu là x.ploty như y.plot. Thông tin thêm về phương pháp làm mịn và công thức bạn có thể tìm thấy trong trang trợ giúp của hàm stat_smooth() vì nó là chỉ số mặc định được sử dụng bởi geom_smooth().

ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
    geom_smooth(method='lm',formula=y~x) 

Nếu bạn đang sử dụng cùng một giá trị x và y mà bạn cung cấp trong ggplot() cuộc gọi và cần phải vẽ đường hồi quy tuyến tính sau đó bạn không cần phải sử dụng công thức bên geom_smooth(), chỉ cần cung cấp các method="lm".

ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
    geom_smooth(method='lm') 
5

Như tôi chỉ figured, trong trường hợp bạn có một mô hình trang bị trên nhiều hồi quy tuyến tính, giải pháp nêu trên sẽ không làm việc.

Bạn phải tạo dòng của mình theo cách thủ công dưới dạng khung dữ liệu có chứa giá trị được dự đoán cho khung dữ liệu ban đầu của bạn (trong trường hợp của bạn là data).

Nó sẽ trông như thế này:

# read dataset 
df = mtcars 

# create multiple linear model 
lm_fit <- lm(mpg ~ cyl + hp, data=df) 
summary(lm_fit) 

# save predictions of the model in the new data frame 
# together with variable you want to plot against 
predicted_df <- data.frame(mpg_pred = predict(lm_fit, df), hp=df$hp) 

# this is the predicted line of multiple linear regression 
ggplot(data = df, aes(x = mpg, y = hp)) + 
    geom_point(color='blue') + 
    geom_line(color='red',data = predicted_df, aes(x=mpg_pred, y=hp)) 

Multiple LR

# this is predicted line comparing only chosen variables 
ggplot(data = df, aes(x = mpg, y = hp)) + 
    geom_point(color='blue') + 
    geom_smooth(method = "lm", se = FALSE) 

Single LR

1

Nếu bạn muốn để phù hợp với các loại khác của các mô hình, giống như một đường cong đáp ứng liều sử dụng mô hình logistic bạn cũng sẽ cần tạo nhiều điểm dữ liệu hơn với hàm dự đoán nếu bạn muốn có đường hồi quy mượt mà hơn:

phù hợp: phù hợp với đường cong hồi quy logistic của bạn

#Create a range of doses: 
mm <- data.frame(DOSE = seq(0, max(data$DOSE), length.out = 100)) 
#Create a new data frame for ggplot using predict and your range of new 
#doses: 
fit.ggplot=data.frame(y=predict(fit, newdata=mm),x=mm$DOSE) 

ggplot(data=data,aes(x=log10(DOSE),y=log(viability)))+geom_point()+ 
geom_line(data=fit.ggplot,aes(x=log10(x),y=log(y))) 
Các vấn đề liên quan