标签: probability-density

将数据点拟合为累积分布

我正在尝试将伽玛分布拟合到我的数据点,我可以使用下面的代码来实现.

import scipy.stats as ss
import numpy as np
dataPoints = np.arange(0,1000,0.2)
fit_alpha,fit_loc,fit_beta = ss.rv_continuous.fit(ss.gamma, dataPoints, floc=0)
Run Code Online (Sandbox Code Playgroud)

我想使用许多这样的小伽马分布来重建更大的分布(较大的分布与问题无关,只能证明我为什么要尝试拟合cdf而不是pdf).

为了实现这一点,我希望将累积分布(而不是pdf)与我的较小分布数据相匹配.- 更确切地说,我想将数据仅适用于累积分布的一部分.

例如,我只想拟合数据,直到累积概率函数(具有一定的比例和形状)达到0.6.

fit()为此目的使用的任何想法?

python numpy scipy cdf probability-density

23
推荐指数
1
解决办法
5227
查看次数

在ggplot2中创建密度直方图?

我想创建下一个直方图密度图ggplot2.以"正常"方式(基本包)非常简单:

set.seed(46)
vector <- rnorm(500)  
breaks <- quantile(vector,seq(0,1,by=0.1))
labels = 1:(length(breaks)-1)
den = density(vector)
hist(df$vector,
     breaks=breaks,
     col=rainbow(length(breaks)),
     probability=TRUE)
lines(den)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

到目前为止,我已经达到了ggplot:

seg <- cut(vector,breaks,
           labels=labels,
           include.lowest = TRUE, right = TRUE)
df = data.frame(vector=vector,seg=seg)

ggplot(df) + 
     geom_histogram(breaks=breaks,
                    aes(x=vector,
                        y=..density..,
                        fill=seg)) + 
     geom_density(aes(x=vector,
                      y=..density..))
Run Code Online (Sandbox Code Playgroud)

但是"y"尺度具有错误的尺寸.我注意到下一次运行得到了正确的"y".

 ggplot(df) + 
     geom_histogram(breaks=breaks,
                    aes(x=vector,
                    y=..density..,
                    fill=seg)) + 
     geom_density(aes(x=vector,
                      y=..density..))
Run Code Online (Sandbox Code Playgroud)

我只是不明白.y=..density..在那里,应该是高度.那么为什么我试图填充它时我的尺度会被修改?

我确实需要颜色.我只想要一个直方图,其中根据默认的ggplot填充颜色定向设置每个块的中断和颜色.

r colors histogram ggplot2 probability-density

23
推荐指数
2
解决办法
5万
查看次数

如何计算给定Python中分布的样本列表的值的概率?

不确定这是否属于统计数据,但我正在尝试使用Python来实现这一目标.我基本上只有一个整数列表:

data = [300,244,543,1011,300,125,300 ... ]
Run Code Online (Sandbox Code Playgroud)

我想知道给定数据的概率值.我使用matplotlib绘制了数据的直方图,并获得了这些:

在此输入图像描述

在此输入图像描述

在第一个图中,数字表示序列中的字符数.在第二个图中,它是一个测量的时间量,以毫秒为单位.最小值大于零,但不一定是最大值.图表是使用数百万个示例创建的,但我不确定我是否可以对分布做出任何其他假设.我想知道一个新值的可能性,因为我有几百万个值的例子.在第一张图中,我有几百万个不同长度的序列.例如,想知道200长度的概率.

我知道,对于连续分布,任何精确点的概率应该为零,但是给定一个新值流,我需要能够说出每个值的可能性.我已经查看了一些numpy/scipy概率密度函数,但是我不知道在运行类似scipy.stats.norm.pdf(data)之后可以选择哪个或如何查询新值.似乎不同的概率密度函数将以不同的方式拟合数据.鉴于直方图的形状我不知道如何决定使用哪个.

python probability matplotlib scipy probability-density

13
推荐指数
3
解决办法
1万
查看次数

将分布拟合到R中的给定频率值

我的频率值随时间(x轴单位)而变化,如下图所示.在一些归一化之后,这些值可以被视为某些分布的密度函数的数据点.

问:假设这些频率点来自威布尔分布T,我如何将最佳威布尔密度函数拟合到这些点,以便从中推断出分布T参数?

