1-D условный срез из 2-D функции плотности вероятности в R с использованием пакета np - PullRequest
2 голосов
/ 15 февраля 2011

рассмотрим включенный пример в np-пакете для r, страница 21 виньетки для пакета np . npcdens возвращает объект условной плотности и может отображать 2d-pdf и 2d-cdf, как показано. Я хотел знать, могу ли я каким-то образом извлечь одномерную информацию (pdf / cdf) из объекта, если бы мне нужно было указать один из двух параметров, например, вектор или что-то в этом роде? Я новичок в R и не смог выяснить формат объекта. Спасибо за помощь. -Egon.

Вот запрашиваемый код:

require(np)
data("Italy")
attach(Italy)
bw <- npcdensbw(formula=gdp~ordered(year), tol=.1, ftol=.1)

fhat <- npcdens(bws=bw)
summary(fhat)

npplot(bws=bw)

npplot(bws=bw, cdf=TRUE)
detach(Italy)

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Объект fhat содержит всю необходимую информацию и многое другое. Чтобы увидеть, что там есть, сделайте str( fhat ), чтобы увидеть структуру.

Я думаю, что интересующие вас значения: xeval, yeval и condens (плотность PDF).

Есть много способов получить значения, но мне нравятся фреймы данных. Я вставил бы три вектора в один фрейм данных:

denDf <- cbind( year=as.character( fhat$xeval[,1] ), fhat$yeval, fhat$condens )
## had to do a dance around the year variable because it's a factor

тогда я бы выбрал нужные значения с помощью subset():

subset( denDf, year==1951 & gdp > 8 & gdp < 8.2)

, поскольку gdp является значением с плавающей запятой, его очень трудно выбрать с помощью оператора ==.

1 голос
/ 17 февраля 2011

Метод, предложенный JD Long, будет извлекать плотность только для точек данных в существующем обучающем наборе.Если вам нужна плотность в других точках (условные или условные переменные), вам нужно использовать функцию predict().Следующий код извлекает и строит одномерное распределение плотности, обусловленное годом == 1999, значением, которое не содержится в исходном наборе данных.

Сначала создайте фрейм данных с теми же компонентами, что и набор данных Италии,с регулярным интервалом gdp и с "1999" - упорядоченным множителем.

yr1999<- rep("1999", 100)
gdpVals <-seq(1,35, length.out=100)
nD1999 <- data.frame(year = ordered(yr1999), gdp = gdpVals)

Затем используйте функцию предсказания для извлечения плотностей.

gdpDens1999 <-predict(fhat,newdata = nD1999)

Следующий код строит график плотности.*

plot(gdpVals, gdpDens1999, type='l', col='red', xlab='gdp', ylab = 'p(gdp|yr = 1999)')
...