2015-05-17 18 views
5

Tôi muốn phủ một đường cong mật độ vào biểu đồ tần số mà tôi đã xây dựng. Đối với biểu đồ tần số tôi đã sử dụng aes(y=..counts../40) vì 40 là tổng số mẫu của tôi. Tôi đã sử dụng aes(y=..density..*0.1) để buộc mật độ ở đâu đó trong khoảng từ 0 đến 1 kể từ khi băng thông của tôi là 0,1. Tuy nhiên, đường cong mật độ không phù hợp với dữ liệu của tôi và nó loại trừ các giá trị bằng 1,0 (lưu ý rằng biểu đồ hiển thị giá trị tích lũy cho bin = (1.0.1.1) nhưng đường cong mật độ kết thúc ở 1.0)Lô mật độ lớp phủ không bao gồm giá trị biểu đồ

dữ liệu của tôi

data<-structure(list(variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("E1", "test" 
), class = "factor"), value = c(0.288888888888889, 0.08179, 
0.219026548672566, 0.584795321637427, 0.927554980595084, 0.44661095636026, 
1, 0.653780942692438, 1, 0.806451612903226, 1, 0.276794335371741, 
1, 0.930109557990178, 0.776864728192162, 0.824909747292419, 1, 
1, 1, 1, 1, 0.0875912408759124, 0.308065494238933, 1, 0.0258064516129032, 
0.0167322834645669, 1, 1, 0.355605889014723, 0.310344827586207, 
0.106598984771574, 0.364447494852436, 0.174724342663274, 0.77491961414791, 
1, 0.856026785714286, 0.680759275237274, 0.850657108721625, 1, 
1, 0, 0.851851851851852, 1, 0, 0.294954721862872, 0.819870009285051, 
0, 0.734147168531706, 0.0135424091233072, 0.0189098998887653, 
0.0101010101010101, 0, 0.296905222437137, 0.706837929731772, 
0.269279393173198, 0.135379061371841, 0.158969804618117, 0.0902981940361193, 
0.00423131170662906, 0, 0.374880611270296, 0.0425790754257908, 
0.145542753183748, 0, 0.129032258064516, 0.260334645669291, 0, 
0, 1, 0.175505350772889, 0.08248730964467, 0, 0.317217981340119, 
0.614147909967846, 0, 0.264508928571429, 0.883520276100086, 0.0657108721624851, 
0, 0.560229445506692)), row.names = c(NA, -80L), .Names = c("variable", 
"value"), class = "data.frame") 

q<-ggplot(data, aes(value, fill = variable)) 
     q + geom_density(alpha = 0.6,aes(y=..density..*0.1),binwidth=0.1) 
    + theme_minimal()+scale_fill_manual(values =c("#D7191C","#2B83BA")) 
    + theme(legend.position="bottom")+ guides(fill=guide_legend(nrow=1)) 
    + labs(title="Density Plot GrupoB",x="Respuesta",y="Density") 
    +scale_x_continuous(breaks=seq(from=0,to=1.2,by=0.1)) 
    +geom_histogram(alpha = 0.6,aes(y=..count../40),binwidth=0.1,position="dodge") 

Kết quả tôi nhận được là này enter image description here

Trả lời

6

cốt truyện của bạn đang làm exa ctly những gì được mong đợi từ dữ liệu của bạn:

  • Bạn có giá trị số, có chứa giá trị số từ 0 đến 1, vì vậy bạn nên mong đợi đường cong mật độ chạy từ 0 đến 1.
  • Bạn vẽ đồ thị với biểu đồ 0.1. Thùng được đóng ở phía dưới và mở ở đầu phía trên. Vì vậy, các bạn nhận được binning trong trường hợp của bạn là [0,0.1), [0,1, 0,2), ..., [0.9,1.0), [1.0,1,1). Bạn có 17 giá trị trong dữ liệu của bạn là 1 và do đó đi vào thùng cuối cùng, được vẽ từ 1 đến 1,1.

Tôi nghĩ rằng đó là một ý tưởng tồi để vẽ biểu đồ theo cách bạn làm. Lý do là đối với một biểu đồ, trục x là liên tục, có nghĩa là thanh bao phủ phạm vi trục x, ví dụ, 0,1 đến 0,2 là số đếm giá trị giữa (và bao gồm) 0,1 và 0,2 (không bao gồm sau này). Sử dụng dodge trong tình huống này dẫn đến một hình ảnh méo mó, vì các thanh bây giờ không còn bao phủ phạm vi trục x đúng. Hai thanh chia sẻ phạm vi cần được bao phủ đầy đủ bởi cả hai. Sự biến dạng này là một trong những lý do tại sao đường cong mật độ dường như không khớp với biểu đồ.