sample <- c(7787,3056,2359,1759,1819,1189,1077,1080,985,622,648,518,
            611,1037,727,489,432,371,1125,69,595,624)

plot(1:length(sample), sample, type = "l")
points(1:length(sample), sample)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新.为了防止被误解,我想补充一点解释.通过说我的频率值随时间变化(x轴单位)我的意思是我有数据说我有:

  • 7787价值实现1
  • 3056价值实现2
  • 2359实现价值3 ......等

某种方式实现我的目标(我认为不正确)将创建一组这些实现:

# Loop to simulate values 
set.values <- c()
for(i in 1:length(sample)){
  set.values <<- c(set.values, rep(i, times = sample[i]))
}

hist(set.values)
lines(1:length(sample), sample)
points(1:length(sample), sample)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

并使用fitdistrset.values:

f2 <- fitdistr(set.values, 'weibull')
f2
Run Code Online (Sandbox Code Playgroud)

为什么我认为这是不正确的方式以及为什么我在寻找更好的解决方案R

  • 在上面给出的分布拟合方法中,假设它set.values是从分布中完整的一组实现T

  • 在我原来的问题中,我知道密度曲线第一部分的点 - …

estimation r distribution probability-density weibull

10
推荐指数
1
解决办法
1856
查看次数

在Python中计算累积密度函数的导数

是否存在累积密度函数的精确导数是概率密度函数(PDF)?我正在使用计算导数numpy.diff(),这是正确的吗?见下面的代码:

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()
Run Code Online (Sandbox Code Playgroud)

CDF,PDF和衍生品的比较

如果是这样,我如何缩放衍生物以等同于PDF?

python statistics numpy scipy probability-density

9
推荐指数
1
解决办法
3515
查看次数

R:从概率密度分布生成数据

假设我有一个简单的数组,具有相应的概率分布.

library(stats)    
data <- c(0,0.08,0.15,0.28,0.90)
pdf_of_data <- density(data, from= 0, to=1, bw=0.1)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以使用相同的分布生成另一组数据.由于操作是概率性的,它不再需要与初始分布完全匹配,而只是从它生成.

我确实成功地找到了一个简单的解决方案.谢谢!

random r probability-density

9
推荐指数
2
解决办法
5158
查看次数

如何在 Python 中计算 PDF(概率密度函数)?

我在下面有以下代码,用于打印特定平均值和标准偏差的 PDF 图表。

http://imgur.com/a/oVgML

现在我需要找到特定值的实际概率。例如,如果我的均值是 0,我的值是 0,我的概率是 1。这通常是通过计算曲线下的面积来完成的。与此类似:

http://homepage.divms.uiowa.edu/~mbognar/applet/normal.html

我不知道如何解决这个问题

import numpy as np
import matplotlib    
import matplotlib.pyplot as plt

def normal(power, mean, std, val):
    a = 1/(np.sqrt(2*np.pi)*std)
    diff = np.abs(np.power(val-mean, power))
    b = np.exp(-(diff)/(2*std*std))
    return a*b

pdf_array = []
array = np.arange(-2,2,0.1)
print array
for i in array:
    print i
    pdf = normal(2, 0, 0.1, i)
    print pdf
    pdf_array.append(pdf)

plt.plot(array, pdf_array)
plt.ylabel('some numbers')
plt.axis([-2, 2, 0, 5])
plt.show()

print 
Run Code Online (Sandbox Code Playgroud)

python statistics numpy probability-density

9
推荐指数
2
解决办法
5万
查看次数

如何使用可变宽度高斯在python中执行卷积?

我需要使用高斯执行卷积,但高斯的宽度需要改变.我不是在做传统的信号处理,而是根据设备的分辨率,我需要采用完美的概率密度函数(PDF)和"涂抹"它.

例如,假设我的PDF作为尖峰/增量函数开始.我将其建模为非常窄的高斯.在通过我的设备运行后,它将根据一些高斯分辨率被涂抹掉.我可以使用scipy.signal卷积函数来计算它.

    import numpy as np
    import matplotlib.pylab as plt

    import scipy.signal as signal
    import scipy.stats as stats

    # Create the initial function. I model a spike
    # as an arbitrarily narrow Gaussian
    mu = 1.0 # Centroid
    sig=0.001 # Width
    original_pdf = stats.norm(mu,sig)

    x = np.linspace(0.0,2.0,1000) 
    y = original_pdf.pdf(x)
    plt.plot(x,y,label='original')


    # Create the ``smearing" function to convolve with the
    # original function.
    # I use a Gaussian, centered at 0.0 (no bias) and
    # width of 0.5
    mu_conv = …
