R中如何将circular类对象转为numeric并提取von Mises分布的mu、kappa值
单组数据参数提取
mle.vonmises()返回的结果为列表结构,其中存储的mu、kappa默认是circular类,直接用as.numeric()包裹即可转换为数值型:
# 提取单组拟合结果的参数 mu_numeric <- as.numeric(Mises$mu) kappa_numeric <- as.numeric(Mises$kappa)
配合group_by()批量处理方案
如果需要对分组数据批量拟合分布并提取参数,可结合嵌套表和purrr的映射函数实现,完整示例如下:
# 加载所需包 library(circular) library(dplyr) library(tidyr) library(purrr) # 示例数据结构:包含分组列group、角度数据列angle demo_df <- data.frame( group = rep(c("组1", "组2", "组3"), each = 80), angle = c( rvonmises(80, mu = circular(pi/4), kappa = 3), rvonmises(80, mu = circular(pi), kappa = 6), rvonmises(80, mu = circular(3*pi/2), kappa = 1.5) ) ) # 分组拟合+批量提取参数 param_result <- demo_df %>% group_by(group) %>% nest() %>% mutate( # 对每个分组单独拟合von Mises分布 fit_res = map(data, ~mle.vonmises(x = .x$angle, bias = FALSE, control.circular = list())), # 提取mu并转换为数值 mu = map_dbl(fit_res, ~as.numeric(.x$mu)), # 提取kappa并转换为数值 kappa = map_dbl(fit_res, ~as.numeric(.x$kappa)) ) %>% select(group, mu, kappa)
运行后得到的param_result就是每个分组对应参数的数值型结果,可直接用于后续计算。
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

