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

提取/导出R(ecdf)中经验累积分布函数的数据,r,R,我使用R来计算一些数据的ecdf。我想在另一个软件中使用结果。我使用R只是做“工作”,而不是为我的论文制作最终的图表 示例代码 输出 问题 问题1 如何获得原始信息,以便在另一个软件(如Excel、Matlab、LaTeX)中绘制ecdf图?对于直方图函数,我只需编写 res = hist(...) 我发现所有的信息都像 res$breaks res$counts res$density res$mids res$xname 问题2 如何计算逆ecdf?假设我想知道有多少辆车的速度低于1

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

示例代码 输出

问题 问题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英里有一个数据点。

这里我没有每1英里一品脱的数据。只有在有可用数据的情况下,我才有数据点。

解决方案 文件
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
意义


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

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

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


ecdf不会告诉您有多少辆车高于/低于特定阈值;相反,它表示从数据集中随机选择的汽车高于/低于阈值的概率。如果你对满足某些标准的汽车数量感兴趣,就数一数
myData[myDataecdf的输出是一个函数,除其他对象类型外。您可以使用
class(myResult)
验证这一点,该类显示对象的S4类
myResult

如果您输入
myResult(unique(myData))
,R将在
myData
中出现的所有不同值处计算ecdf对象
myResult
,并将其打印到控制台。要保存输出,您可以输入
write.csv(cbind(unique(myData))、myResult(unique(myData))、file=“C:/Documents/My ecdf.csv”)
将其保存到该文件路径


ecdf不会告诉您有多少辆车高于/低于特定阈值;相反,它说明了从您的数据集中随机选择的一辆车高于/低于阈值的概率。如果您对满足某些标准的车的数量感兴趣,只需计算它们。
myData[myData在我看来,您的主要要求是在每个
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")
x y ord图(y[ord]~x[ord],type=“l”)


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

在我看来,你的主要要求是在每个
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")
x y ord图(y[ord]~x[ord],type=“l”)



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

谢谢!我怎样才能用另一个软件准确地复制绘图?如果我有一个csv文件或类似的文件,我会很高兴的。再次感谢。也许我描述的愿望不够准确,我更新了问题。谢谢-这几乎是我需要的;)。我编辑了问题。在R图中,不是每1英里每小时有一个数据点,因为在数据中,点不是每1英里每小时一个。太好了-非常感谢!我将在问题中包含解决方案,以便其他人只需在一个地方查看。我必须做些什么才能获得周围问题的投票结果?:)谢谢!我如何用另一个软件准确地重现该图tware?如果我有一个csv文件或类似文件,我会很高兴。再次感谢。也许我描述的愿望不够准确,我更新了问题。谢谢-这几乎是我需要的;)。我编辑了问题。在R图中,不是每1英里每小时一个数据点,因为在数据中,点不是每1英里每小时一个。太好了-非常感谢!我会的在问题中包含解决方案,以便其他人只需在一个地方查看。我需要做什么才能获得周围问题的投票?:)PS-但你可以在其他软件中同样轻松地做到这一点,例如,只需保存x值,将其导入Excel,然后使用电子表格公式和sorting.PS进行等效操作-但是y你也可以在其他软件中轻松实现这一点,例如,只需保存x值,将其导入Excel,然后使用电子表格公式和排序进行等效操作。有一个有用的习惯用法可以帮助你了解发生了什么,那就是调用函数
ecdf(x)
,并将数据作为参数:
ecdf(x)(x)
。您可能想用一些额外的x值(例如,样本左侧的一个)来补充它。嗨。谢谢。我还不明白f(x)(x)的意思。但我稍后会尝试。您可以通过
g(x)
调用变量
x
的函数
g
。现在
ecdf(x)
-函数
ecdf
-的输出本身就是一个函数。因此,您可以通过传递参数来调用函数
ecdf(x)
"","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
> 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")