在R中添加两个内核密度对象?
假设我们有两个使用density()函数创建的对象。有没有办法将这两个对象相加以获得另一个密度(或类似)对象 例如:在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
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))
这个密度是多少?混合物分布的密度?这个密度是多少?混合物分布的密度?