在 R 中绘制多个变量函数

Posted

技术标签:

【中文标题】在 R 中绘制多个变量函数【英文标题】:Plotting multiple variable function in R 【发布时间】:2018-08-25 08:38:04 【问题描述】:

我需要以下问题的帮助:

考虑以下名为 negloglike 的 R 函数,它有两个输入参数:lamx,按顺序排列。 使用此函数可以在 λ ∈ (0, 2) 的值范围内生成对数似然函数图。

negloglike <- function(lam, x) 
  l = -sum(log(dexp(x, lam)))
  return(l)

有人可以帮忙吗?可以用ggplot做这样的事情吗?我一直在尝试使用stat_function 设置lam 的值(例如这里的0.2):

ggplot(data = data.frame(x = 0), mapping = aes(x = x)) +
  stat_function(fun = negloglike, args = list(lam = 0.2)) +
  xlim(0,10)

但plot 总是在某个 y 值处返回一条水平线,而不是返回一条曲线。

我应该使用不同的几何图形吗?甚至完全不同的包?

非常感谢!

【问题讨论】:

您应该编辑问题并发布您使用的代码。知道你在做什么是了解它有什么问题的第一步。提示:我将首先交换参数的顺序,x 首先。 另外,它是-log(sum(.)) 感谢您的建议!我已经在我的代码中添加了这个问题。 negloglike 函数在我使用它来计算值时可以正常工作,但是stat_function 生成的图形却不能正常工作(无论如何我都是这样做的)。将其更改为-log(sum(.)) 似乎没有任何区别,也没有交换xlam 的顺序 请注意,该函数对dexp 的所有值求和,因此它只会返回一个值。 是的,但绘制函数时通常不是这样吗?为每个 x 值绘制一个值?还是我误解了机械师的工作方式?例如negloglike(x = 1, lam = 0.2) = 1.809438negloglike(x = 2, lam = 0.2) = 2.009438 等等? 【参考方案1】:

诀窍是Vectorize 函数覆盖感兴趣的参数。 感谢您的提示,请转到this question 的投票最多的答案。它仅使用基本图形,因此这里有一个 ggplot2 等价物。 首先我将使用函数dexp定义负对数似然

library(ggplot2)

negloglike <- function(lam, x) negloglike <- function(lam, x) 
    l = -sum(dexp(x, lam, log = TRUE))
    return(l)

nllv <- Vectorize(negloglike, "lam")

但最好使用解析式,易于手工建立。

negloglike2 <- function(lam, x) 
    l = lam*sum(x) - length(x)*log(lam)
    return(l)


nllv2 <- Vectorize(negloglike2, "lam")

ggplot(data = data.frame(lam = seq(0, 2, by = 0.2)), mapping = aes(x = lam)) +
  stat_function(fun = nllv2, args = list(x = 0:10))

nllvnllv2 都给出了相同的图表。

【讨论】:

Rui 太棒了,非常感谢!这帮助了很多。在阅读了几篇文章后,我认为必须以某种形式或形式进行一些矢量化,但我不确定如何在这里应用它。 @ethy_32 抱歉,我在对数似然上犯了一个错误。查看新代码和图表。

以上是关于在 R 中绘制多个变量函数的主要内容,如果未能解决你的问题,请参考以下文章

绘制趋势线和ggplot中多个变量的方程式

R语言使用table1包绘制(生成)三线表使用单变量分列构建三线表编写自定义函数在三线表中添加p值

如何在 Pandas 中绘制和标记多个自相关函数?

【R语言】--- ggplot2绘制折线图

R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(输出多个分组)实战

R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(输出多个分组自定义颜色配置)实战