2015-09-10 2 views
0

У меня возникли проблемы делать что-то, как относительно просто, как:Место и Plotting Логнормальное

  1. Розыгрыш N выборок из гауссовой с некоторым средним значением и дисперсией
  2. Примите журналы этих N образцов
  3. приспособит логарифмические (с использованием stats.lognorm.fit)
  4. выплюнуть приятное и гладкое логнормальное PDF без инфа значений (используя stats.lognorm.pdf)

Вот небольшой рабочий пример вывода я получаю:

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

%matplotlib inline 


def lognormDrive(mu,variance): 
    size = 1000 
    sigma = math.sqrt(variance) 
    np.random.seed(1) 
    gaussianData = stats.norm.rvs(loc=mu, scale=sigma, size=size) 
    logData = np.exp(gaussianData) 
    shape, loc, scale = stats.lognorm.fit(logData, floc=mu) 
    return stats.lognorm.pdf(logData, shape, loc, scale) 

plt.plot(lognormDrive(37,0.8)) 

enter image description here

И, как вы могли заметить, сюжет не имеет абсолютно никакого смысла.

Любые идеи?

Я следовал этим постам: POST1POST2

Заранее спасибо!

Разработка: (. Emperical расст) Я строю небольшой скрипт, который будет

  1. Возьмите исходные данные и соответствовать распределению ядра
  2. Предположим, различные распределения, данные среднего значения и дисперсии данных. Это было бы гауссовым и логнормальные
  3. Plot этих распределениями вместе с emperical расстояния с помощью взаимодействия
  4. Вычислить расхождение Kullbeck-Лейблер между различными распределениями, когда один поворачивает ручку для среднего и дисперсий (и перекос в конечном счете)

ответ

1

По телефону lognorm.fit() используйте floc=0, а не floc=mu.

(The расположение параметр lognorm распределения просто переводит распределение. Вы почти никогда не хотите, чтобы сделать это с логарифмически нормальным распределением.)

См A lognormal distribution in python

Кстати, вы построение PDF-файла из несортированных значений образца, поэтому график в скорректированном сценарии не будет сильно отличаться. Возможно, вам будет полезно использовать PDF для сопоставления значений. Вот модификация скрипта, который создает сюжет PDF с помощью отсортированные образцы:

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


def lognormDrive(mu,variance): 
    size = 1000 
    sigma = math.sqrt(variance) 
    np.random.seed(1) 
    gaussianData = stats.norm.rvs(loc=mu, scale=sigma, size=size) 
    logData = np.exp(gaussianData) 
    shape, loc, scale = stats.lognorm.fit(logData, floc=0) 
    print "Estimated mu:", np.log(scale) 
    print "Estimated var: ", shape**2 
    logData.sort() 
    return logData, stats.lognorm.pdf(logData, shape, loc, scale) 

x, y = lognormDrive(37, 0.8) 
plt.plot(x, y) 
plt.grid() 
plt.show() 

Сценарий печатает:

Estimated mu: 37.0347152587 
Estimated var: 0.769897988163 

и создает следующий сюжет:

plot