You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R中实现Matlab核平滑累积分布函数(对应ksdensity代码)

在R中实现Matlab ksdensity 的CDF估计

没问题!我帮你把这段Matlab的核密度CDF估计代码转换成R的实现,咱们一一对应参数来,确保效果和Matlab一致:

核心思路

Matlab的ksdensity函数在指定function='cdf'时,是用核方法估计累积分布函数。在R中,ks提供了功能完全匹配的工具,能直接对应你用到的所有参数(Epanechnikov核、指定支持区间、自定义估计点)。

完整R代码实现

# 先安装并加载ks包(如果还没安装的话)
if (!require(ks)) {
  install.packages("ks")
  library(ks)
}

# 1. 提取你的数据(对应Matlab的X(:,2))
x_data <- X[, 2]

# 2. 定义支持区间的上下限(对应Matlab的[m(2), M(2)])
support_lower <- m[2]
support_upper <- M[2]

# 3. 拟合核密度模型,匹配Matlab的参数
kde_model <- kde(
  x = x_data,
  kernel = "epanechnikov",  # 对应Matlab的Kernel='epanechnikov'
  xmin = support_lower,     # 对应Matlab的Support下限
  xmax = support_upper      # 对应Matlab的Support上限
)

# 4. 在指定点xi上计算CDF、估计点和密度值(对应Matlab的p2, xp2, up2)
p2 <- predict(kde_model, newdata = xi, what = "cdf")  # CDF估计值
xp2 <- xi                                             # 估计点(和输入xi一致)
up2 <- predict(kde_model, newdata = xi, what = "density")  # 对应点的核密度值

参数对应说明

  • 核函数:Matlab的'epanechnikov'和R中ks::kde"epanechnikov"拼写完全一致,核函数类型完全匹配。
  • 支持区间:Matlab的Support=[m(2),M(2)]对应R中的xminxmax参数,用来限制CDF估计的范围,避免边界外的无效估计。
  • 输出结果
    • p2:和Matlab输出一致,是xi点上的核估计CDF值;
    • xp2:就是你输入的xi向量(和Matlab返回的xp2逻辑相同);
    • up2:对应Matlab的up2,是xi点上的核密度估计值。

备选方案(不用额外包)

如果你不想安装ks包,也可以用基础包的density函数结合积分计算CDF,但需要手动处理支持区间,步骤会繁琐一些:

# 用基础包计算核密度
dens <- density(x_data, kernel = "epanechnikov", from = support_lower, to = support_upper)

# 用积分计算每个xi点的CDF
p2 <- sapply(xi, function(x) {
  idx <- dens$x <= x
  sum(dens$y[idx] * diff(c(dens$x[1], dens$x[idx])))
})

不过这种方法的精度和参数灵活性不如ks包,更推荐用前者。

内容的提问来源于stack exchange,提问作者Yohann L.

火山引擎 最新活动