标签: kernel-density

具有多个组的密度图

我想产生类似的东西densityplot()lattice package,采用ggplot2使用多个归集与后mice封装.这是一个可重复的例子:

require(mice)
dt <- nhanes
impute <- mice(dt, seed = 23109)
x11()
densityplot(impute)
Run Code Online (Sandbox Code Playgroud)

哪个产生:

我想在ggplot中改进的densityplot输出

我想对输出有更多的控制(我也将它用作ggplot的学习练习).所以,对于bmi变量,我试过这个:

bar <- NULL
for (i in 1:impute$m) {
    foo <- complete(impute,i)
    foo$imp <- rep(i,nrow(foo))
    foo$col <- rep("#000000",nrow(foo))
    bar <- rbind(bar,foo)
}

imp <-rep(0,nrow(impute$data))
col <- rep("#D55E00", nrow(impute$data))
bar <- rbind(bar,cbind(impute$data,imp,col))
bar$imp <- as.factor(bar$imp)

x11()
ggplot(bar, aes(x=bmi, group=imp, colour=col)) + geom_density()
+ scale_fill_manual(labels=c("Observed", "Imputed"))
Run Code Online (Sandbox Code Playgroud)

产生这个: 在此输入图像描述

所以它有几个问题:

  1. 颜色是错误的.似乎我试图控制颜色是完全错误/被忽略的
  2. 有不需要的水平和垂直线
  3. 我希望图例显示Imputed和Observed但我的代码会给出错误 invalid argument to unary operator

而且,用一行完成的工作似乎做了很多工作 …

r ggplot2 kernel-density

4
推荐指数
2
解决办法
4645
查看次数

在 R 中实现不同的 2D 核密度估计核

我正在寻求一些帮助来理解如何实现二维核密度方法,具有各向同性方差和二元正态核,但不是使用典型距离,因为数据位于物体的表面上地球,我需要使用大圆距离。

我想在 R 中复制这一点,但我无法弄清楚如何对任何内置估计器使用除简单欧几里德距离之外的距离度量,因为它使用带有卷积的复杂方法来添加内核。有谁有办法编写任意内核吗?

statistics r kernel-density

4
推荐指数
1
解决办法
1627
查看次数

Scikit-Learn KDE中的PDF估算

我正在尝试使用scikit-learn模块计算从KDE计算的PDF估计值.我已经看到了两种评分变体,我正在尝试两种:下面的陈述A和B.

声明A导致以下错误:

AttributeError:'KernelDensity'对象没有属性'tree_'

语句B导致以下错误:

ValueError:查询数据维度必须与训练数据维度匹配

看起来像一个愚蠢的错误,但我无法弄清楚.请帮忙.代码如下......

from sklearn.neighbors import KernelDensity
import numpy

# d is my 1-D array data
xgrid = numpy.linspace(d.min(), d.max(), 1000)

density = KernelDensity(kernel='gaussian', bandwidth=0.08804).fit(d)

# statement A
density_score = KernelDensity(kernel='gaussian', bandwidth=0.08804).score_samples(xgrid)

# statement B
density_score = density.score_samples(xgrid)

density_score = numpy.exp(density_score)
Run Code Online (Sandbox Code Playgroud)

如果它有帮助,我使用0.15.2版本的scikit-learn.我已经用scipy.stats.gaussian_kde成功地尝试了这个,所以数据没有问题.

python kernel-density scikit-learn

4
推荐指数
1
解决办法
2718
查看次数

ggplot2循环数据的密度

我有一个数据集,x代表一年中的某一天(比如生日),我想创建一个密度图.此外,由于我有一些分组信息(比如男孩或女孩),我想使用ggplot2制作密度图的功能.

起初很容易:

require(ggplot2); require(dplyr)
bdays <- data.frame(gender = sample(c('M', 'F'), 100, replace = T), bday = sample(1:365, 100, replace = T))
bdays %>% ggplot(aes(x = bday)) + geom_density(aes(color = factor(gender)))
Run Code Online (Sandbox Code Playgroud)

然而,由于边缘效应,这给出了很差的估计.我想应用这样一个事实:我可以使用圆形坐标,使得365 + 1 = 1 - 12月31日之后的一天是1月1日.我知道该circular软件包提供了此功能,但我没有使用stat_function()调用实现它的任何成功.它对我来说特别有用,ggplot2因为我希望能够使用方面,aes调用等.

此外,为了澄清,我想看起来像geom_density- 我不是在寻找像下图所示的极坐标图:使用ggplot2的圆形密度图.

statistics r ggplot2 kernel-density

4
推荐指数
1
解决办法
603
查看次数

Python绘制概率分布的百分位轮廓线

给定具有未知函数形式的概率分布(下面的例子),我喜欢绘制"基于百分位数"的等高线,即那些对应于具有10%,20%,......,90%等积分的区域.

## example of an "arbitrary" probability distribution ##
from matplotlib.mlab import bivariate_normal
import matplotlib.pyplot as plt
import numpy as np

X, Y = np.mgrid[-3:3:100j, -3:3:100j]
z1 = bivariate_normal(X, Y, .5, .5, 0., 0.)
z2 = bivariate_normal(X, Y, .4, .4, .5, .5)
z3 = bivariate_normal(X, Y, .6, .2, -1.5, 0.)
z = z1+z2+z3
plt.imshow(np.reshape(z.T, (100,-1)), origin='lower', extent=[-3,3,-3,3])
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 我研究了多种方法,从使用matplotlib中的默认轮廓函数,在scipy中涉及stats.gaussian_kde的方法,甚至可能从分布中生成随机点样本并随后估计内核.他们似乎都没有提供解决方案.