Run Code Online (Sandbox Code Playgroud)

python signal-processing resolution convolution probability-density

8
推荐指数
1
解决办法
3666
查看次数

在Python中更快地卷积概率密度函数

假设需要计算一般数量的离散概率密度函数的卷积.对于下面的示例,有四个分布采用具有指定概率的值0,1,2:

import numpy as np
pdfs = np.array([[0.6,0.3,0.1],[0.5,0.4,0.1],[0.3,0.7,0.0],[1.0,0.0,0.0]])
Run Code Online (Sandbox Code Playgroud)

卷积可以这样找到:

pdf = pdfs[0]        
for i in range(1,pdfs.shape[0]):
    pdf = np.convolve(pdfs[i], pdf)
Run Code Online (Sandbox Code Playgroud)

然后给出看到0,1,...,8的概率

array([ 0.09 ,  0.327,  0.342,  0.182,  0.052,  0.007,  0.   ,  0.   ,  0.   ])
Run Code Online (Sandbox Code Playgroud)

这部分是我的代码的瓶颈,似乎必须有一些东西可用于矢量化这个操作.有没有人建议让它更快?

或者,您可以使用的解决方案

pdf1 = np.array([[0.6,0.3,0.1],[0.5,0.4,0.1]])
pdf2 = np.array([[0.3,0.7,0.0],[1.0,0.0,0.0]])
convolve(pd1,pd2) 
Run Code Online (Sandbox Code Playgroud)

得到成对的卷积

 array([[ 0.18,  0.51,  0.24,  0.07,  0.  ], 
        [ 0.5,  0.4,  0.1,  0. ,  0. ]])
Run Code Online (Sandbox Code Playgroud)

也会有很大的帮助.

python numpy vectorization convolution probability-density

8
推荐指数
1
解决办法
3401
查看次数

使用mle()估算自定义分布的参数

我有以下代码,希望估算自定义分发的参数。有关发行的更多详细信息。然后,使用估计的参数,我想查看估计的PDF是否类似于给定数据的分布(应该与给定数据的分布匹配)。

[编辑]:“ x”现在保存数据样本,而不是PDF

主要代码是:

x           = [0.0320000000000000   0.0280000000000000  0.0280000000000000  0.0270000000000000  0.0320000000000000  0.0320000000000000  0.0480000000000000  0.0890000000000000  0.0500000000000000  0.0620000000000000  0.0480000000000000  0.0300000000000000  0.0520000000000000  0.0460000000000000  0.0540000000000000  0.0520000000000000  0.0510000000000000  0.0310000000000000  0.0330000000000000  0.0330000000000000  0.0380000000000000  0.0850000000000000  0.102000000000000   0.0290000000000000  0.0530000000000000  0.0590000000000000  0.0320000000000000  0.0800000000000000  0.0410000000000000  0.0280000000000000  0.0670000000000000  0.0350000000000000  0.0420000000000000  0.0280000000000000  0.0370000000000000  0.0480000000000000  0.0330000000000000  0.101000000000000   0.0420000000000000  0.0840000000000000  0.0340000000000000  0.0900000000000000  0.0900000000000000  0.0460000000000000  0.0290000000000000  0.0330000000000000  0.0350000000000000  0.0330000000000000  0.0320000000000000  0.0420000000000000  0.0600000000000000  0.0500000000000000  0.0390000000000000  0.0480000000000000  0.0680000000000000  0.0330000000000000  0.0510000000000000  0.0430000000000000  0.0270000000000000  0.0330000000000000  0.0590000000000000  0.0380000000000000  0.0270000000000000  0.0600000000000000  0.0310000000000000  0.0520000000000000  0.0350000000000000  0.0640000000000000  0.0570000000000000  0.0520000000000000  0.0330000000000000  0.0480000000000000 …
Run Code Online (Sandbox Code Playgroud)

matlab distribution fminsearch probability-density mle

8
推荐指数
1
解决办法
380
查看次数