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

发布于 2024-10-17 20:50:09 字数 535 浏览 1 评论 0原文

考虑 r 的 np-package 中包含的示例, np 包的小插图的第 21 页。 npcdens 返回一个条件密度对象,并且能够绘制 2d-pdf 和 2d-cdf,如图所示。我想知道如果我要指定两个参数之一(例如向量或其他参数),我是否可以以某种方式从对象中提取一维信息(pdf / cdf)?我是 R 新手,无法找出对象的格式。 感谢您的帮助。 -埃贡。

这是要求的代码:

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)

consider the included example in the np-package for r,
page 21 of the Vignettes for np package.
npcdens returns a conditional density object and is able to plot 2d-pdf and 2d-cdf, as shown. I wanted to know if I can somehow extract the 1-D information (pdf / cdf) from the object if I were to specify one of the two parameters, like in a vector or something ?? I am new to R and was not able to find out the format of the object.
Thanks for the help.
-Egon.

Here is the code as requested:

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挖鼻大婶 2024-10-24 20:50:09

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 是一个浮点值,因此很难使用 < code>== 运算符。

The fhat object contains all the needed info plus a whole lot more. To see what all is in there, do a str( fhat ) to see the structure.

I believe the values you are interested in are xeval, yeval, and condens (PDF density).

There are lots of ways to get at the values but I tend to like data frames. I'd pop the three vectors in a single data frame:

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

then I'd select the values I want with a subset():

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

since gdp is a floating point value it's very hard to select with a == operator.

梦情居士 2024-10-24 20:50:09

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)')

The method suggested by JD Long will only extract density for data points in the existing training set. If you want the density at other points (conditioning or conditional variables) you will need to use the predict()
function. The following code extracts and plots the 1-D density distribution conditioned on year ==1999, a value not contained in the original data set.

First construct a data frame with the same components as the Italy data set, with gdp regularly spaced and with "1999" an ordered factor.

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

Next use the predict function to extract the densities.

gdpDens1999 <-predict(fhat,newdata = nD1999)

The following code plots the density.

plot(gdpVals, gdpDens1999, type='l', col='red', xlab='gdp', ylab = 'p(gdp|yr = 1999)')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文