在 R 中绘制多个变量函数
Posted
技术标签:
【中文标题】在 R 中绘制多个变量函数【英文标题】:Plotting multiple variable function in R 【发布时间】:2018-08-25 08:38:04 【问题描述】:我需要以下问题的帮助:
考虑以下名为 negloglike
的 R 函数,它有两个输入参数:lam
和 x
,按顺序排列。
使用此函数可以在 λ ∈ (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(.))
似乎没有任何区别,也没有交换x
和lam
的顺序
请注意,该函数对dexp
的所有值求和,因此它只会返回一个值。
是的,但绘制函数时通常不是这样吗?为每个 x 值绘制一个值?还是我误解了机械师的工作方式?例如negloglike(x = 1, lam = 0.2) = 1.809438
、negloglike(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))
nllv
和 nllv2
都给出了相同的图表。
【讨论】:
Rui 太棒了,非常感谢!这帮助了很多。在阅读了几篇文章后,我认为必须以某种形式或形式进行一些矢量化,但我不确定如何在这里应用它。 @ethy_32 抱歉,我在对数似然上犯了一个错误。查看新代码和图表。以上是关于在 R 中绘制多个变量函数的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用table1包绘制(生成)三线表使用单变量分列构建三线表编写自定义函数在三线表中添加p值