我希望将加权分布拟合到我拥有的数据集中。
我目前正在使用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)
我确信这个问题已经在某个地方得到了解答,但我看上去并找不到任何东西。
提前感谢,
戈登
答案 0 :(得分:4)
也许您可以使用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")
标准误差是垃圾,但估计的参数应该足够了。