提取/输出R(ecdf)中经验累积分布函数的数据

时间:2014-07-27 18:21:27

标签: r

我使用R来计算某些数据的ecdf。我想在另一个软件中使用结果。我只是用R来做工作'但不要为我的论文制作最终的图表。

示例代码

# Plotting the a built in sampla data
plot(cars$speed)
# Assingning the data to a new variable name
myData = cars$speed
# Calculating the edcf
myResult = ecdf(myData)
myResult
# Plotting the ecdf
plot(myResult)

输出

> # Plotting the a built in sampla data
> plot(cars$speed)
> # Assingning the data to a new variable name
> myData = cars$speed
> # Calculating the edcf
> myResult = ecdf(myData)
> myResult
Empirical CDF 
Call: ecdf(myData)
 x[1:19] =      4,      7,      8,  ...,     24,     25
> # Plotting the ecdf
> plot(myResult)
> plot(cars$speed)

enter image description here

enter image description here

问题

问题1

如何获取原始信息以便在另一个软件(例如Excel,Matlab,LaTeX)中绘制ecdf图?对于直方图功能,我可以写

res = hist(...)

我找到所有信息,如

res$breaks
res$counts
res$density
res$mids
res$xname

问题2

如何计算逆ecdf?假设我想知道有多少车速低于10英里/小时(示例数据是车速)。

更新

感谢user777的回答,我现在有更多信息。如果我使用

> myResult(0:25)
 [1] 0.00 0.00 0.00 0.00 0.04 0.04 0.04 0.08 0.10 0.12 0.18 0.22 0.30 0.38
[15] 0.46 0.52 0.56 0.62 0.70 0.76 0.86 0.86 0.88 0.90 0.98 1.00

我得到0到25​​英里每小时的数据。但我不知道在哪里绘制数据点。我确实想要完全重现R图。

这里我每1英里每小时有一个数据点。

enter image description here

这里我每1英里每小时没有数据品脱。如果有可用数据,我只有一个数据点。

enter image description here

解决方案

# Plotting the a built in sample data
plot(cars$speed)
# Assingning the data to a new variable name
myData = cars$speed
# Calculating the edcf
myResult = ecdf(myData)
myResult
# Plotting the ecdf
plot(myResult)
# Have a look on the probability for 0 to 25 mph
myResult(0:25)
# Have a look on the probability but just where there ara data points
myResult(unique(myData))
# Saving teh stuff to a directory
write.csv(cbind(unique(myData), myResult(unique(myData))), file="D:/myResult.txt")

文件myResult.txt看起来像

"","V1","V2"
"1",4,0.04
"2",7,0.08
"3",8,0.1
"4",9,0.12
"5",10,0.18
"6",11,0.22
"7",12,0.3
"8",13,0.38
"9",14,0.46
"10",15,0.52
"11",16,0.56
"12",17,0.62
"13",18,0.7
"14",19,0.76
"15",20,0.86
"16",22,0.88
"17",23,0.9
"18",24,0.98
"19",25,1

含义

enter image description here

注意:我有一个德语Excel,所以十进制符号是逗号而不是点。

2 个答案:

答案 0 :(得分:3)

ecdf的输出是函数,以及其他对象类型。您可以使用class(myResult)验证这一点,myResult显示对象myResult(unique(myData))的S4类。

如果输入myResult,R将评估出现在myData中的所有不同值的ecdf对象write.csv(cbind(unique(myData), myResult(unique(myData))), file="C:/Documents/My ecdf.csv"),并将其打印到控制台。要保存输出,可以输入myData[myData<=10]将其保存到该文件路径。

ecdf并没有告诉你多少辆汽车高于/低于特定门槛;相反,它表示概率从您的数据集中随机选择的汽车高于/低于阈值。如果您对符合某些条件的汽车数量感兴趣,请计算它们。 length(myData[myData<=10])返回数据元素,myResult(10)告诉您有多少数据元素。

假设您想知道样本概率,您的数据中随机选择的汽车低于10英里/小时,这是{{1}}给出的值。

答案 1 :(得分:3)

在我看来,你的主要要求是重现每个x值的跳跃。试试这个:

> x <- c(cars$speed, cars$speed, 1, 28)
> y <- c((0:49)/50, (1:50)/50, 0, 1)
> ord <- order(x)
> plot(y[ord] ~ x[ord], type="l")

Resulting plot

前50个(x,y)对是跳跃的开始,接下来的50个是结束,最后两个给出$(x_1-3,0)$和$(x_)的开始和结束值{50} +3,1)$。然后,您需要按$ x $中的递增顺序对值进行排序。