r - 每个返回的密度值

标签 r kernel-density

我有一个像这样的数据框“foo”

Date       Return
1998-01-01  0.02
1998-01-02  0.04
1998-01-03 -0.02
1998-01-04 -0.01
1998-01-05  0.02
...
1998-02-01  0.1
1998-02-02 -0.2
1998-02-03 -0.1
etc.

我想在这个数据框中添加一个新列,显示相应返回的密度值。我试过了:
foo$density <- for(i in 1:length(foo$Return)) density(foo$Return, 
from = foo$Return[i], to = foo$Return[i], n = 1)$y

但它没有用。我真的很难将“函数”应用于每一行。但也许还有另一种方法可以做到,而不是使用密度()?

我本质上想做的是将密度()中的拟合密度值提取到 foo 中的返回值。如果我只是做 plot(density(foo$Return)) 它会给我曲线,但是我希望将密度值附加到返回上。

@乔里斯:
foo$density <- density(foo$Return, n=nrow(foo$Return))$y 

计算一些东西,但似乎返回错误的密度值。

谢谢你帮我解决!
达尼

最佳答案

转念一想,忘记密度函数,我突然意识到你想要做什么。大多数密度函数返回一个网格,所以不要给你精确点的评估。如果你想要,你可以使用 sm 包:

require(sm)
foo <- data.frame(Return=rpois(100,5))
foo$density <- sm.density(foo$Return,eval.points=foo$Return)$estimate
# the plot
id <- order(foo$Return)
hist(foo$Return,freq=F)
lines(foo$Return[id],foo$density[id],col="red")

如果不同值的数量不是很大,您可以使用 ave() :
foo$counts <- ave(foo$Return,foo$Return,FUN=length)

如果目的是绘制密度函数,则无需像您一样计算它。只需使用
plot(density(foo$Return))

或者,在下方添加直方图(注意选项 freq=F )
hist(foo$Return,freq=F)
lines(density(foo$Return),col="red")

关于r - 每个返回的密度值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4488888/

相关文章:

r - 用于在 R 中编写(通用)函数的参数和类

python - 使用高斯核密度 (Python) 计算值与平均值的差异

python - KDE 在处理大数据时非常慢

r - 在 R 中叠加 10 个密度图,颜色与重叠图的数量成正比

r - 在 ggplot2 的 stat_density2d 中指定密度的比例

r - 在 R 中选择输入更新?在两个相关的选项卡中选择输入

r - 如何在R中随机采样但保持某些值的位置相同

r - 在包中使用外部数据

r - 将列表转换为 R 中的 "two or more objects"参数

r - 具有多个组的 3D 密度图(回归线)