在R中拟合加权分布

6

我希望对我拥有的数据集进行加权分布拟合。

我目前正在使用fitdist命令,但不知道是否有一种方法可以添加加权。

library(fitdistrplus)
df<-data.frame(value=rlnorm(100,1,0.5),weight=runif(100,0,2))

#This is what I'm doing but not really what I want
fit_df<-fitdist(df$value,"lnorm")

#How to do this
fit_df_weighted<-fitdist(df$value,"lnorm",weight=df$weight)

我确定这个问题之前已经有人回答过了,但我找不到任何相关的内容。 提前感谢您的帮助。 Gordon
1个回答

3
也许你可以使用rep()函数和一个快速循环来近似分布。
你可以将每个加权值乘以10000,四舍五入到整数,并用它来表示你需要在向量中有多少个该值的倍数。在运行一个快速循环后,你可以通过fitdist()算法来处理这个向量。
df$scaled_weight <- round(df$weight*10000,0)
my_vector <- vector()

## quick loop
for (i in 1:nrow(df)){
  values <- rep(df$value[i], df$scaled_weight[i])
  my_vector <- c(my_vector, values)
}

## find parameters
fit_df_weighted <- fitdist(my_vector,"lnorm")

标准误差可能不可靠,但估计的参数应该是足够的。


2
好主意,但你可以更短更快地写成:my_vector=width(df, rep(value, round(weight*10000))) - thias
抱歉,应该是使用'with()'而不是'width()'。 - thias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接