python probability matplotlib contour kernel-density

4
推荐指数
1
解决办法
3538
查看次数

模拟已弃用的seaborn distplots

Seaborndistplot现已弃用,并将在未来版本中删除。建议使用histplot(或displot作为图形级图)作为替代方案。distplot但和之间的预设有所不同histplot

from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns

x_list = [1, 2, 3, 4, 6, 7, 9, 9, 9, 10]
df = pd.DataFrame({"X": x_list, "Y": range(len(x_list))})

f, (ax_dist, ax_hist) = plt.subplots(2, sharex=True)

sns.distplot(df["X"], ax=ax_dist)
ax_dist.set_title("old distplot")
sns.histplot(data=df, x="X", ax=ax_hist)
ax_hist.set_title("new histplot")

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

那么,我们如何配置histplot来复制已弃用的输出distplot

python matplotlib histogram kernel-density seaborn

4
推荐指数
1
解决办法
3261
查看次数

ggplot2-修改geom_density2d以接受权重作为参数?

这是我对R社区的第一篇文章,所以请原谅我。我想在ggplot2中使用函数geom_density2d和stat_density2d绘制内核密度估计值,但问题是它们无法处理加权数据。据我了解,这两个函数从软件包MASS中调用函数kde2d进行内核密度估计。而且kde2d不会将数据权重作为参数。

现在,我在http://www.inside-r.org/node/226757上找到了kde2d的此更改版本,该版本将权重作为参数并基于kde2d的源代码。该函数的代码:

  kde2d.weighted <- function (x, y, w, h, n = 25, lims = c(range(x), range(y))) {
  nx <- length(x)
  if (length(y) != nx) 
    stop("data vectors must be the same length")
  if (length(w) != nx & length(w) != 1)
    stop("weight vectors must be 1 or length of data")
  gx <- seq(lims[1], lims[2], length = n) # gridpoints x
  gy <- seq(lims[3], lims[4], length = n) # gridpoints y
  if (missing(h)) 
    h <- c(bandwidth.nrd(x), bandwidth.nrd(y));
  if (missing(w)) 
    w <- …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 kernel-density

3
推荐指数
1
解决办法
2085
查看次数

如何在 scikit-learn (python) 的 KernelDensity 中使用用户定义的度量

我正在使用 scikit-learn (0.14) 并尝试为我的 KernelDensity 估计实现用户定义的度量。

以下代码是我的代码结构示例:

def myDistance(x,y):
    return np.sqrt(sum((x - y)**2))

dt=DistanceMetric.get_metric("pyfunc",func=myDistance)

kernelModel=KernelDensity(algorithm='ball_tree',metric='pyfunc')
kernelModel.fit(X)
Run Code Online (Sandbox Code Playgroud)

根据文档,BallTree 算法应该接受用户定义的指标。如果我按照此处给出的方式运行此代码,则会出现以下错误:

TypeError: __init__() takes exactly 1 positional argument (0 given) 
Run Code Online (Sandbox Code Playgroud)

错误似乎来自:

sklearn.neighbors.dist_metrics.PyFuncDistance.__init__
Run Code Online (Sandbox Code Playgroud)

我不明白这个。如果我检查上面代码中的“dt”给我什么,我就会得到我所期望的。dt.pairwise(X) 返回正确的值。我究竟做错了什么?

提前致谢。

python metric kernel-density scikit-learn

3
推荐指数
1
解决办法
626
查看次数

计算核双变量密度估计图下的体积

我需要计算一个称为互信息的度量。首先,我需要计算另一个度量,称为熵,例如 x 和 y 的联合熵:

-?p(x,y)·log p(x,y)dxdy
Run Code Online (Sandbox Code Playgroud)

因此,为了计算p(x,y),我使用了核密度估计器(以这种方式,函数kde2d,它返回Z值(在该窗口中具有 x 和 y 的概率)。

同样,到目前为止,我有一个Zvalues矩阵[1x100] x [1x100],它等于我的p(x,y). 但是我必须通过发现表面下的体积(双积分)来对它进行积分。但我没有找到办法做到这一点。quad2d用于计算双正交的函数不起作用,因为我只积分了一个数值矩阵p(x,y),它给了我一个常数....

任何人都知道找到那个体积/计算二重积分的东西?

该图的图像来自persp3d

密度估计

谢谢大家 !!!!

estimation r entropy kernel-density

3
推荐指数
1
解决办法
1147
查看次数

在 R 中给定边界内使用 sf 的点的平滑密度图

我正在尝试为 R 中的多个点创建平滑地图,但我在这里没有找到完美的解决方案。

library(mapchina)
library(sf)
library(dplyr)
library(ggplot2)

# Create some sample data
sf_beijing = china %>% 
  filter(Code_Province == '11') %>% 
  st_transform(4326)

sf_points = data.frame(
  lat = c(39.523, 39.623, 40.032, 40.002, 39.933, 39.943, 40.126, 40.548),
  lon = c(116.322, 116, 116.422, 116.402, 116.412, 116.408, 116.592, 116.565)
) %>% 
  st_as_sf(coords = c("lon", "lat"), crs = 4326)

# Plot the boundary for Beijing and the points
ggplot() +
  geom_sf(data = sf_beijing, fill = NA) + 
  geom_sf(data = sf_points, color = 'red') + 
  theme_test()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

此外,我发现 …

r smoothing ggplot2 kernel-density r-sf

3
推荐指数
1
解决办法
2503
查看次数