当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。