标签: cdf

在python中绘制熊猫系列的CDF

有没有办法做到这一点?我似乎不能轻易地将pandas系列与绘制CDF联系起来.

python series pandas cdf

39
推荐指数
6
解决办法
5万
查看次数

将数据点拟合为累积分布

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

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
查看次数

ggplot比例变换对点和函数的作用不同

我正在尝试使用R和ggplot2绘制分发CDF.但是,在我转换Y轴以获得直线后,我发现在绘制CDF函数时遇到困难.这种情节经常在Gumbel纸质图中使用,但在这里我将使用正态分布作为例子.

我生成数据,并绘制数据的累积密度函数和函数.他们很合适.但是,当我应用Y轴变换时,它们不再适合.

sim <- rnorm(100) #Simulate some data
sim <- sort(sim)  #Sort it

cdf <- seq(0,1,length.out=length(sim)) #Compute data CDF

df <- data.frame(x=sim, y=cdf) #Build data.frame

library(scales)
library(ggplot2)

#Now plot!
gg <- ggplot(df, aes(x=x, y=y)) +
        geom_point() +
        stat_function(fun = pnorm, colour="red")
gg
Run Code Online (Sandbox Code Playgroud)

输出应该是以下几点: 在此输入图像描述 好!

现在我尝试根据使用的分布变换Y轴.

#Apply transformation
gg + scale_y_continuous(trans=probability_trans("norm"))
Run Code Online (Sandbox Code Playgroud)

结果是: 在此输入图像描述

点被正确转换(它们位于一条直线上),但功能不是!

但是,如果我这样做,一切似乎都能正常工作,用ggplot计算CDF:

ggplot(data.frame(x=sim), aes(x=x)) +
  stat_ecdf(geom = "point") +
  stat_function(fun="pnorm", colour="red") +
  scale_y_continuous(trans=probability_trans("norm"))
Run Code Online (Sandbox Code Playgroud)

结果还可以: 这真是太棒了

为什么会这样?为什么不手动计算CDF使用比例变换?

r transform normal-distribution ggplot2 cdf

14
推荐指数
1
解决办法
635
查看次数

matplotlib中累积分布函数的对数图

我有一个包含记录事件的文件.每个条目都有时间和延迟.我有兴趣绘制延迟的累积分布函数.我对尾部延迟最感兴趣所以我希望绘图具有对数y轴.我对以下百分位数的延迟感兴趣:第90,99,99.9,99.99和99.999.到目前为止,这是我的代码生成一个常规的CDF图:

# retrieve event times and latencies from the file
times, latencies = read_in_data_from_file('myfile.csv')
# compute the CDF
cdfx = numpy.sort(latencies)
cdfy = numpy.linspace(1 / len(latencies), 1.0, len(latencies))
# plot the CDF
plt.plot(cdfx, cdfy)
plt.show()
Run Code Online (Sandbox Code Playgroud)

常规CDF情节

我知道我希望情节看起来像什么,但我很难得到它.我希望它看起来像这样(我没有生成这个情节):

对数CDF图

使x轴对数很简单.y轴是给我带来问题的那个.使用set_yscale('log')不起作用,因为它想要使用10的幂.我真的希望y轴具有与该图相同的刻度标签.

如何将我的数据放入像这样的对数图中?

编辑:

如果我将yscale设置为'log',并将ylim设置为[0.1,1],我会得到以下图:

在此输入图像描述

问题是数据集上从0到1的典型对数刻度图将集中在接近零的值上.相反,我想专注于接近1的值.

python numpy logarithm matplotlib cdf

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

使用scipy的Python中的多变量普通CDF

为了计算多元法线的CDF,我按照这个例子(对于单变量情况)但不能解释scipy产生的输出:

from scipy.stats import norm
import numpy as np
mean = np.array([1,5])
covariance = np.matrix([[1, 0.3 ],[0.3, 1]])
distribution = norm(loc=mean,scale = covariance)
print distribution.cdf(np.array([2,4]))
Run Code Online (Sandbox Code Playgroud)

产生的输出是:

[[  8.41344746e-01   4.29060333e-04]
 [  9.99570940e-01   1.58655254e-01]]
Run Code Online (Sandbox Code Playgroud)

如果联合CDF定义为:

P (X1 ? x1, . . . ,Xn ? xn)
Run Code Online (Sandbox Code Playgroud)

那么预期的输出应该是0到1之间的实数.

python normal-distribution scipy cdf

12
推荐指数
2
解决办法
1万
查看次数

曲线拟合:找到满足约束列表的最流畅的函数

考虑从(-inf,inf)到[0,1] 的非递减主观(上)函数的集合.(典型的CDF满足该属性.)换句话说,对于任何实数x,0 <= f(x)<= 1. 逻辑函数可能是最着名的例子.

我们现在以x值列表的形式给出一些约束,并且对于每个x值,给出一对函数必须介于其间的y值.我们可以将其表示为{x,ymin,ymax}三元组列表,例如

constraints = {{0, 0, 0}, {1, 0.00311936, 0.00416369}, {2, 0.0847077, 0.109064}, 
 {3, 0.272142, 0.354692}, {4, 0.53198, 0.646113}, {5, 0.623413, 0.743102}, 
 {6, 0.744714, 0.905966}}
Run Code Online (Sandbox Code Playgroud)

图形上看起来像这样:

对cdf的约束http://yootles.com/outbox/cdffit1.png

我们现在寻求一条尊重这些约束的曲线.例如:

适合cdf http://yootles.com/outbox/cdffit2.png

让我们首先尝试通过约束的中点进行简单插值:

