當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R smooth.construct.sos.smooth.spec 球體上的樣條線


R語言 smooth.construct.sos.smooth.spec 位於 mgcv 包(package)。

說明

gam 可以通過 s(la,lo,bs="sos",m=2,k=100) 等術語在球體上使用各向同性平滑。這樣的平滑必須恰好有 2 個參數。第一個為緯度(以度為單位),第二個為經度(以度為單位)。 m(默認為 0)是 -1 到 4 範圍內的整數,用於確定所使用的懲罰順序。對於 m>0(m+2)/2 是懲罰順序,而 m=2 相當於通常的二階導數懲罰。 m=0 表示在球體上使用二階樣條線,由 Wendelberger (1981) 方法計算。根據 Jean Duchon 未發表的建議,m = -1 導致使用 Duchon.spline(m=2 且 s=1/2)。

k(默認 50)是基本尺寸。

用法

## S3 method for class 'sos.smooth.spec'
smooth.construct(object, data, knots)
## S3 method for class 'sos.smooth'
Predict.matrix(object, data)

參數

object

平滑的規範對象,通常由術語 s(...,bs="sos",...) 生成。

data

僅包含該術語所需的數據(包括任何 by 變量)的列表,其名稱對應於 object$term (和 object$by )。 by 變量是最後一個元素。

knots

包含為基礎設置提供的任何結的列表 - 與 data 具有相同的順序和相同的名稱。可以是NULL

細節

對於 m>0 ,此處實現的平滑基於 Wahba (1981) 球體上的偽樣條(1982 年對表 1 進行了更正,但該更正在 A 的定義中存在印刷錯誤 — 中給出的 A 1981 年的論文是正確的)。對於m=0(默認),則使用球體上的二階樣條,它類似於二維中的二階薄板樣條:計算基於 Wendelberger,1981 年的第 4 章。最佳低階近似通過以下方式獲得正是 Wood (2003) 中給出的方法。對於 m = -1,使用 Duchon (1977) 中討論的一般類型的平滑:球體嵌入 3D 歐幾裏得空間中,但平滑采用基於二階導數的懲罰(因此,當平滑參數局部趨於零時,我們恢複切線空間上的 "normal" 薄板樣條線)。這是 Jean Duchon 未發表的建議。 m = -2 相同,但具有一階導數懲罰。

請注意,無論懲罰的階數如何,懲罰的零空間始終是球體上常數函數的空間。

這個類有一個plot方法,有3種方案。 scheme==0 繪製球體的一個半球,投影到一個圓上。繪圖球體的北極位於頂部,0 度子午線沿著繪圖的中間延伸並朝向觀察者。通過在觀察球體坐標中指定其極點位置,平滑球體在繪圖球體內旋轉。 thetaphi 給出繪圖球內平滑球極點的經度和緯度(在繪圖球坐標中)。 (您可以將平滑球體可視化為一個球體,在固定的透明繪圖球體內自由旋轉。)平滑值由覆蓋有等高線圖的熱圖顯示。還繪製了緯度、經度網格線。

scheme==1scheme==0 相同,但為黑白,沒有圖像圖。 scheme>1 調用默認繪圖方法,scheme 減 2。

"sos.smooth" 的對象。除了 smooth.construct 下記錄的平滑類的常見元素之外,該對象還將包含:

Xu

此平滑的唯一協變量組合的矩陣(通過首先刪除重複位置來構建基礎)。

UZ

將降階樣條的參數映射回完整樣條的參數的矩陣。

例子

require(mgcv)
set.seed(0)
n <- 400

f <- function(la,lo) { ## a test function...
  sin(lo)*cos(la-.3)
}

## generate with uniform density on sphere...  
lo <- runif(n)*2*pi-pi ## longitude
la <- runif(3*n)*pi-pi/2
ind <- runif(3*n)<=cos(la)
la <- la[ind];
la <- la[1:n]

ff <- f(la,lo)
y <- ff + rnorm(n)*.2 ## test data

## generate data for plotting truth...
lam <- seq(-pi/2,pi/2,length=30)
lom <- seq(-pi,pi,length=60)
gr <- expand.grid(la=lam,lo=lom)
fz <- f(gr$la,gr$lo)
zm <- matrix(fz,30,60)

require(mgcv)
dat <- data.frame(la = la *180/pi,lo = lo *180/pi,y=y)

## fit spline on sphere model...
bp <- gam(y~s(la,lo,bs="sos",k=60),data=dat)

## pure knot based alternative...
ind <- sample(1:n,100)
bk <- gam(y~s(la,lo,bs="sos",k=60),
      knots=list(la=dat$la[ind],lo=dat$lo[ind]),data=dat)

b <- bp

cor(fitted(b),ff)

## plot results and truth...

pd <- data.frame(la=gr$la*180/pi,lo=gr$lo*180/pi)
fv <- matrix(predict(b,pd),30,60)

par(mfrow=c(2,2),mar=c(4,4,1,1))
contour(lom,lam,t(zm))
contour(lom,lam,t(fv))
plot(bp,rug=FALSE)
plot(bp,scheme=1,theta=-30,phi=20,pch=19,cex=.5)

作者

Simon Wood simon.wood@r-project.org, with help from Grace Wahba (m=0 case) and Jean Duchon (m = -1 case).

參考

Wahba, G. (1981) Spline interpolation and smoothing on the sphere. SIAM J. Sci. Stat. Comput. 2(1):5-16

Wahba, G. (1982) Erratum. SIAM J. Sci. Stat. Comput. 3(3):385-386.

Wendelberger, J. (1981) PhD Thesis, University of Winsconsin.

Wood, S.N. (2003) Thin plate regression splines. J.R.Statist.Soc.B 65(1):95-114

也可以看看

Duchon.spline

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Splines on the sphere。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。