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


R nsk 以結高度為基礎的自然樣條。


R語言 nsk 位於 survival 包(package)。

說明

創建自然樣條的設計矩陣,使得所得擬合的係數是節點處函數的值。

用法

nsk(x, df = NULL, knots = NULL, intercept = FALSE, b = 0.05, 
    Boundary.knots = quantile(x, c(b, 1 - b), na.rm = TRUE))

參數

x

預測變量。允許缺失值。

df

自由度。可以提供 df 而不是 knots; ns() 然後在適當選擇的 x 分位數處選擇 df - 1 - 截距結(這將忽略缺失值)。默認值 df = NULL,將內部結的數量設置為長度(結)。

knots

定義樣條線的斷點。默認無結;與自然邊界條件一起,這為 x 的線性回歸奠定了基礎。典型值是一個結的平均值或中位數,更多結的分位數。另請參見 Boundary.knots。

intercept

如果為 TRUE,則截距包含在基礎中;默認為假

b

邊界結的默認放置。 bs=0 的值將複製 ns 的默認行為。

Boundary.knots

施加自然邊界條件並錨定B-spline基礎的邊界點。除了這些點之外,函數被假定為線性的。如果提供了結和Boundary.knots,則基本參數不依賴於 x。數據可以超出Boundary.knots

細節

nsk 函數的行為與 ns 函數相同,但有兩個例外。第一個是返回的基礎使得係數對應於節點處的擬合函數的值。如果是 intercept = FALSE ,則將有 k-1 個係數對應於 k 個節點,它們將是節點 2-k 和節點 1 之間的預測值之差。該基礎的主要優點是係數可以直接解釋。第二個是線性和非線性分量的測試是簡單的對比。

ns 的第二個區別是關於邊界結的默認位置的觀點之一。這裏的默認值更接近rms::rcs 函數中的默認值。

此函數是一個嘗試,如果是新想法,則尚不能保證將來將其包含在包中。

尺寸為 length(x) * df 的矩陣,其中提供 df,或者如果提供結,則 df = length(knots) + 1 + 截距。返回與 kns 參數相對應的屬性,並顯式給出結、Boundary.knots 等,供 Predict.kns() 使用。

注意

薄的柔性金屬或木條稱為樣條線,是布置平滑曲線的傳統方法,例如用於船體或飛機機翼。引腳被放入板上,條帶穿過它們,每個引腳都是'knot'。

數學樣條是每個結之間的分段函數。線性樣條是一組連接的線段,二次樣條是一組連接的局部二次函數,被約束具有連續的一階導數,三次樣條是每個節點之間的三次樣條,被約束具有連續的一階和二階導數,數學樣條並不是自然樣條的精確表示:作為物理對象,木材或金屬條將具有所有階的連續導數。三次樣條曲線很常用,因為它們足夠光滑,人眼看起來很自然。

如果數學樣條線進一步約束為超出末端結的線性,這通常稱為'natural spline',因為木製或金屬樣條線在超出最後的結後也將是線性的。同一對象的另一個名稱是“受限三次樣條”,因為它是通過添加更多約束在代碼中實現的。給定一個數據點向量和一組結,可以創建一個每個結一列的基礎矩陣 X,這樣 X 在 y 上的普通回歸將適合三次樣條函數,因此這些也稱為 'regression splines' 。 (我們認為,這三個標簽中的一個並不比另一個更好或更差)。

給定一個具有 k 列的基礎矩陣 X,對於任何 k x k 非奇異矩陣 T 來說,矩陣 Z= XT 也是一個基礎矩陣,並且將產生相同的預測值,但是一組新的係數 gamma = (T-inverse)用貝塔代替貝塔。人們可以選擇基函數以使 X 易於構造、使回歸在數值上穩定、使測試更容易或基於其他考慮。似乎每個樣條庫都返回不同的基礎集,不幸的是,這使得在包之間進行比較變得困難。這又是一個基組,選擇它是為了使係數更容易解釋。

例子

# make some dummy data
tdata <- data.frame(x= lung$age, y = 10*log(lung$age-35) + rnorm(228, 0, 2))
fit1 <- lm(y ~ -1 + nsk(x, df=4, intercept=TRUE) , data=tdata)
fit2 <- lm(y ~ nsk(x, df=3), data=tdata)

# the knots (same for both fits)
knots <- unlist(attributes(fit1$model[[2]])[c('Boundary.knots', 'knots')])
sort(unname(knots))
unname(coef(fit1))  # predictions at the knot points

unname(coef(fit1)[-1] - coef(fit1)[1])  # differences: yhat[2:4] - yhat[1]
unname(coef(fit2))[-1]                  # ditto

## Not run: 
plot(y ~ x, data=tdata)
points(sort(knots), coef(fit1), col=2, pch=19)
coef(fit)[1] + c(0, coef(fit)[-1])

## End(Not run)

也可以看看

ns

相關用法


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