2017-11-25 219 views
0

從R文檔中的以下代碼link我想弄清楚如何爲數據的每個原始點提取單個值(「密度」) frame 這樣,我就可以使用新的列來進一步應用,這些應用程序在3D空間中具有「點」密度。估計並提取來自3D內核密度的點值R

我看着這個SO問題:link,但該代碼給出了一個51層矩陣..我堅持如何獲得150點值。

在我的情況下,我擔心的是使用三變量例如:

fhat <- kde(x=iris[,1:3]) 

這是代碼,它給出了一個很好的情節,但我沒能得到一個單一的價值爲每個150行/分的虹膜數據集

library(ks) 
library(MASS) 
data(iris) 

## univariate example 
fhat <- kde(x=iris[,2]) 
plot(fhat, cont=50, col.cont="blue", cont.lwd=2, xlab="Sepal length") 

## bivariate example 
fhat <- kde(x=iris[,2:3]) 
plot(fhat, display="filled.contour2", cont=seq(10,90,by=10)) 
plot(fhat, display="persp", thin=3, border=1, col="white") 

## trivariate example 
fhat <- kde(x=iris[,2:4]) 
plot(fhat, drawpoints=TRUE) 
+0

謝謝,糾正錯誤! – Mark

+0

'ks'軟件包有一些私人方法來生成圖。因此,它們中的代碼顯示瞭如何獲得繪圖值。您可以在R控制檯中輸入'ks ::: plotkde.1d'(和'.2d'和'3d'變體)來查看這些功能。你也可以用str(fhat)來查看結果計算的數據。看看有沒有人會回答路徑。如果他們不這樣做或者他們混淆不清,那麼在代碼中添加令人困惑/不足的目標代碼就可以確定一條富有成效的路徑。 – hrbrmstr

+0

我想要做的是使用每點密度值來設置scatter3d中繪製點的顏色(可能通過在有限數量的密度類別中合併值),以便點雲例如可以被着色爲淺紅色基於denisty非常暗紅色。 Plotly沒有辦法在這些圖中自己做這件事,所以我有一個繞過的想法,但是需要首先有一個密度值列。 我看了你已經提到的代碼,但無法理解它 – Mark

回答

2

我假設你從ks包指的是kde()

如果是這樣,使用的引eval.points來計算密度用於使用所述估計的點的向量/矩陣:類似地對於較高輸入維

## univariate example 

library(ks) 

fhat <- kde(x = iris[,2]) 
plot(fhat, cont=50, col.cont="blue", cont.lwd=2, xlab="Sepal length") 

estimate <- kde(iris[,2], eval.points = iris[,2])$estimate 
points(iris[,2], estimate) 

enter image description here

作品。

+0

我需要它的3d版本,但測試它,是的它的工作原理!我沒有意識到這可以輕鬆完成。 kde(iris [,1:3],eval.points = iris [,1:3])$估計 謝謝M.A. – Mark

+0

現在唯一的發現是kde非常慢。 40.000點需要1112.87秒。如果有人閱讀這篇文章,就會知道更快的軟件包可以隨時發表評論 – Mark