求和加权瑞利分布
Sum weighted Rayleigh distribution
我根据帕累托分布函数用 nrow=1000
(个人)和 ncol=100
(天)的步长模拟数据:
set.seed(10)
sim_data <- replicate(100, VGAM::rpareto(1000, shape=7, scale=500))
sim_data <- as.data.frame(sim_data)
set.seed(10)
sim_data[,1:50] <- sim_data[50]*(-1) ##assign directionality
sim_data_directions <- as.data.frame(sim_data)
##randomize columns
sim_data <- sim_data_directions[,sample(ncol(sim_data_directions))]
x <- c(1:31) ## for variable 'days' to associate to each step length
set.seed(10)
df_sim <- cbind(sim_data, t(apply(sim_data,1, function(x) {
i1 <- sample(seq_along(x), 1)
out <- sum(sample(x, i1))
c(days = i1, step_lengths = out)}
))) ## create step lengths
##adding weights for each level in variable days
df_sim <- as.data.frame(dplyr::add_count(df_sim, days))
使用此数据集 df_sim
,具有步长的模拟值、与每个步长相关的时间(以天为单位)以及权重(每个时间变量的值的数量(以天为单位,我想总结一下)分布,使用瑞利分布函数,其中每个天数级别的分布都是加权的,如下所示:
rayleigh_distr <- sum(n*function (x) x*exp(-1*(x/2*sigma)^2)/sigma^2)
其中 n
是权重。
如何根据权重汇总每天的分布?
首先,您的 Rayleigh PDF 中似乎有错误。应该是:
x*exp(-(x/sigma)^2/2)/sigma^2
看起来你想要 rayleigh_distr
作为函数 return 瑞利 mixture distribution 的 PDF,权重 n
和比例参数 sigma
。如果是这样的话,它将是(对于标量 x
):
rayleigh_distr <- function(x, sigma, n) sum(n*x*exp(-(x/sigma)^2/2)/sigma^2)
其中 sigma
和 n
是等长向量。
如果你想为 x
传递一个向量(不一定与 sigma
和 n
的长度相同),那么这应该有效:
library(Rfast)
rayleigh_distr <- function(x, sigma, n) colsums(n*eachrow(exp(-(outer(1/sigma, x))^2/2), x)/sigma^2)
它将return一个与x
长度相同的向量。
更新:
CDF 为:
rayleigh_cdf <- function(x, sigma, n) colSums(n*(1 - exp(-(outer(1/sigma, x))^2/2)))
我根据帕累托分布函数用 nrow=1000
(个人)和 ncol=100
(天)的步长模拟数据:
set.seed(10)
sim_data <- replicate(100, VGAM::rpareto(1000, shape=7, scale=500))
sim_data <- as.data.frame(sim_data)
set.seed(10)
sim_data[,1:50] <- sim_data[50]*(-1) ##assign directionality
sim_data_directions <- as.data.frame(sim_data)
##randomize columns
sim_data <- sim_data_directions[,sample(ncol(sim_data_directions))]
x <- c(1:31) ## for variable 'days' to associate to each step length
set.seed(10)
df_sim <- cbind(sim_data, t(apply(sim_data,1, function(x) {
i1 <- sample(seq_along(x), 1)
out <- sum(sample(x, i1))
c(days = i1, step_lengths = out)}
))) ## create step lengths
##adding weights for each level in variable days
df_sim <- as.data.frame(dplyr::add_count(df_sim, days))
使用此数据集 df_sim
,具有步长的模拟值、与每个步长相关的时间(以天为单位)以及权重(每个时间变量的值的数量(以天为单位,我想总结一下)分布,使用瑞利分布函数,其中每个天数级别的分布都是加权的,如下所示:
rayleigh_distr <- sum(n*function (x) x*exp(-1*(x/2*sigma)^2)/sigma^2)
其中 n
是权重。
如何根据权重汇总每天的分布?
首先,您的 Rayleigh PDF 中似乎有错误。应该是:
x*exp(-(x/sigma)^2/2)/sigma^2
看起来你想要 rayleigh_distr
作为函数 return 瑞利 mixture distribution 的 PDF,权重 n
和比例参数 sigma
。如果是这样的话,它将是(对于标量 x
):
rayleigh_distr <- function(x, sigma, n) sum(n*x*exp(-(x/sigma)^2/2)/sigma^2)
其中 sigma
和 n
是等长向量。
如果你想为 x
传递一个向量(不一定与 sigma
和 n
的长度相同),那么这应该有效:
library(Rfast)
rayleigh_distr <- function(x, sigma, n) colsums(n*eachrow(exp(-(outer(1/sigma, x))^2/2), x)/sigma^2)
它将return一个与x
长度相同的向量。
更新:
CDF 为:
rayleigh_cdf <- function(x, sigma, n) colSums(n*(1 - exp(-(outer(1/sigma, x))^2/2)))