2013-06-19 30 views
8

Dưới đây là một số dữ liệu và một âm mưu:geom_smooth trên một tập hợp con của dữ liệu

set.seed(18) 
data = data.frame(y=c(rep(0:1,3),rnorm(18,mean=0.5,sd=0.1)),colour=rep(1:2,12),x=rep(1:4,each=6)) 

ggplot(data,aes(x=x,y=y,colour=factor(colour)))+geom_point()+ geom_smooth(method='lm',formula=y~x,se=F) 

enter image description here

Như bạn thấy hồi quy tuyến tính bị ảnh hưởng cao bởi các giá trị trong đó x = 1. Tôi có thể lấy các phép hồi quy tuyến tính được tính cho x> = 2 nhưng hiển thị các giá trị cho x = 1 (y bằng 0 hoặc 1). Biểu đồ kết quả sẽ giống hệt nhau ngoại trừ các phép hồi quy tuyến tính. Họ sẽ không "chịu" từ ảnh hưởng của các giá trị trên abscisse = 1

Trả lời

10

Nó đơn giản như geom_smooth(data=subset(data, x >= 2), ...). Nó không quan trọng nếu cốt truyện này chỉ là cho chính mình, nhưng nhận ra rằng một cái gì đó như thế này sẽ gây hiểu lầm cho người khác nếu bạn không bao gồm một đề cập đến cách hồi quy đã được thực hiện. Tôi khuyên bạn nên thay đổi tính minh bạch của các điểm bị loại trừ.

ggplot(data,aes(x=x,y=y,colour=factor(colour)))+ 
geom_point(data=subset(data, x >= 2)) + geom_point(data=subset(data, x < 2), alpha=.2) + 
geom_smooth(data=subset(data, x >= 2), method='lm',formula=y~x,se=F) 

enter image description here

+1

Aahh Tôi thích các giải pháp đơn giản! Cảm ơn rất nhiều. Và cảm ơn cũng cho lời khuyên và minh bạch lừa. –

+0

Tôi nên làm gì nếu giải pháp này tạo ra lỗi này "Tính thẩm mỹ phải là độ dài 1 hoặc giống như dữ liệu" trên tập dữ liệu của tôi? –

7

Các thường xuyên lm chức năng có một cuộc tranh luận weights mà bạn có thể sử dụng để gán trọng lượng cho một quan sát cụ thể. Bằng cách này bạn có thể đồng bằng với sự ảnh hưởng mà quan sát có trên kết quả. Tôi nghĩ rằng đây là một cách chung để giải quyết vấn đề thay vì làm mất dữ liệu. Tất nhiên, việc gán trọng số cho quảng cáo không thể hiện tốt cho tính phân tích thống kê của phân tích. Nó luôn luôn là tốt nhất để có một lý do đằng sau trọng lượng, ví dụ: quan sát trọng lượng thấp có độ không chắc chắn cao hơn.

Tôi nghĩ rằng dưới mui xe ggplot2 sử dụng chức năng lm để bạn có thể vượt qua đối số weights. Bạn có thể thêm trọng lượng thông qua việc thẩm mỹ (aes), giả định rằng trọng lượng được lưu trữ trong một vector:

ggplot(data,aes(x=x,y=y,colour=factor(colour))) + 
    geom_point()+ stat_smooth(aes(weight = runif(nrow(data))), method='lm') 

bạn cũng có thể đặt trọng lượng trong một cột trong tập dữ liệu:

ggplot(data,aes(x=x,y=y,colour=factor(colour))) + 
    geom_point()+ stat_smooth(aes(weight = weight), method='lm') 

nơi cột được gọi là weight.

Các vấn đề liên quan