【问题标题】:Discriminant function for Gaussian distribution高斯分布的判别函数
【发布时间】:2020-11-17 10:54:45
【问题描述】:

你好社区我有以下错误:

Error in X - Q$Mu : argument non numérique pour un opérateur binaire
Called from: transpose(X - Q$Mu)

这是我的代码(r 语言),希望对我想模拟数据集并应用高斯分布有所帮助,但它给了我上面的错误

library(MixSim)
library(rlist)
Q <- MixSim(MaxOmega = 0.0, K = 2, p = 2)
A <- simdataset(n = 500, Pi = Q$Pi, Mu = Q$Mu, S = Q$S)
A
vk=data.frame(A$id)
v=count(vk,1)
v ########### count the elements of eah class (this exemple has 5 classes)
v[1,2]###### elements for class 1
v[2,2]######## elements for class 2

g <- function(X,sigma,i) {
  return((1/2)*transpose(X-Q$Mu)*solve(Q$S[,,i])*(X-Q$Mu))-(1/2)*ln(sigma)+ln(v[i,2]/500)
}

g(A,sigma,1)
sigma=Q$Mu
mahalanobis(A,  sigma, Q$S)
Q$Mu
ln(sigma)
Q$Mu

我想让它计算这个函数 Discriminant Gaussian distribution

P 是概率,Q$Mu 是平均值 Q$S[,,i] 是类 i 的协方差矩阵

【问题讨论】:

  • 仔细检查函数中的括号:似乎return() 语句中的右括号放置得太早了

标签: r algorithm


【解决方案1】:

错误是由X-Q$Mu 部分函数引起的。正如你所说的g(A,sigma,1),它本质上是A-Q$MuA 是一个列表,Q$Mu 是一个矩阵 - 您不能从列表中减去矩阵。
您可能指的是X 的矩阵部分,即X$X。但即便如此,Q$mu 是一个维度不兼容的矩阵 - 你不能减去它。
此外,您的return() 语句似乎有错字 - 右括号后面还有附加部分,不会返回。

【讨论】:

  • 那么如何将列表转换为矩阵
  • transpose() 将列表作为其输入。你需要定义你想在那里拥有什么
  • 我想要一个矩阵
  • 您需要详细解释您需要从该代码中获得什么(或向我们提供该代码的来源)——否则我们无能为力。
  • 我想写一个计算判别函数的代码,请看编辑过的问题
猜你喜欢
  • 2015-12-02
  • 2013-01-30
  • 2023-03-26
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
相关资源
最近更新 更多