解释密度标度geom_density

如何解决解释密度标度geom_density

我对如何计算geom_density的值有疑问: 这是重现我的结果的代码:

    a <- structure(c(1.94603297055443,NA,0.543010708224088,-0.694950111479158,1.12072575741894,0.955664314791837,-1.76784948855531,1.20325647873249,-1.43772660330111,1.03819503610539,0.0478263803427896,1.78097152792733,-0.28229650491141,-1.27266516067401,0.873133593478287,-1.52025732461466,0.625541429537638,-2.51062598037725,0.130357101656339,0.295418544283439,-0.612419390165609,-1.02507299673336,-0.364827226224959,-2.01544165249595,0.460479986910538,1.94603297055443,-0.777480832792708,-0.860011554106258,0.212887822969889,0.790602872164737,-0.447357947538509,1.36831792135959,-0.19976578359786,-0.942542275419808,-1.19013443936046,1.86350224924088,-0.529888668852059,-1.85038020986886,-0.0347043409707605,-1.35519588198756,-0.11723506228431,0.708072150851187,0.377949265596989,-1.93291093118241,1.53337936398669,-2.4280952590637,-1.60278804592821,1.45084864267314,-1.68531876724176,1.69844080661379,-2.0979723738095,-2.2630338164366,-2.34556453775015,-1.10760371804691,1.28578720004604,1.61591008530023,NA),.Dim = c(614L,1L
    ))
    a= data.frame(a=a)
    ggplot(a,aes(x=a)) + 
      geom_density()

enter image description here

但是,当我计算比例时,我的值要小得多

    table(a$a) %>% data.frame() %>%  mutate(freq= Freq/459)%>% arrange(desc(freq))

那到底是什么绘制成密度?

解决方法

这只是注释中提到的内容,以使其在视觉上稍微显示出来。

就像直方图具有bin宽度一样,KDE也具有带宽。对于默认的高斯核,这是法线密度函数的标准偏差参数。

library(ggplot2)

# Pick some data
data <- faithful$eruptions

bandwidth <- 0.5

# Get data range
range <- range(data)

# Setup a sequence of x-coordinates
x_coord <- seq(range[1] - bandwidth,range[2] + bandwidth,length.out = 512)

现在,我们可以为每个数据点计算正常密度函数,其中mu是数据点值,标准偏差是带宽。我在下面所做的只是为每个数据点计算这些钟形曲线。

# Calculate individual densities
indi_dens <- vapply(data,function(mu) {
  dnorm(x_coord,mu,sd = bandwidth)
},x_coord)

# Plot individual densities
indi_data <- reshape2::melt(indi_dens)
indi_data$Var1 <- x_coord[indi_data$Var1]

ggplot(indi_data) +
  geom_line(aes(Var1,value,group = Var2))

下一步是简单地汇总每个x坐标的所有密度。我们将其除以观察次数,以使所得KDE的面积等于1。

我将以蓝色显示我们计算出的密度,并以红色显示相同数据的geom_density()

# Sum density for every x-coordinate
summed_dens <- rowSums(indi_dens)
# Make it integrate to 1 by dividing by the number of observations
summed_dens <- summed_dens / length(data)

# Prepare plotting data
plotdata <- data.frame(
  x = x_coord,y = summed_dens
)

ggplot(plotdata) +
  geom_line(aes(x,y),colour = "blue",size = 2) +
  # Overlay density calculated by geom_density() for the same data
  geom_density(data = faithful,aes(x = eruptions),bw = bandwidth,color = "red",linetype = 2,size = 2)

您可以看到它们非常接近。为了进一步详细说明,由于KDE积分为1,这意味着曲线下的总面积必须为1,所以对于较大范围的数据,密度将较低,而对于较小范围的数据,密度将较高。这不仅适用于KDE,而且几乎适用于任何密度。例如,将sd = 1sd = 5与正态分布的正态密度曲线进行比较,后者比前者的范围更大。

ggplot() +
  geom_function(fun = dnorm,args = list(sd = 1),colour = "blue") +
  geom_function(fun = dnorm,args = list(sd = 5),colour = 'red') +
  scale_x_continuous(limits = c(-10,10)) +
  scale_y_continuous(name = "density")

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-