【问题标题】:kernel density estimator in RR中的核密度估计器
【发布时间】:2021-01-25 12:11:15
【问题描述】:

我正在使用以下数据中的最后一列, Data

我正在尝试将内核密度估计器的想法应用到这个数据集,它表示为

其中 k 是一些内核,通常是正态分布,但不一定。,h 是带宽,n 是数据集的长度,X_i 是每个数据点,x 是拟合值。所以使用这个等式我有以下代码,

AstroData=read.table(paste0("http://www.stat.cmu.edu/%7Elarry",
                   "/all-of-nonpar/=data/galaxy.dat"),
            header=FALSE)
x=AstroData$V3
xsorted=sort(x)
x_i=xsorted[1:1266]
hist(x_i, nclass=308)
n=length(x_i)
h1=.002
t=seq(min(x_i),max(x_i),0.01)
M=length(t)
fhat1=rep(0,M)
for (i in 1:M){
 fhat1[i]=sum(dnorm((t[i]-x_i)/h1))/(n*h1)}
lines(t, fhat1, lwd=2, col="red")

这会产生以下情节,

这实际上接近我想要的结果,因为一旦我删除直方图,最终结果应该显示为这样,

如果您注意到它的调整更精细,应该表示密度的红线相当粗糙,并且没有缩放得那么高。您看到的最终绘图是使用 R 中的密度函数运行的,

plot(density(x=y, bw=.002))

这是我想要达到的目标,而无需使用任何额外的包。

谢谢

【问题讨论】:

    标签: r non-linear-regression


    【解决方案1】:

    在与我的室友交谈后,他给了我一个想法,让我继续减少 t 值 (x) 的间隔。在做一些事情时,我将它从 0.01 更改为 0.001。所以这个情节的最终代码如下所示,

    AstroData=read.table(paste0("http://www.stat.cmu.edu/%7Elarry",
                   "/all-of-nonpar/=data/galaxy.dat"),
            header=FALSE)
    x=AstroData$V3
    xsorted=sort(x)
    x_i=xsorted[1:1266]
    hist(x_i, nclass=308)
    n=length(x_i)
    h1=.002
    t=seq(min(x_i),max(x_i),0.001)
    M=length(t)
    fhat1=rep(0,M)
    for (i in 1:M){
    fhat1[i]=sum(dnorm((t[i]-x_i)/h1))/(n*h1)}
    lines(t, fhat1, lwd=2, col="blue")
    

    这句话给出了以下情节,这是我想要的情节,

    【讨论】:

    • 你可以使用s = rowMeans(sapply(x_i, dnorm, x=t, sd=0.002)); plot(s, type="l")简化密度计算
    • 谢谢,我会看看使用该功能。
    猜你喜欢
    • 2021-01-21
    • 2021-05-01
    • 2019-02-13
    • 2016-12-10
    • 2015-11-14
    • 2013-01-11
    • 1970-01-01
    • 2011-10-30
    • 2014-03-17
    相关资源
    最近更新 更多