Vì vậy, bạn có thể làm gì với ứng dụng này? Tôi có thể cung cấp cho bạn một vài gợi ý, nhưng có lẽ những người khác có những ý tưởng tốt hơn ...

  • Thay vì vẽ biểu đồ bên cạnh nhau với position="dodge", bạn có thể sử dụng faceting, có nghĩa là, vẽ đồ thị biểu đồ (và tương ứng đường cong mật độ) vào các ô riêng biệt. Điều này có thể đạt được bằng cách thêm + facet_grid(variable~.) vào cốt truyện của bạn.

  • Bạn có thể ăn gian một chút để có bin cuối cùng, đó là [0.9,1), bao gồm 1 (ví dụ: có nó là [0.9,1.0]). Chỉ cần thay thế 1 trong dữ liệu của bạn bằng 0999 như sau: data$value[data$value==1]<-0.999. Điều quan trọng là bạn làm điều này chỉ cho cốt truyện, nơi nó thực sự chỉ có nghĩa là bạn hơi xác định lại các binning. Đối với tất cả các đánh giá số mà bạn đã thụt lề để làm, bạn không nên thực hiện thay thế này! (Ví dụ: thay đổi giá trị trung bình của data$value.)

  • Về chuẩn hóa đường cong mật độ và biểu đồ: không cần đường cong mật độ nằm giữa 0 và 1. Hạn chế là tích phân trên đường cong mật độ nên là 1. Vì vậy, để làm cho đường cong mật độ và biểu đồ so sánh được, cũng là biểu đồ nên có tích phân 1, mà đạt được, bằng cách chia giá trị y bởi các bindwidth.Vì vậy, bạn nên sử dụng geom_density(alpha = 0.6,aes(y=..density..)) (Tôi cũng đã xóa bindwith=0.1 vì nó không có hiệu lực đối với geom_density) và geom_histogram(alpha = 0.6,aes(y=..count../40/.1),binwidth=0.1) (không cần position="dodge", khi bạn sử dụng faceting). Dĩ nhiên, điều này dẫn đến chính xác sự bình thường tương đối mà bạn có, nhưng nó có ý nghĩa hơn bởi vì các tích phân trên đường cong mật độ và biểu đồ là 1, như chúng cần.

  • Đường cong mật độ vẫn không khớp hoàn toàn với biểu đồ và điều này phải phù hợp với cách tính toán mật độ. Tôi không biết điều này một cách chi tiết và do đó không may không giải thích thêm. Nhưng bạn có thể hiểu rõ hơn cách hoạt động bằng cách tham số adjust đến geom_density. Nó sẽ làm cho đường cong ít mịn hơn cho các số nhỏ hơn và đường cong sẽ giống với biểu đồ chặt chẽ hơn.

Để đưa tất cả mọi thứ cùng nhau, tôi đã xây dựng tất cả các lời đề nghị của tôi vào mã của bạn, sử dụng adjust=0.2 trong geom_density và âm mưu kết quả:

data$value[data$value==1]<-0.999 
q<-ggplot(data, aes(value, fill = variable)) 
q + geom_density(alpha = 0.6,aes(y=..density..),adjust=0.2) + 
    theme_minimal()+scale_fill_manual(values =c("#D7191C","#2B83BA")) + 
    theme(legend.position="bottom")+ guides(fill=guide_legend(nrow=1)) + 
    labs(title="Density Plot GrupoB",x="Respuesta",y="Density")+ 
    scale_x_continuous(breaks=seq(from=0,to=1.2,by=0.1))+ 
    geom_histogram(alpha = 0.6,aes(y=..count../40/.1),binwidth=0.1) + 
    facet_grid(variable~.) 

enter image description here

Thật không may, tôi không thể cung cấp cho bạn một câu trả lời hoàn chỉnh hơn, nhưng tôi hy vọng những ý tưởng này cho bạn một khởi đầu tốt.

+0

Tôi biết tôi không nên sử dụng điều này để cảm ơn nhưng bạn không cung cấp bất kỳ phương tiện giao tiếp nào trong tiểu sử của mình. Câu trả lời của bạn là hoàn hảo. Tôi đã buồn khi sử dụng position = "dodge" nhưng với phiên bản xếp chồng lên nhau, tôi thậm chí không thể nhìn thấy dữ liệu. Cách tiếp cận khía cạnh là đẹp ngay cả khi trình bày hội thảo. –

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