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

在R中添加两个内核密度对象?,r,kernel-density,R,Kernel Density,假设我们有两个使用density()函数创建的对象。有没有办法将这两个对象相加以获得另一个密度(或类似)对象 例如: A = rnorm(100) B = rnorm(1000) dA = density(A) dB = density(B) dC = density(c(A, B)) 有没有办法从dA和dB对象获取dC对象?一些求和运算之王?密度的返回是包含以下部分的列表: > str(dA) List of 7 $ x : num [1:512] -3.67 -3.6

假设我们有两个使用density()函数创建的对象。有没有办法将这两个对象相加以获得另一个密度(或类似)对象

例如:

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

有没有办法从dA和dB对象获取dC对象?一些求和运算之王?

密度的返回是包含以下部分的列表:

> 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))
的操作即可

x
y
组成密度曲线,可以使用
绘图(dA$x,dA$y)
进行绘图。您可能认为您需要做的就是添加两个
密度
对象的
y
值,但不能保证它们将位于相同的
x

因此,您可能认为可以将一个插值到相同的
x
点,然后添加
y
值。但这不会像一个适当的密度应该的那样积分为1,所以你应该做的是根据每个分量密度中的分数缩放
dA$y
dB$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
值进行缩放,您可以得到近似
密度(c(A,B))

的值
密度的返回值
是一个包含以下部分的列表:

> 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))
的操作即可

x
y
组成密度曲线,可以使用
绘图(dA$x,dA$y)
进行绘图。您可能认为您需要做的就是添加两个
密度
对象的
y
值,但不能保证它们将位于相同的
x

因此,您可能认为可以将一个插值到相同的
x
点,然后添加
y
值。但这不会像一个适当的密度应该的那样积分为1,所以你应该做的是根据每个分量密度中的分数缩放
dA$y
dB$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
值,然后将根据
n
值缩放的
y
值相加作为权重,您可以得到近似
密度(c(A,B))

这个密度是多少?混合物分布的密度?这个密度是多少?混合物分布的密度?