我正在尝试将伽玛分布拟合到我的数据点,我可以使用下面的代码来实现.
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()为此目的使用的任何想法?
我想创建下一个直方图密度图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填充颜色定向设置每个块的中断和颜色.
不确定这是否属于统计数据,但我正在尝试使用Python来实现这一目标.我基本上只有一个整数列表:
data = [300,244,543,1011,300,125,300 ... ]
Run Code Online (Sandbox Code Playgroud)
我想知道给定数据的概率值.我使用matplotlib绘制了数据的直方图,并获得了这些:
在第一个图中,数字表示序列中的字符数.在第二个图中,它是一个测量的时间量,以毫秒为单位.最小值大于零,但不一定是最大值.图表是使用数百万个示例创建的,但我不确定我是否可以对分布做出任何其他假设.我想知道一个新值的可能性,因为我有几百万个值的例子.在第一张图中,我有几百万个不同长度的序列.例如,想知道200长度的概率.
我知道,对于连续分布,任何精确点的概率应该为零,但是给定一个新值流,我需要能够说出每个值的可能性.我已经查看了一些numpy/scipy概率密度函数,但是我不知道在运行类似scipy.stats.norm.pdf(data)之后可以选择哪个或如何查询新值.似乎不同的概率密度函数将以不同的方式拟合数据.鉴于直方图的形状我不知道如何决定使用哪个.
我的频率值随时间(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轴单位)我的意思是我有数据说我有:
某种方式实现我的目标(我认为不正确)将创建一组这些实现:
# 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)

并使用fitdistr在set.values:
f2 <- fitdistr(set.values, 'weibull')
f2
Run Code Online (Sandbox Code Playgroud)
为什么我认为这是不正确的方式以及为什么我在寻找更好的解决方案R?
在上面给出的分布拟合方法中,假设它set.values是从分布中完整的一组实现T
在我原来的问题中,我知道密度曲线第一部分的点 - …
是否存在累积密度函数的精确导数是概率密度函数(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)

如果是这样,我如何缩放衍生物以等同于PDF?
假设我有一个简单的数组,具有相应的概率分布.
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)
有没有办法可以使用相同的分布生成另一组数据.由于操作是概率性的,它不再需要与初始分布完全匹配,而只是从它生成.
我确实成功地找到了一个简单的解决方案.谢谢!
我在下面有以下代码,用于打印特定平均值和标准偏差的 PDF 图表。
现在我需要找到特定值的实际概率。例如,如果我的均值是 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) 我需要使用高斯执行卷积,但高斯的宽度需要改变.我不是在做传统的信号处理,而是根据设备的分辨率,我需要采用完美的概率密度函数(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
假设需要计算一般数量的离散概率密度函数的卷积.对于下面的示例,有四个分布采用具有指定概率的值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)
也会有很大的帮助.
我有以下代码,希望估算自定义分发的参数。有关发行的更多详细信息。然后,使用估计的参数,我想查看估计的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) python ×6
numpy ×4
r ×3
scipy ×3
convolution ×2
distribution ×2
statistics ×2
cdf ×1
colors ×1
estimation ×1
fminsearch ×1
ggplot2 ×1
histogram ×1
matlab ×1
matplotlib ×1
mle ×1
probability ×1
random ×1
resolution ×1
weibull ×1