mids = ({#1, Mean[{#2,#3}]}&) @@@ constraints
f = Interpolation[mids, InterpolationOrder->0]
Run Code Online (Sandbox Code Playgroud)

Plotted,f看起来像这样:

插值cdf http://yootles.com/outbox/cdffit3.png

这个功能不是满足的.此外,我们希望它更顺畅.我们可以增加插值顺序,但现在它违反了其范围为[0,1]的约束:

具有更高插值顺序的插值cdf http://yootles.com/outbox/cdffit4.png

那么,目标是找到满足约束条件的最平滑的函数:

  1. 非减.
  2. 当x接近负无穷大时倾向于0,当x接近无穷大时倾向于1.
  3. 通过给定的y-error-bars列表.

我上面绘制的第一个例子似乎是一个很好的候选者,但是我使用Mathematica的FindFit函数假设一个对数正态CDF.这在这个具体示例中效果很好,但通常不需要满足约束的对数正态CDF.

math plot wolfram-mathematica curve-fitting cdf

7
推荐指数
2
解决办法
3977
查看次数

读取文件并在Python中绘制CDF

我需要在几秒钟内读取带有时间戳的长文件,以及使用numpy或scipy的CDF图.我确实试过numpy,但似乎输出不是它应该是什么.以下代码:任何建议表示赞赏.

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('Filename.txt')
sorted_data = np.sort(data)
cumulative = np.cumsum(sorted_data)

plt.plot(cumulative)
plt.show()
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib scipy cdf

7
推荐指数
2
解决办法
4万
查看次数

从CDF播放器中获取数据

对于我的怀疑论者工作组,我在Mathematica中编写了一个程序来测试dowser评估通过照片向他们显示的人的状态的能力.对于空值测量,我将此文档以CDF格式分发给我们组的成员(新的v8可计算文档格式,意味着与CDF播放器一起运行).在我的计算机上(使用mma)它一切正常,但其他人无法导出数据(程序导出到Excel文件).在阅读细则时,我看到播放器不支持导出.所以我的问题是:

有没有办法从CDF播放器中获取数据?

wolfram-mathematica cdf wolfram-cdf

6
推荐指数
2
解决办法
2032
查看次数

如何绘制具有不同行数的向量的多个 CDF 图

我想在同一个图中绘制多个变量的 CDF 图。变量的长度不同。为了简化细节,我使用以下示例代码:

library("ggplot2")

a1 <- rnorm(1000, 0, 3)
a2 <- rnorm(1000, 1, 4)
a3 <- rnorm(800, 2, 3)

df <- data.frame(x = c(a1, a2, a3),ggg = gl(3, 1000))
ggplot(df, aes(x, colour = ggg)) + stat_ecdf()+ coord_cartesian(xlim = c(0, 3)) + scale_colour_hue(name="my legend", labels=c('AAA','BBB', 'CCC'))
Run Code Online (Sandbox Code Playgroud)

可以看到,a3的长度是800,与a1、a2不同。当我运行代码时,它显示:

> df <- data.frame(x = c(a1, a2, a3),ggg = gl(3, 1000))
Error in data.frame(x = c(a1, a2, a3), ggg = gl(3, 1000)) : 
arguments imply differing number of rows: 2800, 3000
> ggplot(df, aes(x, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 cdf ecdf

6
推荐指数
2
解决办法
8038
查看次数

如何从R中的2维连系找到联合累积分布函数?

我现在正在R中研究copula,不知道如何找到R中的联合累积分布?

D = c(1,3,2,2,8,2,1,3,1,1,3,3,1,1,2,1,2,1,1,3,4,1,1,3,1,1,2,1,3,7,1,4,6,1,2,1,1,3,1,2,2,3,4,1,1,1,1,2,2,12,1,1,2,1,1,1,3,4)
S = c(1.42,5.15,2.52,2.29,12.36,2.82,1.49,3.53,1.17,1.03,4.03,5.26,1.65,1.41,3.75,1.09,3.44,1.36,1.19,4.76,5.58,1.23,2.29,7.71,1.12,1.26,2.78,1.13,3.87,15.43,1.19,4.95,7.69,1.17,3.27,1.44,1.05,3.94,1.58,2.29,2.73,3.75,6.80,1.16,1.01,1.00,1.02,2.32,2.86,22.90,1.42,1.10,2.78,1.23,1.61,1.33,3.53,10.44)
Run Code Online (Sandbox Code Playgroud)

经过一番探索,我发现Gamma分布是描述上述数据的最佳方法。

library(fitdistrplus)
fg_d <- fitdist(data = Dur, distr = "gamma", method = "mle")
fg_s <- fitdist(data = Sev, distr = "gamma", method = "mle")
Run Code Online (Sandbox Code Playgroud)

然后,我尝试使用VineCopulapackge 选择copula系列:

mydata <- cbind(D=D, S=S)
u1 <- pobs(mydata[,1]) 
u2 <- pobs(mydata[,2])
fitCopula <- BiCopSelect(u1, u2, familyset=NA)
summary(fitCopula) 
Run Code Online (Sandbox Code Playgroud)

结果表明“生存克莱顿”。然后,我尝试构建以下copula:

library(copula)
cop_model <- surClaytonCopula(param = 5.79)
Run Code Online (Sandbox Code Playgroud)

现在,根据下面的方程式(假定E(L)为常数): 在此处输入图片说明

我需要找到给定D和S值的FD(d),FS(s)和C(FD(d),FS(s))。

例如,如果我们采用D = 3和S = 2,则必须找到F(D <= 3),F(S <= 2)和C(D <= 3 andS <= 2)。我想知道如何在R中使用软件包copula吗?

另外,我们如何找到C(D <= 3 …

r distribution cdf

6
推荐指数
1
解决办法
298
查看次数