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


R te 在 GAM 公式中定義張量積平滑或張量積交互


R語言 te 位於 mgcv 包(package)。

說明

用於定義張量積平滑和 gam 模型公式中的交互的函數。 te 生成完整的張量積平滑,而 ti 生成張量積交互,適用於還存在主效應(以及任何較低的交互)的情況。

這些函數不評估平滑度 - 它們的存在純粹是為了幫助使用基於張量積的平滑度建立模型。旨在從具有 basis-penalty 表示的任何邊平滑構造張量積(限製是每個邊平滑必須隻有一個懲罰)。

用法

te(..., k=NA,bs="cr",m=NA,d=NA,by=NA,fx=FALSE,
              np=TRUE,xt=NULL,id=NULL,sp=NULL,pc=NULL)
ti(..., k=NA,bs="cr",m=NA,d=NA,by=NA,fx=FALSE,
              np=TRUE,xt=NULL,id=NULL,sp=NULL,mc=NULL,pc=NULL)

參數

...

變量列表,這些變量是該平滑函數的協變量。此處最好避免形式取決於數據值的轉換:例如te(log(x),z) 可以,但 te(I(x/sd(x)),z) 不行(請參閱 predict.gam )。

k

用於表示平滑項的基數維度。如果未提供,則設置為 5^d 。如果作為單個數字提供,則該基本尺寸將用於每個基礎。如果作為數組提供,則元素是張量積的分量(邊)基的維度。有關更多信息,請參閱choose.k

bs

數組(或單個字符串)指定每個邊際基礎的類型。 "cr" 用於三次回歸樣條; "cs" 用於具有收縮的三次回歸樣條; "cc" 用於周期性/循環三次回歸樣條; "tp" 用於薄板回歸樣條; "ts" 用於 t.p.r.s.具有額外的收縮。有關詳細信息和完整列表,請參閱smooth.terms。此處也可以使用用戶定義的基數(有關示例,請參閱smooth.construct)。如果僅給出一個堿基代碼,則該代碼將用於所有堿基。

m

每個項的樣條階數及其懲罰(對於使用它的平滑類)。如果給出一個數字,則它用於所有術語。向量可用於為每個邊距提供不同的m。對於采用向量 m 的邊距(例如 p.splineDuchon.spline ),則可以提供一個列表,其中每個邊距有一個向量元素。 NA 自動初始化。 m 被某些堿基忽略(例如 "cr" )。

d

邊際基礎維度數組。例如,如果您想要由 2 維 t.p.r.s. 的張量積組成的 3 個協變量的平滑。基和一維基,然後設置 d=c(2,1) 。內置基礎類型和尺寸之間的不兼容性將通過重置基礎類型來解決。

by

與每個協變量具有相同維度的數值或因子變量。在數值向量的情況下,元素乘以相應協變量值評估的平滑度(“變化係數模型”結果)。在因子情況下,會為每個因子級別生成平滑的副本。有關更多詳細信息,請參閱gam.models。如果協變量是矩陣,也可能是矩陣:在這種情況下實現平滑的線性函數(有關詳細信息,請參閱gam.modelslinear.functional.terms)。

fx

指示該項是否是固定 d.f。回歸樣條線 ( TRUE ) 或懲罰回歸樣條線 ( FALSE )。

np

TRUE 使用“正常參數化”來平滑張量積。這表示通過參數進行任何一維邊平滑,這些參數是‘knots’處的函數值,均勻分布在數據中。參數化使懲罰易於解釋,但在某些情況下會降低數值穩定性。

xt

或者是單個對象,提供要傳遞給每個邊際基礎構造函數的任何額外信息,或者是此類對象的列表,每個對象對應一個邊際基礎。

id

標識該術語的標簽或整數,以便將其平滑參數鏈接到相同類型的其他參數。如果兩個或多個平滑項具有相同的 id,那麽它們將具有相同的平滑參數,並且默認情況下具有相同的基數(第一次出現定義基本類型,但來自基礎構造中使用的所有術語的數據)。

sp

為此項提供的任何平滑參數。必須是與此平滑的懲罰數長度相同的數組。正或零元素被視為固定平滑參數。負元素表示自動初始化。將 sp 參數中提供的值覆蓋為 gam 。被 gamm 忽略。

mc

對於 ti 平滑,您可以通過為此向量中的每個邊際提供 0/1 或 FALSE /TRUE 值來指定哪些邊際應應用居中約束。默認情況下,所有邊際均受到約束,這適用於函數方差分析模型等。請注意,'ti' 僅對邊際約束應用約束,因此如果關閉所有邊際約束,則該術語將沒有可識別性約束。僅當您真正了解邊際約束如何工作時才使用此方法。

pc

如果不是 NULL ,則表示點約束:平滑應在此處給出的點處通過零(作為名稱與平滑名稱相對應的向量或列表)。如果提供,切勿忽略。請參閱identifiability

細節

多個協變量的平滑可以根據用於表示一個(或有時多個)協變量的平滑的基數的張量積來構造。為此,使用關聯的模型矩陣和懲罰矩陣生成 ‘marginal’ 基數,然後將它們以 tensor.prod.model.matrixtensor.prod.penalties 中說明的方式組合,以生成用於平滑但多個懲罰的單個模型矩陣(一個對於每個邊際基礎)。整個平滑的基本尺寸是邊平滑的基本尺寸的乘積。

