gpt4 book ai didi

R代码高斯混合——数值表达式有2个元素: only the first used

转载 作者:行者123 更新时间:2023-12-05 01:20:59 25 4
gpt4 key购买 nike

我正在尝试根据这些参数创建一个高斯混合函数:

  • 对于每个样本,滚动一个具有 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 个元素:只有第一个使用的要替换的项目数不是替换长度的倍数

    我试过查看多个变量的长度,但我似乎无法弄清楚错误来自哪里!

    有人可以帮我吗?

    最佳答案

    如果你这样做 seq_len(2)它给你:

    [1] 1 2

    你不能做 1:(1:2) .. 这没有意义

    您还可以通过对您需要的尝试次数进行采样来避免代码中的循环,例如,如果您这样做:
    rnorm(3,c(0,10,20),1)
    [1] -0.507961 8.568335 20.279245

    它为您提供第一个平均值的第一个样本,第二个平均值的第二个样本,依此类推。因此,您可以将功能简化为:
    rgaussmix <- function(n, mus, sds, prob = NULL){
    if(length(mus) != length(sds)){
    stop("mus and sds have different lengths")
    }
    if(is.null(prob)){
    prob = rep(1/length(mus),length(mus))
    }
    rolls <- sample(length(mus), n, replace=TRUE, p=prob)
    avg <- rnorm(n, mean=mus[rolls], sd=sds[rolls])
    avg
    }

    您可以绘制结果:
    plot(density(rgaussmix(10000,c(0,5,10),c(1,1,1))),main="mixture of 0,5,10")

    enter image description here

    关于R代码高斯混合——数值表达式有2个元素: only the first used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60498771/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com