在R中绘制密度柯西分布

时间:2016-01-17 12:51:37

标签: r

只是好奇你怎么能从维基百科生成dcauchy发行版:

image

通常,你有

dcauchy(x, location = 0, scale = 1, log = FALSE) 

对于一个线密度p(x)v.s x

我假设为了从wiki生成图表,data.frame涉及到?

cauchy_dist <- data.frame(cauchy1 = rcauchy(10, location = 0, scale = 1, log = FALSE), cauchy2 = ....... , cauchy3 = ..... ) 

或者您只需要

plot(x, P(x))

然后添加线条?

2 个答案:

答案 0 :(得分:7)

您可以使用ggplot2的stat_function

ggplot(data.frame(x = c(-5, 5)), aes(x)) +
  stat_function(fun = dcauchy, n = 1e3, args = list(location = 0, scale = 0.5), aes(color = "a"), size = 2) +
  stat_function(fun = dcauchy, n = 1e3, args = list(location = 0, scale = 1), aes(color = "b"), size = 2) +
  stat_function(fun = dcauchy, n = 1e3, args = list(location = 0, scale = 2), aes(color = "c"), size = 2) +
  stat_function(fun = dcauchy, n = 1e3, args = list(location = -2, scale = 1), aes(color = "d"), size = 2) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_color_discrete(name = "",
                       labels = c("a" = expression(x[0] == 0*","~ gamma == 0.5),
                                  "b" = expression(x[0] == 0*","~ gamma == 1),
                                  "c" = expression(x[0] == 0*","~ gamma == 2),
                                  "d" = expression(x[0] == -2*","~ gamma == 1))) +
  ylab("P(x)") +
  theme_bw(base_size = 24) +
  theme(legend.position = c(0.8, 0.8),
        legend.text.align = 0)

resulting plot

答案 1 :(得分:2)

您可以按如下方式创建数据:

location <- c(0, 0, 0, -2)
scale <- c(0.5, 1, 2, 1)
x <- seq(-5, 5, by = 0.1)
cauchy_data <- Map(function(l, s) dcauchy(x, l, s), location, scale)
names(cauchy_data) <- paste0("cauchy", seq_along(location))
cauchy_tab <- data.frame(x = x, cauchy_data)
head(cauchy_tab)
##      x     cauchy1    cauchy2    cauchy3    cauchy4
## 1 -5.0 0.006303166 0.01224269 0.02195241 0.03183099
## 2 -4.9 0.006560385 0.01272730 0.02272830 0.03382677
## 3 -4.8 0.006833617 0.01324084 0.02354363 0.03600791
## 4 -4.7 0.007124214 0.01378562 0.02440091 0.03839685
## 5 -4.6 0.007433673 0.01436416 0.02530285 0.04101932
## 6 -4.5 0.007763656 0.01497929 0.02625236 0.04390481

Map用于将多个变量的函数逐个元素地应用于尽可能多的向量。因此,cauchy_data的第一个列表元素将包含以下

dcauchy(x, location[1], scale[1])

等等。然后,我将Cauchy数据与x坐标向量x一起放在数据框中。所以你有了所需的数据表。

当然,有很多方法可以用来绘制这个。我更喜欢使用ggplot并向您展示如何绘制示例:

库(tidyr)

library(ggplot2)
curve_labs <- paste(paste("x0 = ", location), paste("gamma = ", scale), sep = ", ")
plot_data <- gather(cauchy_tab, key = curve, value = "P", -x )
ggplot(plot_data, aes(x = x, y = P, colour = curve)) + geom_line() +
   scale_colour_discrete(labels = curve_labs)

enter image description here

您可以通过多种方式调整情节,以获得与维基百科的情节更为相似的内容。