Mam rozkład punktów, dla których uzyskuję KDE
do . To jest mój kod i jak wygląda wyjściowe (dane x,y
można otrzymać od here):Zintegruj oszacowanie gęstości jądra 2D
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 o współrzędnych (x1, y1)
ma (jak w każdym punkcie na wykresie 2D) skojarzony wartość podana przez f
(jądro lub KDE
) między 0 a 0,42. Powiedzmy, że f(x1, y1) = 0.08
.
muszę zintegrować f
z limitami integracyjnych w x
i y
podanym przez tych regionach, gdzie f
ocenia się mniej niż f(x1, y1)
, tj: f(x, y)<0.08
.
Na co widziałem python
może przeprowadzić integrację funkcji i jednego tablic wymiarowych poprzez integrację numerycznej, ale nie mam nic, że pozwolił mi wykonać całkowanie numeryczne na tablicy 2D (jądro f
) widziany Co więcej, nie jestem pewien, w jaki sposób rozpoznałbym regiony podane przez ten konkretny warunek (tj .: f(x, y)
mniej niż podana wartość)
Czy można to w ogóle zrobić?
Zadziwiająco proste, ja jasno trzeba czytać trochę więcej statystyk. Dziękuję Ci bardzo! – Gabriel
Uwaga, ta implementacja Monte Carlo jest prawdopodobnie niepoprawna. Zobacz tutaj: http://stackoverflow.com/a/35903712/1391441 – Gabriel
@Gabriel Myślę, że to rozwiązanie jest poprawne dla tego pytania. Spojrzałem na inne pytanie, z którym się łączyłeś. Oto moje myśli. Tutaj mieszają się dwa różne poziomy integracji. W tym pytaniu dość wyraźnie stwierdzacie, że chcecie zintegrować się nad zbiorem x, y gdzie f (x, y)
jcrudy