Добавление двух объектов плотности ядра в R? - PullRequest
0 голосов
/ 06 февраля 2019

Предположим, у нас есть два объекта, созданные с помощью функции density ().Есть ли способ добавить эти два объекта, чтобы получить объект другой плотности (или подобный)?

Например:

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

Есть ли способ получить объект постоянного тока из ЦА идБ объекты?Какой-нибудь король суммирования?

1 Ответ

0 голосов
/ 06 февраля 2019

Возвращением от 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)).

Компоненты x и y образуют кривую плотности, которую можно построить с помощью plot(dA$x, dA$y).Вы можете подумать, что все, что вам нужно сделать, это добавить y значения из двух density объектов, но нет гарантии, что они будут в одинаковых 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, в виде весов, вы можете получить что-то, что приблизительно density(c(A,B)).

...