如何在R中找到多元经验累积分布函数(CDF)?

如何在R中找到多元经验累积分布函数(CDF)?,r,ecdf,R,Ecdf,我有两个相关变量x和y,我想知道如何在R中找到它们的经验联合CDF 此外,我们如何找到概率,如:p(X=3)、p(X>=3和Y=3或Y您可以使用mltools包 x <- 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) y <- c(1.42,5.15,2.52,2.29,12.36,2.82,

我有两个相关变量x和y,我想知道如何在R中找到它们的经验联合CDF


此外,我们如何找到概率,如:p(X=3)、p(X>=3和Y=3或Y您可以使用
mltools

x <- 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)
y <- 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)

library(mltools)
library(data.table)

# set data in a data.table
dt <- data.table(x = x, y = y)

x您是从两个独立的正态分布而不是从二元正态分布中提取样本。我对您的要求/尝试感到困惑。
MASS::mvnorm
允许您从二元正态分布中提取样本。对于两个独立的随机变量,联合CDF只是单个CDF的乘积。“x和y假设来自两个相关的观察,这里我只是创建了一些假数据”正如我所解释的,你的假数据不是很好,也不能代表你的实际问题,因为
x
y
是独立的(而不是来自二元分布)@Croote我已经尝试了
emcdf
包,但是它不能像P一样计算用户指定的CDF(XIn在文档中,您可以为
emcdf()提供两列数据帧)
函数返回一个对象作为二元cdf使用。您不能使用该对象吗?@Croote
emcdf
函数确实返回一个对象,对象中的点基本上来自输入x和y。但在我的情况下,我需要找到一些不包含在x和y中的新点的cdf。如果您试图解决我的问题使用
emcdf
软件包,您将更好地理解我想说的内容。谢谢。非常感谢您提供的精彩解决方案。我知道
emerical\u cdf
可以计算cdf,但为什么
也表示(x。我们如何计算
P(x>=3,Y=3)非常感谢。
x <- 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)
y <- 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)

library(mltools)
library(data.table)

# set data in a data.table
dt <- data.table(x = x, y = y)
> empirical_cdf(dt, ubounds = data.table(x = 3, y = 5))
   x y N.cum       CDF
1: 3 5    47 0.8103448
> mean(x <= 3 & y <= 5) # same result
[1] 0.8103448
P(X <= 3, Y <= 5) + P(X > 3, Y <= 5) = P(Y <= 5)
P(X > 3, Y <= 5) = P(Y <= 5) - P(X <= 3, Y <= 5)
> empirical_cdf(dt$y, 5)$CDF - empirical_cdf(dt, data.table(x = 3, y = 5))$CDF
[1] 0.01724138
> mean(x > 3 & y <= 5) # same result
[1] 0.01724138