smooth.construct
位於 mgcv
包(package)。 說明
在公式處理過程中,GAM 公式中的平滑項將轉換為 xx.smooth.spec
類的平滑規範對象。使用適當的 smooth.construct
函數將每個對象轉換為平滑對象。可以通過編寫新的 smooth.construct
方法函數和相應的 Predict.matrix
方法函數來添加新的平滑類(請參見下麵的示例代碼)。
在實踐中,通常通過 smooth.construct2
和包裝函數 smoothCon
調用 smooth.construct
,以處理 by
變量和居中約束(如果需要直接處理這些事情,請參閱 smoothCon
文檔,了解更多信息)用戶定義的平滑類)。
用法
smooth.construct(object,data,knots)
smooth.construct2(object,data,knots)
參數
object |
是一個平滑規範對象,由 GAM 公式中的
如果
|
data |
對於 |
knots |
包含與 |
細節
對於具有以下類的對象有內置方法:tp.smooth.spec
(薄板回歸樣條:請參閱tprs
); ts.smooth.spec
(帶有shrinkage-to-zero的薄板回歸樣條); cr.smooth.spec
(三次回歸樣條:參見cubic.regression.spline
;cs.smooth.spec
(帶有shrinkage-to-zero的三次回歸樣條);cc.smooth.spec
(循環三次回歸樣條);ps.smooth.spec
(Eilers 和 Marx (1986) 樣式 P-splines :參見p.spline
);cp.smooth.spec
(循環P-splines);ad.smooth.spec
(1或2個變量的自適應平滑:參見adaptive.smooth
);re.smooth.spec
(簡單隨機效應項);mrf.smooth.spec
(馬爾可夫)用於平滑離散區域的隨機場平滑器);tensor.smooth.spec
(張量積平滑)。
有一個隱含的假設,即基礎僅取決於結和/或一組獨特的協變量組合;即,無論是從全套協變量生成,還是僅從協變量的獨特組合生成,基礎都是相同的。
平滑的繪製是通過平滑對象的繪圖方法來處理的。如果沒有更具體的方法可用,則使用默認的 mgcv.smooth
方法。可以為特定的平滑類添加繪圖方法,請參閱 mgcv:::plot.sos.smooth
、 mgcv:::plot.random.effect
、 mgcv:::plot.mgcv.smooth
的源代碼作為示例代碼。
值
輸入參數 object
分配了一個新類來指示它是什麽類型的平滑,並且至少添加了以下項目:
X |
這一項的模型矩陣。這可能具有 |
S |
適用於該術語的正半定罰矩陣列表。如果該術語保留un-penalized,則列表將為空。 |
rank |
給出處罰等級的數組。 |
null.space.dim |
罰零空間的維度(居中之前)。 |
可以添加以下項目:
C |
定義該術語的任何可識別性約束的矩陣,供擬合時使用。如果這是 |
Cp |
一個可選矩陣,提供預測時使用的替代可識別性約束。默認情況下使用擬合常數。當擬合需要某種簡單的稀疏約束,但預測需要通常的 sum-to-zero 約束時,此選項很有用,例如模型組件的 CI 盡可能窄。 |
no.rescale |
如果這是非 NULL,則平滑的懲罰係數矩陣將不會重新調整以增強數值穩定性(重新調整是默認值,因為 |
df |
與該術語相關的自由度(當不受懲罰且不受約束時)。如果為空,則 |
te.ok |
|
plot.me |
如果此平滑不應由 |
side.constrain |
設置為 |
L |
smooths 依賴的 ‘underlying’ 平滑參數可能比 |
通常,返回的對象還將包含定義基礎所需的額外信息,並由 Predict.matrix
方法用來使用基礎進行預測。請參閱 Details
部分,獲取內置平滑類所包含信息的鏈接。
tensor.smooth
返回的對象還將以相同的方式更新 margin
列表的每個元素。 tensor.smooths
還有一個列表 XP
,其中包含根據函數值重新參數化的任何一維邊際項的重新參數化矩陣。該列表將包含未重新參數化的邊平滑的 NULL
條目,並且長度僅足以到達列表中最後一個重新參數化的邊。
警告
用戶定義的平滑對象應避免使用屬性名稱 "qrc"
或 "nCons"
,因為這些屬性在內部使用以提供無約束參數化。
例子
## Adding a penalized truncated power basis class and methods
## as favoured by Ruppert, Wand and Carroll (2003)
## Semiparametric regression CUP. (No advantage to actually
## using this, since mgcv can happily handle non-identity
## penalties.)
smooth.construct.tr.smooth.spec<-function(object,data,knots) {
## a truncated power spline constructor method function
## object$p.order = null space dimension
m <- object$p.order[1]
if (is.na(m)) m <- 2 ## default
if (m<1) stop("silly m supplied")
if (object$bs.dim<0) object$bs.dim <- 10 ## default
nk<-object$bs.dim-m-1 ## number of knots
if (nk<=0) stop("k too small for m")
x <- data[[object$term]] ## the data
x.shift <- mean(x) # shift used to enhance stability
k <- knots[[object$term]] ## will be NULL if none supplied
if (is.null(k)) # space knots through data
{ n<-length(x)
k<-quantile(x[2:(n-1)],seq(0,1,length=nk+2))[2:(nk+1)]
}
if (length(k)!=nk) # right number of knots?
stop(paste("there should be ",nk," supplied knots"))
x <- x - x.shift # basis stabilizing shift
k <- k - x.shift # knots treated the same!
X<-matrix(0,length(x),object$bs.dim)
for (i in 1:(m+1)) X[,i] <- x^(i-1)
for (i in 1:nk) X[,i+m+1]<-(x-k[i])^m*as.numeric(x>k[i])
object$X<-X # the finished model matrix
if (!object$fixed) # create the penalty matrix
{ object$S[[1]]<-diag(c(rep(0,m+1),rep(1,nk)))
}
object$rank<-nk # penalty rank
object$null.space.dim <- m+1 # dim. of unpenalized space
## store "tr" specific stuff ...
object$knots<-k;object$m<-m;object$x.shift <- x.shift
object$df<-ncol(object$X) # maximum DoF (if unconstrained)
class(object)<-"tr.smooth" # Give object a class
object
}
Predict.matrix.tr.smooth<-function(object,data) {
## prediction method function for the `tr' smooth class
x <- data[[object$term]]
x <- x - object$x.shift # stabilizing shift
m <- object$m; # spline order (3=cubic)
k<-object$knots # knot locations
nk<-length(k) # number of knots
X<-matrix(0,length(x),object$bs.dim)
for (i in 1:(m+1)) X[,i] <- x^(i-1)
for (i in 1:nk) X[,i+m+1] <- (x-k[i])^m*as.numeric(x>k[i])
X # return the prediction matrix
}
# an example, using the new class....
require(mgcv)
set.seed(100)
dat <- gamSim(1,n=400,scale=2)
b<-gam(y~s(x0,bs="tr",m=2)+s(x1,bs="ps",m=c(1,3))+
s(x2,bs="tr",m=3)+s(x3,bs="tr",m=2),data=dat)
plot(b,pages=1)
b<-gamm(y~s(x0,bs="tr",m=2)+s(x1,bs="ps",m=c(1,3))+
s(x2,bs="tr",m=3)+s(x3,bs="tr",m=2),data=dat)
plot(b$gam,pages=1)
# another example using tensor products of the new class
dat <- gamSim(2,n=400,scale=.1)$data
b <- gam(y~te(x,z,bs=c("tr","tr"),m=c(2,2)),data=dat)
vis.gam(b)
作者
Simon N. Wood simon.wood@r-project.org
參考
Wood, S.N. (2003) Thin plate regression splines. J.R.Statist.Soc.B 65(1):95-114
Wood, S.N. (2006) Low rank scale invariant tensor product smooths for generalized additive mixed models. Biometrics 62(4):1025-1036
The code given in the example is based on the smooths advocated in:
Ruppert, D., M.P. Wand and R.J. Carroll (2003) Semiparametric Regression. Cambridge University Press.
However if you want p-splines, rather than splines with derivative based penalties, then the built in "ps" class is probably a marginally better bet. It's based on
Eilers, P.H.C. and B.D. Marx (1996) Flexible Smoothing with B-splines and Penalties. Statistical Science, 11(2):89-121
https://www.maths.ed.ac.uk/~swood34/
也可以看看
相關用法
- R smooth.construct.cr.smooth.spec GAM 中的懲罰三次回歸樣條
- R smooth.construct.bs.smooth.spec GAM 中的懲罰 B 樣條
- R smooth.construct.sz.smooth.spec GAM 中的約束因子平滑交互
- R smooth.construct.re.smooth.spec GAM 中的簡單隨機效應
- R smooth.construct.mrf.smooth.spec 馬爾可夫隨機場平滑
- R smooth.construct.gp.smooth.spec 低階高斯過程平滑
- R smooth.construct.tp.smooth.spec GAM 中的懲罰薄板回歸樣條
- R smooth.construct.ad.smooth.spec GAM 中的自適應平滑
- R smooth.construct.so.smooth.spec 皂膜平滑劑
- R smooth.construct.ds.smooth.spec 低階 Duchon 1977 樣條
- R smooth.construct.fs.smooth.spec GAM 中平滑交互的因子
- R smooth.construct.ps.smooth.spec GAM 中的 P 樣條
- R smooth.construct.sos.smooth.spec 球體上的樣條線
- R smooth.construct.tensor.smooth.spec 張量積平滑構造函數
- R smooth.construct.t2.smooth.spec 張量積平滑構造函數
- R smooth.info 提供有關平滑規範的額外信息的通用函數
- R smooth.terms GAM 中的平滑術語
- R smooth2random 將平滑轉換為適合估計隨機效應的形式
- R smoothCon GAM 平滑項的預測/構造包裝函數
- R scat 用於重尾數據的 GAM 縮放 t 係列
- R slanczos 計算對稱矩陣的截斷特征分解
- R single.index 具有 mgcv 的單指數模型
- R sp.vcov 從 (RE)ML GAM 擬合中提取平滑參數估計器協方差矩陣
- R shash Sinh-arcsinh 位置比例和形狀模型族
- R s 在 GAM 公式中定義平滑
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Constructor functions for smooth terms in a GAM。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。