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)

我确信这已经在某个地方得到了回答,但我已经看过并且找不到任何东西。

提前致谢,

戈登

4

1 回答 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")

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

于 2015-06-29T21:21:33.310 回答