R中是否有Kde2d函数的python等效函数,它以x,y和z的形式返回相同的输出?

问题描述

在相同的示例数据上使用这两个等效函数时,我从R和Python中获得了不同的输出。我也在python中单独计算带宽,以确保其与R相同。 有人可以帮忙吗..

在python中运行R来比较输出



import numpy as np
from scipy.stats import gaussian_kde
from rpy2.robjects import r
from rpy2.robjects.packages import importr
import pandas as pd
import math

def R2DKDE():
    importr('MASS')
    r.assign('nelems',nelems)
    r.assign('maxX',1)
    r.assign('maxY',1)
    #r.assign('nruns',nruns)

    r("""
    
      #datax <- runif(nelems,1)
      #print(datax)
      datax = c(0.20,0.40,0.45,0.50,0.50)
      dataY = c(0.90,0.60,0.89,0.70,0.88)
      #dataY <- runif(nelems,1)
      kde2dmap <- kde2d(datax,dataY,n=5,lims=c(0,1,1))
      #print(kde2dmap$z[1,])
      #print(sum(kde2dmap$z[1,]))
    """)
    
    vals = np.array(list(r('kde2dmap$z')))
    #print(sum(vals))
    return r('kde2dmap')

#nelems = 5
print("Running R")
vals = R2DKDE()
print(vals)


这是python,函数(p)用于计算带宽:



def function(p):
        xx = p.values.flatten()
        #r = quantile(x,[0.25,0.75])
        r1 = np.quantile(xx,0.25)
        r2 = np.quantile(xx,0.75)
        r=[r1,r2]
         
        h = (r[1] - r[0])/1.34
        return(4 * 1.06 * min(math.sqrt(np.var(xx)),h) * len(xx)**(-1/5))


def py2DKDE( ):
    xmin,ymin,xmax,ymax = 0.,0.,1.,1.
    xx = np.array([0.20,0.50])
    yy = np.array([0.90,0.88])
    
    positions = np.vstack([xx,yy])
    
    c = None
    
    c = pd.DataFrame(xx,yy)
    c = c.reset_index()
    bandwidth = function(c)
    kde = gaussian_kde(c.T,bw_method=bandwidth)
    vals = kde.evaluate(positions)
    #print("sum",sum(vals))
    return vals




print("Running Python")
vals = py2DKDE()
print(vals)

输出

Running R
$x
[1] 0.00 0.25 0.50 0.75 1.00

$y
[1] 0.00 0.25 0.50 0.75 1.00

$z
             [,1]         [,2]         [,3]         [,4]         [,5]
[1,] 1.173263e-17 5.254988e-11 8.200866e-06 4.329905e-03 7.655782e-03
[2,] 1.287456e-08 6.493505e-04 1.121958e-01 1.366880e+00 2.304749e+00
[3,] 8.724703e-08 4.865638e-03 1.600830e+00 9.082211e+00 4.925686e+00
[4,] 8.138891e-14 3.871074e-08 6.419998e-05 5.365424e-04 2.143860e-04
[5,] 3.213046e-26 1.583899e-20 2.636431e-17 2.194545e-16 8.669376e-17


Running Python

[2.45999350e-11 3.46916474e-02 1.38037056e-06 3.04028839e-02
 6.69103632e-06]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)