【发布时间】:2020-06-15 08:02:20
【问题描述】:
我正在尝试根据这些参数创建一个高斯混合函数:
- 对于每个样本,滚动一个具有 k 个面的模具
- 如果第 j 面出现在卷中,则从 Normal(muj, sdj) 中抽取样本,其中 muj 和 sdj 分别是第 j 个正态分布的平均值和标准差。这意味着您应该有 k 个不同的正态分布可供选择。请注意,muj 是在称为 mus 的向量中引用第 j 个元素的数学形式。
- 从此法线生成的样本随后来自高斯混合。
地点:
- n,一个整数,表示您希望从此随机变量中获得的独立样本数
- mus,长度为 k 的数值向量
- sds,长度为 k 的数值向量
- prob,一个长度为 k 的数值向量,表示选择不同高斯的概率。这应该默认为 NULL。
这是我目前想出的:
n <- c(1)
mus <- c()
sds <- c()
prob <- c()
rgaussmix <- function(n, mus, sds, prob = NULL){
if(length(mus) != length(sds)){
stop("mus and sds have different lengths")
}
for(i in 1:seq_len(n)){
if(is.null(prob)){
rolls <- c(NA, n)
rolls <- sample(c(1:length(mus)), n, replace=TRUE)
avg <- rnorm(length(rolls), mean=mus[rolls], sd=sds[rolls])
}else{
rolls <- c(NA, n)
rolls <- sample(c(1:length(mus), n, replace=TRUE, p=prob))
avg <- rnorm(length(rolls), mean=mus[rolls], sd=sds[rolls])
}
}
return(avg)
}
rgaussmix(2, 1:3, 1:3)
它似乎符合大多数要求,但它一直给我以下错误:
数值表达式有2个元素:只有第一个使用的要替换的项目数不是替换长度的倍数
我试过查看多个变量的长度,但我似乎无法弄清楚错误来自哪里!
有人可以帮我吗?
【问题讨论】:
-
这是
1:seq_len(n)的问题:使用seq_len(n)即可。
标签: r function warnings gaussian variable-length