在 R 中添加两个内核密度对象?
Adding two kernel density objects in R?
假设我们有两个使用 density() 函数创建的对象。有没有办法添加这两个对象以获得另一个密度(或类似)对象?
例如:
A = rnorm(100)
B = rnorm(1000)
dA = density(A)
dB = density(B)
dC = density(c(A, B))
有没有办法从 dA 和 dB 对象中获取 dC 对象?一些和王操作?
来自 density
的 return 是包含以下部分的列表:
> 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
组成密度曲线,可以用plot(dA$x, dA$y)
绘制。您可能认为您需要做的就是从两个 density
对象中添加 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
值相加作为权重,您可以获得一些东西大约 density(c(A,B))
.
假设我们有两个使用 density() 函数创建的对象。有没有办法添加这两个对象以获得另一个密度(或类似)对象?
例如:
A = rnorm(100)
B = rnorm(1000)
dA = density(A)
dB = density(B)
dC = density(c(A, B))
有没有办法从 dA 和 dB 对象中获取 dC 对象?一些和王操作?
来自 density
的 return 是包含以下部分的列表:
> 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
组成密度曲线,可以用plot(dA$x, dA$y)
绘制。您可能认为您需要做的就是从两个 density
对象中添加 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
值相加作为权重,您可以获得一些东西大约 density(c(A,B))
.