0

I eine Zufallsvariable wie folgt aufweist:lokal gewichtete zum Glätten binärwertigen Zufallsvariable

f (x) = 1 mit einer Wahrscheinlichkeit von g (x)

f (x) = 0 mit der Wahrscheinlichkeit 1-g (x)

wobei 0 < g (x) < 1.

sei angenommen, g (x) = x. Lassen Sie uns sagen, dass ich diese Variable beobachte, ohne die Funktion g zu kennen und erhalten 100 Proben wie folgt:

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.stats import binned_statistic 

list = np.ndarray(shape=(200,2)) 

g = np.random.rand(200) 
for i in range(len(g)): 
    list[i] = (g[i], np.random.choice([0, 1], p=[1-g[i], g[i]])) 

print(list) 
plt.plot(list[:,0], list[:,1], 'o') 

Plot of 0s and 1s

Nun würde Ich mag die Funktion g von diesen Punkten abzurufen. Das Beste, was ich denken konnte, ist zu verwenden, um ein Histogramm zu zeichnen und die mittlere Statistik verwenden:

bin_means, bin_edges, bin_number = binned_statistic(list[:,0], list[:,1], statistic='mean', bins=10) 
plt.hlines(bin_means, bin_edges[:-1], bin_edges[1:], lw=2) 

Histogram mean statistics

Stattdessen möchte ich eine kontinuierliche Schätzung der Erzeugungsfunktion haben.

Ich denke, es geht um Kernel-Dichte-Schätzung, aber ich konnte den entsprechenden Zeiger nicht finden.

+0

finden Sie kdes in 'Statsmodels'' sklearn' und 'scipy' hat auch einen. Wenn du nur eine Handlung willst, schau dir 'seaborn' an und es ist' distplot' oder 'kdeplot'. Aber warum willst du ein KDE für Binärdaten? –

+0

@MarvinTaschenberger Es ist möglich, dass meine Bemerkungen über kde irreführend sind. Es scheint, dass ich ein logistisches Regressionsproblem habe. https://en.wikipedia.org/wiki/Logistic_regression#Example:_Probability_of_passing_an_exam_versus_hours_of_study. Aber ich versuche nicht, ein Modell zu passen. Ich möchte es glatt streichen. – user1860037

+0

Das sieht auch relevant aus: http://thestatsgeek.com/2014/09/13/checking-functional-form-in-logistic-regression-using-loess/ – user1860037

Antwort

0

einfach ohne einen Schätzer explizit passend:

import seaborn as sns 
g = sns.lmplot(x= , y= , y_jitter=.02 , logistic=True) 

Stecker in x= Ihre exogene Variable und analog y = abhängige Variable. y_jitter ist Jitter der Punkt für bessere Sichtbarkeit, wenn Sie viele Datenpunkte haben. logistic = True ist der Hauptpunkt hier. Es wird Ihnen die logistische Regressionslinie der Daten geben.

Seaborn ist grundsätzlich um matplotlib zugeschnitten und funktioniert hervorragend mit pandas, falls Sie Ihre Daten zu einem DataFrame erweitern möchten.

+0

Jetzt verstehe ich, dass das, was ich suchte, lokal gewichtet ist Streuglättung. Danke, sns zu zeigen. df = pd.DataFrame() df ['x'] = Liste [:, 0] df ['y'] = Liste [:, 1] sns.lmplot (x = 'x', y = ' y ', data = df, lowess = Wahr) plt.show() – user1860037