Zintegruj oszacowanie gęstości jądra 2D
mamx,y
dystrybucja punktów, za które otrzymujęKDE
przezscipy.stats.gaussian_kde. To jest mój kod i jak wygląda wyjście (x,y
dane można uzyskać ztutaj):
import numpy as np
from scipy import stats
# Obtain data from file.
data = np.loadtxt('data.dat', unpack=True)
m1, m2 = data[0], data[1]
xmin, xmax = min(m1), max(m1)
ymin, ymax = min(m2), max(m2)
# Perform a kernel density estimate (KDE) on the data
x, y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([x.ravel(), y.ravel()])
values = np.vstack([m1, m2])
kernel = stats.gaussian_kde(values)
f = np.reshape(kernel(positions).T, x.shape)
# Define the number that will determine the integration limits
x1, y1 = 2.5, 1.5
# Perform integration?
# Plot the results:
import matplotlib.pyplot as plt
# Set limits
plt.xlim(xmin,xmax)
plt.ylim(ymin,ymax)
# KDE density plot
plt.imshow(np.rot90(f), cmap=plt.cm.gist_earth_r, extent=[xmin, xmax, ymin, ymax])
# Draw contour lines
cset = plt.contour(x,y,f)
plt.clabel(cset, inline=1, fontsize=10)
plt.colorbar()
# Plot point
plt.scatter(x1, y1, c='r', s=35)
plt.show()
Czerwony punkt ze współrzędnymi(x1, y1)
ma (jak każdy punkt na wykresie 2D) powiązaną wartość podaną przezf
(jądro lubKDE
) od 0 do 0,42. Powiedzmy tof(x1, y1) = 0.08
.
Muszę się zintegrowaćf
z limitami integracji wx
iy
podane przez te regiony, w którychf
ocenia namniej niżf(x1, y1)
, tj .:f(x, y)<0.08
.
Za to, co widziałempython
może przeprowadzić integracjęFunkcje i jednowymiarowe macierze poprzez integrację numeryczną, ale nie widziałem niczego, co pozwoliłoby mi na przeprowadzenie liczbowej integracji na tablicy 2D (f
jądro) Ponadto nie jestem pewien, jak rozpoznałbym regiony podane przez ten konkretny warunek (tj .:f(x, y)
mniej niż podana wartość)
Czy można to w ogóle zrobić?