2013-11-12 2 views
5

Я ищу, чтобы соответствовать распределенному распределению для набора данных, который у меня есть.Установка взвешенного распределения в 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) 

Я уверен, что на это был дан ответ раньше, но я искал и ничего не нашел.

спасибо заранее,

Гордон

ответ

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") 

Стандартными ошибками являются мусор, но оценочных параметров должно быть достаточно.

+1

хорошая идея, но вы можете написать ее короче и быстрее: 'my_vector = width (df, rep (value, round (weight * 10000)))' – thias

+0

К сожалению, это должно быть 'with()', not 'width()» – thias

Смежные вопросы