在R语言中如何获取fda对象中每条曲线的最大值坐标?
获取FDA导数曲线每条曲线的最大值坐标
先给出模拟生成FDA对象及其一阶导数的示例代码(对应你提到的df1_obj):
# 加载依赖包 library(fda) library(fdaoutlier) set.seed(123) n_curves <- 5 # 模拟5条曲线 x_grid <- seq(0, 1, length.out = 100) # x轴网格点 # 生成带噪声的正弦曲线数据 curve_data <- replicate(n_curves, sin(2*pi*x_grid) + rnorm(length(x_grid), 0, 0.1)) # 创建B样条基并转换为FDA对象 bspline_basis <- create.bspline.basis(rangeval = c(0,1), nbasis = 10) df1_obj <- smooth.basis(x_grid, curve_data, bspline_basis)$fd # 计算一阶导数 df1_deriv <- deriv.fd(df1_obj, 1)
实现步骤
- 提取导数曲线的数值与x轴点
用eval.fd()将FDA格式的导数曲线转换为数值矩阵,同时指定要评估的x轴网格点:
# 定义评估x点(可根据需求调整精度) eval_points <- seq(0, 1, length.out = 100) # 评估导数曲线,得到每行对应x点、每列对应曲线的数值矩阵 deriv_values <- eval.fd(eval_points, df1_deriv)
- 获取每条曲线的最大值坐标
对数值矩阵按列(每条曲线)查找最大值的位置,再匹配对应的x和y值:
# 找出每条曲线最大值对应的索引 max_positions <- apply(deriv_values, 2, which.max) # 整理成数据框,包含曲线ID、最大值x坐标、最大值y值 max_coords_df <- data.frame( curve_id = 1:ncol(deriv_values), max_x = eval_points[max_positions], max_y = deriv_values[cbind(max_positions, 1:ncol(deriv_values))] )
- 查看结果
打印输出每条曲线的最大值坐标:
print(max_coords_df)
说明
eval.fd()是FDA包中用于将函数对象转换为数值矩阵的核心函数,确保我们能直接对曲线数值进行操作apply(..., 2, which.max)按列遍历矩阵,定位每条曲线最大值的位置索引cbind(max_positions, 1:ncol(deriv_values))用于构造矩阵索引,精准提取每个最大值对应的数值,避免索引错位问题
内容的提问来源于stack exchange,提问作者Allerleirauh
相关产品推荐
相关产品推荐