張量積平滑對於表示以不同單位測量的協變量的函數特別有用,盡管它們通常不如 t.p.r.s. 表現得那麽好。平滑縮放良好的協變量。

例如,研究具有 main-effects + 交互結構的平滑模型有時很有用

這種函數方差分析由 ti 項支持,這些項產生張量積相互作用,其中主效應已被排除,假設它們將被單獨包含在內。例如~ ti(x) + ti(z) + ti(x,z)將產生上述主效應+交互結構。這比嘗試使用代表交互作用的 ste 術語進行相同的操作要好得多(盡管 mgcv 並不禁止這樣做)。從技術上講,ti 術語非常簡單:它們隻是從已應用了可識別性約束(通常是sum-to-zero)的邊際平滑構造張量積基:然後自動正確嵌套(與 GLM 框架中的所有交互一樣)。參見 Wood(2017 年,第 5.6.3 節)。

“正常參數化”(np=TRUE)重新參數化張量積平滑的邊際平滑,以便參數是均勻分布在平滑協變量值範圍內的一組點處的函數值。這意味著與任何特定協變量方向相關的張量積的懲罰可以解釋為在該方向上應用的適當邊平滑的懲罰並在平滑上進行平均。目前,這僅適用於單個變量的邊際。當與 "cc""cr""cs" 之外的邊平滑一起使用時,此參數化會降低數值穩定性:如果這會導致問題,請設置 np=FALSE

請注意,如果任何邊際不需要居中,則張量積平滑不應居中(施加可識別性約束)。張量積平滑的構造函數確保了這種情況的發生。

該函數不計算變量參數。

tensor.smooth.spec 對象,定義張量積,平滑地由 smooth.construct.tensor.smooth.spec 函數轉換為基礎和懲罰。

返回的對象包含以下項目:

margin

s 返回類型的 smooth.spec 對象列表,定義構造張量積 smooth 的基礎。

term

文本字符串數組,給出該項作為函數的協變量的名稱。

by

是任何 by 文本變量的名稱("NA" 沒有)。

fx

邏輯數組,其中包含該項的每個懲罰的元素(張量積平滑有多個懲罰)。 TRUE 如果要忽略懲罰,則 FALSE ,否則。

label

適合這個平滑術語的文本標簽。

dim

平滑器的維度 - 即它作為函數的協變量的數量。

mp

TRUE 是要使用的多重懲罰(默認)。

np

TRUE 根據函數值重新參數化一維邊平滑(默認)。

id

提供給 teid 參數。

sp

提供給 tesp 參數。

inter

TRUE 如果該術語是由 ti 生成的,則為 FALSE 生成的。

mc

提供給 ti 的參數 mc

例子


# following shows how tensor pruduct deals nicely with 
# badly scaled covariates (range of x 5% of range of z )
require(mgcv)
test1 <- function(x,z,sx=0.3,sz=0.4) { 
  x <- x*20
  (pi**sx*sz)*(1.2*exp(-(x-0.2)^2/sx^2-(z-0.3)^2/sz^2)+
  0.8*exp(-(x-0.7)^2/sx^2-(z-0.8)^2/sz^2))
}
n <- 500
old.par <- par(mfrow=c(2,2))
x <- runif(n)/20;z <- runif(n);
xs <- seq(0,1,length=30)/20;zs <- seq(0,1,length=30)
pr <- data.frame(x=rep(xs,30),z=rep(zs,rep(30,30)))
truth <- matrix(test1(pr$x,pr$z),30,30)
f <- test1(x,z)
y <- f + rnorm(n)*0.2
b1 <- gam(y~s(x,z))
persp(xs,zs,truth);title("truth")
vis.gam(b1);title("t.p.r.s")
b2 <- gam(y~te(x,z))
vis.gam(b2);title("tensor product")
b3 <- gam(y~ ti(x) + ti(z) + ti(x,z))
vis.gam(b3);title("tensor anova")

## now illustrate partial ANOVA decomp...
vis.gam(b3);title("full anova")
b4 <- gam(y~ ti(x) + ti(x,z,mc=c(0,1))) ## note z constrained!
vis.gam(b4);title("partial anova")
plot(b4)

par(old.par)

## now with a multivariate marginal....

test2<-function(u,v,w,sv=0.3,sw=0.4)  
{ ((pi**sv*sw)*(1.2*exp(-(v-0.2)^2/sv^2-(w-0.3)^2/sw^2)+
  0.8*exp(-(v-0.7)^2/sv^2-(w-0.8)^2/sw^2)))*(u-0.5)^2*20
}
n <- 500
v <- runif(n);w<-runif(n);u<-runif(n)
f <- test2(u,v,w)
y <- f + rnorm(n)*0.2
# tensor product of 2D Duchon spline and 1D cr spline
m <- list(c(1,.5),rep(0,0)) ## example of list form of m
b <- gam(y~te(v,w,u,k=c(30,5),d=c(2,1),bs=c("ds","cr"),m=m))
plot(b)

作者

Simon N. Wood simon.wood@r-project.org

參考

Wood, S.N. (2006) Low rank scale invariant tensor product smooths for generalized additive mixed models. Biometrics 62(4):1025-1036 doi:10.1111/j.1541-0420.2006.00574.x

Wood S.N. (2017) Generalized Additive Models: An Introduction with R (2nd edition). Chapman and Hall/CRC Press. doi:10.1201/9781315370279

https://www.maths.ed.ac.uk/~swood34/

也可以看看

sgamgammsmooth.construct.tensor.smooth.spec

相關用法


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