You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言核密度及累积分布函数积分计算报错求助

R语言核密度积分错误排查与kerdiest包使用说明

一、积分报错原因及修复

你遇到的Error in integrate(fhat, lower = 0, upper = t) : length(upper) == 1 is not TRUE,本质是R基础包的integrate()函数要求积分上限必须是单个数值,但你传入的upper = t是长度大于1的向量(比如一组待计算的分位点)。

修复方案

如果需要对多个上限值计算积分,用sapply()或lapply()批量处理每个上限:

# 示例:定义高斯核密度函数
fhat <- function(z, data, bw) {
  n <- length(data)
  (1/(n*bw)) * sum(dnorm((z - data)/bw))
}

# 待计算的多个积分上限
t_values <- c(0.3, 0.8, 1.2)
# 批量计算积分结果
cdf_results <- sapply(t_values, function(t) {
  integrate(fhat, lower = 0, upper = t, data = your_raw_data, bw = your_bandwidth)$value
})

如果t本应为单个值,检查变量t是否被误赋值为向量(比如之前的代码中把t定义成了序列)。

二、kerdiest包kde函数自定义带宽

kerdiest包的kde()函数完全支持自定义带宽,直接通过bandwidth参数传入你的目标数值即可:

library(kerdiest)
# 模拟数据
raw_data <- rgamma(150, shape = 2)
# 自定义带宽h=0.4
kde_output <- kde(raw_data, bandwidth = 0.4)
# 提取密度估计的x轴点和对应密度值
x_grid <- kde_output$x
density_est <- kde_output$y

若需要基于该密度计算积分,可先通过approxfun()生成插值函数,再用integrate()计算:

# 生成可用于积分的密度函数
kde_fun <- approxfun(x_grid, density_est)
# 计算0到1.5的积分
integral_result <- integrate(kde_fun, lower = 0, upper = 1.5)$value

内容的提问来源于stack exchange,提问作者SS_ST

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 08:30:00