使用np包从R中的二维概率密度函数得到的一维条件切片

时间:2011-02-15 13:14:41

标签: r probability

考虑rp的np-package中包含的示例, Vignettes for np package的第21页。 npcdens返回条件密度对象,并能够绘制2d-pdf和2d-cdf,如图所示。我想知道我是否可以以某种方式从对象中提取1-D信息(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 个答案:

答案 0 :(得分:2)

fhat对象包含所有需要的信息以及更多信息。要查看其中的所有内容,请执行str( fhat )查看结构。

我相信您感兴趣的值为xevalyevalcondens(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 :(得分:1)

JD Long建议的方法仅提取现有训练集中数据点的密度。如果你想要其他点的密度(条件或条件变量),你需要使用predict() 功能。以下代码提取并绘制了以年== 1999为条件的1-D密度分布,这是未包含在原始数据集中的值。

首先使用与意大利数据集相同的组件构建数据框,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)')