我正在将一些R文件转换为Python,并且在使用Python中的Epanechnikov内核设置KDE图中的带宽时遇到一些问题。
我试图使用函数seaborn.kdeplot()以及statsmodels.nonparametric.kde.kdensity(),但从未得到正确的结果。
直到现在,我还没有找到如何缩放或标准化Python带宽的模式。 而且,如果使用高斯内核,则R和Python的图是相同的。那么也许Epanechnikov内核的计算方式有所不同?
我使用以下代码在Python中创建KDE图:
import seaborn as sns
sns.kdeplot(y,kernel = 'epa', bw = 0.1)
和
from statsmodels.nonparametric.kde import kdensity
density = kdensity(y, kernel='epa', bw=0.1)
plt.plot(density[1],density[0], color = 'red')
两者的输出都不太平滑:https://user-images.githubusercontent.com/48911472/55010186-1382fc80-4fe4-11e9-999f-263ea9bf62c9.png
但是,它看起来应该像R中的输出(或STATA中相同的输出)一样,更加平滑:
plot(density(y,bw=0.1, kernel ="epanechnikov"), col="red")
https://user-images.githubusercontent.com/48911472/55010088-e3d3f480-4fe3-11e9-8d84-ebd54c5b8bc9.png
答案 0 :(得分:0)
尝试在sns.kdplot上增加网格大小,默认值为100,而我认为R的密度约为512。希望对您有所帮助