2013-07-30 36 views
9

È il caso che la derivata esatta di una funzione di densità cumulativa è la funzione di densità di probabilità (PDF)? Sto calcolando la derivata usando il numpy.diff(), è corretto? Vedi sotto codice qui sotto:Calcolo della derivata della funzione di densità cumulativa in Python

import scipy.stats as s 
import matplotlib.pyplot as plt 
import numpy as np 

wei = s.weibull_min(2, 0, 2) # shape, loc, scale - creates weibull object 
sample = wei.rvs(1000) 
shape, loc, scale = s.weibull_min.fit(sample, floc=0) 

x = np.linspace(np.min(sample), np.max(sample)) 

plt.hist(sample, normed=True, fc="none", ec="grey", label="frequency") 
plt.plot(x, wei.cdf(x), label="cdf") 
plt.plot(x, wei.pdf(x), label="pdf") 
plt.plot(x[1:], np.diff(wei.cdf(x)), label="derivative") 
plt.legend(loc=1) 
plt.show() 

Compariosn of CDF, PDF and derivative

Se sì, come faccio a scalare il derivato equivalente al PDF?

risposta

6

La derivata del CDF è il PDF.

Ecco un'approssimazione della derivata della CDF:

dx = x[1]-x[0] 
deriv = np.diff(wei.cdf(x))/dx 

import scipy.stats as s 
import matplotlib.pyplot as plt 
import numpy as np 

wei = s.weibull_min(2, 0, 2) # shape, loc, scale - creates weibull object 
sample = wei.rvs(1000) 
shape, loc, scale = s.weibull_min.fit(sample, floc=0) 

x = np.linspace(np.min(sample), np.max(sample)) 
dx = x[1]-x[0] 
deriv = np.diff(wei.cdf(x))/dx 
plt.hist(sample, normed=True, fc="none", ec="grey", label="frequency") 
plt.plot(x, wei.cdf(x), label="cdf") 
plt.plot(x, wei.pdf(x), label="pdf") 
plt.plot(x[1:]-dx/2, deriv, label="derivative") 
plt.legend(loc=1) 
plt.show() 

rendimenti

enter image description here

noti che il x-locations associato deriv sono stati spostati da dx/2 quindi l'approssimazione è centrata tra i valori utilizzati per calcolarlo.

Problemi correlati