添加R中两个内核密度的对象?

问题描述 投票:0回答:1

假设我们有使用密度()函数创建了两个对象。有没有一种方法来添加这两个对象再弄密度(或类似)的对象?

例如:

A = rnorm(100)
B = rnorm(1000)
dA = density(A)
dB = density(B)
dC = density(c(A, B))

有没有办法让来自DA和DB对象DC对象?和操作的一些王?

r kernel-density
1个回答
2
投票

density的返回与这些部件列表:

> str(dA)
List of 7
 $ x        : num [1:512] -3.67 -3.66 -3.65 -3.64 -3.63 ...
 $ y        : num [1:512] 0.00209 0.00222 0.00237 0.00252 0.00268 ...
 $ bw       : num 0.536
 $ n        : int 4
 $ call     : language density.default(x = A)
 $ data.name: chr "A"
 $ has.na   : logi FALSE
 - attr(*, "class")= chr "density"

注意原始数据是不是在那里,所以我们不能拿到,只是这样做dAB = density(c(dA$data, dB$data))

xy部件形成密度,您可以用plot(dA$x, dA$y)绘制的曲线。你可能会认为你需要做的是从两个y对象添加density值,但不能保证他们会在同一x点。

因此,也许你认为你可以插一个相同的x点,然后添加y值。但是,这不会集成到1像一个适当的密度应该,所以你应该做的是根据点的每个组件密度分数规模dA$ydB$y - 你可以从dA$n组件获得。

如果你不明白,最后一点,考虑以下两个密度,一个从1000点和一个10:

dA = density(runif(1000))
dB = density(runif(500)+10)

第一个是在0和1之间的均匀,第二10和11两者的制服的高度为1,以及它们的范围不重叠,因此,如果它们加入你会得到相等的高度的两个步骤之间的均匀。但他们的工会密度:

dAB = density(c(runif(1000), runif(500)+10))

是具有0和1之间的两倍质量比10和11之间。当添加从样品取出密度你由样本大小需要重量的密度。

所以,如果你可以把它们插在同一x值,再总结根据y值的权重比例的n值,你可以得到的东西,会接近density(c(A,B))

© www.soinside.com 2019 - 2024. All rights reserved.