2014-06-25 24 views
0

我有三個變量(第三個是兩個物理值的相對頻率)。如何改善與akima的interp?

x <- rnorm(1398) 
y <- rnorm(1398) 
a1 <- rnorm(1398) 
data <- data.frame(x, y, a1) 

第一步是與akima,後者filled.contour。

fld <- with(data, interp(x,y,a1)) 
filled.contour(x=fld$x,y=fld$y,z=fld$z, 
    color.palette=colorRampPalette(c("white", "blue"))) 

這裏出現的問題是色標上的範圍是0.0008-0.0018。 但是當我檢查

> max(a1) 
[1] 0.004291845 
> min(a1) 
[1] 0.0007153076 

如何計算FLD充分代表的數據?

+1

我無法複製此內容。按預期將'range(a1)'作爲'-2.931849 3.077989'。從乾淨的R會話再試一次。 – Spacedman

+0

更具體地說,'set.seed(101);範圍(rnorm(1398))給出了-3.177210 3.178489,並且應該總是給出大約(-3,3)的值。否則'a1'正在以不同的方式產生,或'rnorm'被破壞(!) –

+0

是的,它是以其他方式產生的。 – MikiBV

回答

2

interp的文檔,關於xo論點:

輸出網格的x座標的矢量。 默認值是在x的範圍內均勻間隔的40點 。

所以在fld的X可能不包括相應的最大值或最小值A1值x值。

通過增加xoyo的點數,最大內插值將接近實際最大值。例如,

set.seed(100) 
x <- rnorm(1398) 
y <- rnorm(1398) 
a1 <- rnorm(1398) 
data <- data.frame(x, y, a1) 
fld <- with(data, interp(x,y,a1)) 
fld2 <- with(data, interp(x,y,a1, xo=seq(min(x), max(x), length=1000), yo=seq(min(y), max(y), length=1000))) 

max(a1, na.rm=TRUE) 
#[1] 2.949 
max(fld$z, na.rm=TRUE) 
#[1] 2.481 
max(fld2$z, na.rm=TRUE) 
#[1] 2.902 

此外,如果你想插Z到包括你的最大和最小A1,添加相應的x和y的值XO喲。例如,這是如何讓它包含a1的最大值。

max.a1.x <- x[which.max(a1)] 
max.a1.y <- y[which.max(a1)] 
# these have to be sorted, since filled.contour will expect them to be. 
xo <- sort(c(seq(min(x), max(x), length=40), max.a1.x)) 
yo <- sort(c(seq(min(y), max(y), length=40), max.a1.y)) 


fld3 <- with(data, interp(x,y,a1, xo=xo, yo=yo)) 
filled.contour(x=fld3$x,y=fld3$y,z=fld3$z, 
    color.palette=colorRampPalette(c("white", "blue"))) 

max(fld3$z, na.rm=TRUE) 
# [1] 2.949 
+0

雖然它永遠不會這麼糟糕。你試過了嗎? – Spacedman

+0

@Spacedman爲什麼不呢?是的,我試過了。 –

+0

在原始示例中,a1 < - rnorm(1398)'產生0.0007的「min(a1)」和0.0042的「max(a1)」。永遠不會發生。它將成爲幾個西格瑪。 OP做了一些我們看不到的錯誤。他說這是一個「相對頻率」,這讓我覺得它不是我們所得到的。 – Spacedman

0

我在pastbin中添加了原始數據。

http://pastebin.com/ydL0fhfD

我認爲這可能被理解爲data.frame。

關於這個問題,馬修建議更多的觀點,是的,我試過這個,但仍然只是稍微改善了結果。

> max(fld2$z, na.rm=TRUE) 
[1] 0.002222537 
> max(a1, na.rm=TRUE) 
[1] 0.004291845 
+0

此信息更適合作爲您帖子的附錄,而不是作爲答案。我已更新我的答案,向您展示如何強制interp輸出最大/最小a1值。 –

+0

謝謝,現在完美! – MikiBV