在R Studio中绘制总和

时间:2018-05-20 04:55:53

标签: r plot

我试图使用曲线函数在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)

1 个答案:

答案 0 :(得分:0)

不确定我是否正确......但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)))

(如果你不需要额外的图形参数,更实际的做一个循环)