首页 > 解决方案 > 在 R Studio 中绘制一个总和

问题描述

我正在尝试使用曲线函数在 R Studio 中绘制以下函数,如下所示:

loglikelihood.func = function(x, mu){
n = length(x)
n*mu - sum(x) - sum(exp(mu)/(exp(x)))
}

curve(expr = loglikelihood.func(x = data, mu), xname = "mu", from 
= 0, to = 15)

现在,我有一个包含 50 个数据点的数据向量,在函数中,它当前正在对 mu 和 x(我的数据)求和,即 sum(exp(mu)/(exp(x))) 相当于 sum( exp(mu))/sum(exp(x))

我希望我的函数能够工作,这样我就可以得到 x 中每个不同数据点的分数总和,同时保持 mu 恒定,即 exp(mu)/exp(x1) + exp(mu)/exp(x2) + exp(mu)/ exp(x3) + ... 并在绘制曲线函数时对每个单独的 mu 重复此操作。

如果我将函数更改为 exp(mu)/sum(exp(x)) 它正在执行 exp(mu)/[exp(x1)+exp(x2)+...] 这不是我想要的。有人可以在这里提供一些建议吗?

编辑:这是我的数据的一个子集,

data = c(8.5,8.9,9.1,8.9,8.4,9.7,9.1,9.6,8.7,9.3,9.6,9.3,8.7,9.0,8.8,8.9,8.9,12.2)

标签: rplot

解决方案


不知道我做对了......但curve()不能自己做那么多。您可以定义您的功能:

loglikelihood.func = function(x, mu) {
  length(x) * mu - sum(x) - sum(exp(mu)/(exp(x)))
}

然后定义一个范围(对于 x),您要在其上绘制它,并在第一个图上指定限制(xlim,ylim)。如果您不想有序列,则可以使用您的数据。

xrange <- seq(from=1, to=10, by = 0.1)
plot(x=xrange, y = sapply(xrange, function(x) loglikelihood.func(x, mu=0)), 
     xlim = c(1, 10), 
     ylim = c(-10, 0),
     type = "l")

然后添加其他曲线,指定不同的 mu:

lines(x=xrange, y = sapply(xrange, function(x) loglikelihood.func(x, mu=1)))
lines(x=xrange, y = sapply(xrange, function(x) loglikelihood.func(x, mu=2)))

(如果您不需要额外的图形参数,则使用循环更实用)


推荐阅读