【问题标题】:Adding a normal curve on frequency histogram in R在R中的频率直方图上添加正态曲线
【发布时间】:2021-11-23 19:03:03
【问题描述】:

我决定完成我的统计课程,这些课程在 SPSS 中教授,但在 R 中进行,因为我想在那里学习做统计。我目前正在为两个数值连续变量data$alcohol(酒精滥用量表分数)和data$age 做直方图,但被第一个卡住了。

主要问题是:

  1. 我的直方图看起来与答卷中的图片不同
  2. 除非我将aes 更改为密度,否则我无法添加正态曲线,我不想这样做 做,因为练习要求频率

这是我写的:

data <- read_excel("~/Dropbox/My Mac (jmbp.local)/Desktop/Kings College London/2021:2022/Statistics/Week 1 stats/cleandata.xlsx")

mean_alc <- mean(data$alcohol)
sd_alc <- sd(data$alcohol) 

p <- ggplot(data= data) + 
  geom_histogram(mapping = aes(x = alcohol, y=..count..),
                 breaks=seq(0, 20, by=1), 
                 col="black", 
                 fill="white", 
                 alpha = 1) + 
  labs(title="Alcohol Misuse Score", x="Alcohol Misuse Score", y="Frequency") + 
  xlim(c(0,20)) + 
  ylim(c(0,20)) +
  stat_function(fun = dnorm, colour = "red", args=list(mean = mean(data$alcohol), sd = sd(data$alcohol))) +
  plot(density(data$alcohol, bw = 0.05))
p

我的直方图如下所示:

My histogram

解决方案中包含的图片(在 SPSS 中完成)如下所示:

Histogram in the answer sheet

我的第一个问题是为什么我的直方图中的条看起来与答卷中的条不同? SPSS如何做直方图和R如何做有一些根本的区别吗? 其次,有没有办法在ggplot 2中的频率直方图中添加一条正态曲线? 作为参考,这是如何在 SPSS 中完成的:

Frequency histogram with normal curve in SPSS

data$alcohol 具有以下值:

alcohol = c(15.78121, 17, 17.61943, 17.61943, 14.67395, 17.61943, 17, 17, 13.72413, 13.72664, 17, 15.86039, 17, 15.78121, 11.48049, 14.61672, 12.73437, 8, 17, 15.86039, 14.59133, 15.78121, 14.61672, 17, 17, 18, 15.78121, 10, 14.67395, 9, 7.033369, 17, 17, 15.86039, 15.78121, 18, 13.07577, 18, 8, 17.61943, 15.86039, 11.53364, 11.4323, 18, 6.390277, 17, 14.59133, 18, 14.9238, 15.78121, 14.61672, 17, 17.61943, 14.67395, 8, 18, 8, 17.61943, 14.4069, 6.477451, 7.02489, 18, 18, 13.09201, 15.78121, 14.59133, 18, 5.451102, 9, 4.801972, 15.86039, 15.86039, 17, 17, 17)

【问题讨论】:

  • 您能添加一些可重现的(见她:stackoverflow.com/questions/5963269/…)数据吗?也许您可以使用 dput(),例如运行 dput(data %>% select(alcohol)) 并将输入复制到此处:)
  • @ trinecosmusnobel c(15.78121,17,1711943,17.61943,17.61943,17,131943,17,1311943,17,13.7243,13.72664,17,15.86039,17,15.78121,11.48049,14.61672,12.73437,8,17, 15.86039,14.59133,15.78121,14.61672,17,17,18,15,15.78121,10,14.67395,9,7.03369,17,17,15.86039,15.78121,18,13.07577,18,8,17.61943,15.86039,1111943,15.86039,1111943,15.86039,1111943,11.86039,11.53364,11.4323,18, 6.390277,17,14,1114,41,14.9238,15.78121,14.61672,17,17.61943,14.67395,8,18,8,17.61943,14.4069,6.47451,7.02489,6.47751,7.02489,18,18,13.09201,18,13.09201,15.78121,14.59133,18,5.451102,9, 4.801972, 15.86039, 15.86039, 17, 17, 17)

标签: r statistics histogram


【解决方案1】:

this 线程中的答案启发,可能会对您有所帮助,顺便说一下,这是一种至少可以像 SPSS 中一样获得正态曲线的方法。这利用了答案之一提出的密度曲线的重新缩放:)。

我尝试在 SPSS 中加载数据并在那里制作直方图。我能看出区别。似乎围绕 SPSS 和 ggplot 如何组合垃圾箱?在 R 中,您可以使用 breaks 参数指定 bin 宽度。但是,在 SPSS 中未指定它,因此 SPSS 以另一种方式确定它。您也许可以阅读此here

但是,“问题”似乎与 ,0 值有关。例如,在 R 脚本中,18 实际上是用 17 的十进制值折叠的——即 18 和 17.61943 是折叠的,而 17 和 15.78121 和 15.86039 是折叠的。在 SPSS 中,17 折叠为 17.62。 IE。这是断点。

ggplot(data= data) + 
  geom_histogram(mapping = aes(x = alcohol),
                 breaks=seq(0, 20, by=1), 
                 col="black", 
                 fill="white", 
                 alpha = 1) + 
  labs(title="Alcohol Misuse Score", x="Alcohol Misuse Score", y="Frequency") + 
  xlim(c(0,20)) + 
  ylim(c(0,20)) +
  stat_function(fun = function(x) 
    dnorm(x, mean = mean(data$alcohol), sd = sd(data$alcohol)) * 0.5 * sum(!is.na(data$alcohol)), colour = "red")

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2016-01-10
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    相关资源
    最近更新 更多