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

如何在R中使用分组频数数据拟合Log-normal分布?

加权拟合对数正态分布的解决方法

你遇到的问题是fitdist的调用方式错误——它的第一个参数是待拟合的观测向量,第二个参数是分布名称,不能直接把频数count放在第二个位置。要同时用age(分组变量)和count(频数权重)拟合对数正态分布,有两种高效的实现方式:

方法1:展开为原始观测数据

把每个age按对应的count次数重复,生成完整的观测向量后再拟合:

library(fitdistrplus)
df <- data.frame(age=c(18,22,24,25,26,27,28,29,31,32,35,37,40,44,49,50,55,60,63,67,80),
                 count=c(100,110,120,125,125,110,100,90,80,70,60,45,30,15,12,10,8,3,2,1,1))

# 展开数据:每个age重复count次
age_expanded <- rep(df$age, times = df$count)
# 拟合对数正态分布
fit_result <- fitdist(age_expanded, "lnorm")
# 查看包含meandlog、sdlog的参数结果
summary(fit_result)

方法2:使用权重参数(更高效)

直接通过fitdist的weights参数传入频数,无需展开数据,适合大样本场景:

library(fitdistrplus)
df <- data.frame(age=c(18,22,24,25,26,27,28,29,31,32,35,37,40,44,49,50,55,60,63,67,80),
                 count=c(100,110,120,125,125,110,100,90,80,70,60,45,30,15,12,10,8,3,2,1,1))

# 传入weights参数拟合
fit_result_weighted <- fitdist(df$age, "lnorm", weights = df$count)
# 查看参数结果
summary(fit_result_weighted)

两种方法得到的meandlog(对数均值)和sdlog(对数标准差)参数结果一致,都是基于age的加权观测拟合出的对数正态分布参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:20:37