Là lưu ý nhận xét, đây là một hệ quả (tôi không chắc chắn tôi muốn gọi nó là "tạo tác") của các giả định cơ bản là KDE gaussian. Như đã được đề cập, điều này là không thể tránh khỏi và nếu dữ liệu của bạn không đáp ứng các giả định đó, bạn có thể nên sử dụng một hộp thoại chỉ hiển thị các điểm tồn tại trong dữ liệu thực tế.
Tuy nhiên, trong câu trả lời của bạn, bạn hỏi xem liệu nó có phù hợp với "chặt chẽ hơn" không, điều này có thể có nghĩa là một vài điều.
Một câu trả lời có thể là thay đổi băng thông của hạt nhân làm mịn. Bạn làm điều đó với đối số bw
, đó thực sự là một yếu tố tỷ lệ; băng thông sẽ được sử dụng là bw * data.std()
:
data = np.random.rand(100)
sns.violinplot(y=data, bw=.1)
câu trả lời khác có thể là để cắt violin ở những thái cực của datapoints. KDE sẽ vẫn là phù hợp với với mật độ mở rộng vượt quá giới hạn dữ liệu của bạn, nhưng đuôi sẽ không được hiển thị. Bạn làm điều đó với tham số cut
, trong đó xác định có bao nhiêu đơn vị băng thông qua các giá trị cực đoan mật độ sẽ được rút ra. Để cắt xén, đặt nó là 0:
sns.violinplot(y=data, cut=0)
Bằng cách này, các API cho violinplot
là going to change trong 0,6, và tôi đang sử dụng phiên bản phát triển ở đây, nhưng cả bw
và cut
luận tồn tại trong phiên bản phát hành hiện tại và hành xử nhiều hơn hoặc ít hơn theo cùng một cách.
Vâng, điều đó có thể không dễ dàng. Đây là một vật phẩm của KDE, mà không biết rằng có một ranh giới cứng tại 0. Nếu bạn quan tâm đến vấn đề này, xem thêm: http://stats.stackexchange.com/questions/65866/good-methods-for -density-of-phi-negative-variables-in-r? lq = 1 – cel
@cel Cảm ơn bạn. đó là điều tôi đang nghĩ. Nhưng nó không thể được trang bị chặt chẽ hơn? – n1000
Có các thuật toán cho điều đó. Xem kết quả ấn tượng trong câu trả lời này: http://stats.stackexchange.com/a/71291. Tuy nhiên tôi chưa thấy nó trong python. – cel