拟合R中的加权分布

gtw*_*ebb 6 r

我希望将加权分布拟合到我拥有的数据集中.

我目前正在使用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)
Run Code Online (Sandbox Code Playgroud)

我确信这个问题已经在某个地方得到了回答,但我看上去却找不到任何东西.

提前致谢,

戈登

Hip*_*ian 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")
Run Code Online (Sandbox Code Playgroud)

标准误差可能是垃圾,但估计的参数应该足够了。

  • 好主意,但你可以把它写得更短更快:`my_vector=width(df,rep(value, round(weight*10000)))` (2认同)