簡體   English   中英

使用受限三次樣條曲線的新數據的預測值

[英]Predicted values for new data using restricted cubic splines

我有一些數據,我正在使用受限的三次樣條建模。 我正在使用rms包中的rcs轉換函數來生成線性模型的轉換變量。 這是一個使用5節的例子。

library('rms')

my_df <- data.frame(
    y = -4 * -100:100 + -1.5 * (-100:100)**2 + 3 * (-100:100)**3 + rnorm(201, 0, 1e5),
    x = -100:100
)

mod <- lm(y ~ rcs(x, 5), data = my_df)

我適合數據后,我想找到的預測y值的特定域x值。 這是我現在正在做的事情:

new_data <- data.frame(x = -3:3)

predict(mod, newdata = new_data)

但是,這會生成一條警告消息:

Warning message:
In rcspline.eval(x, nk = nknots, inclx = TRUE, pc = pc, fractied = fractied) :
    5 knots requested with 7 unique values of x.  knots set to 5 interior values.

這意味着什么,以及發生了什么? 我預計結點位置應該已經在mod定義,所以我不明白為什么它似乎試圖找到我給它的七個x值的新結。 我可以通過在new_data提供更多x值來避免警告消息,而忽略那些我不需要的值,但我擔心predict實際上在做什么。

根據哈德利對這個問題的評論,你不應該指望lmrcs一起工作。 快速演示為什么會出現問題:

mod <- lm(y ~ rcs(x, 5), data = my_df)

new_data <- data.frame(x = -3:3)
new_data2 <- data.frame(x = -300:300/100)

plot(new_data2$x, predict(mod, newdata = new_data2), type='l')
lines(new_data$x,predict(mod, newdata = new_data), col='red')

作為代碼輸出生成的圖形

預測取決於x值的數量,即使是相同的范圍,因此結合這些功能絕對不是一個好主意。

我相信predict函數將在公式中查找並將其在那里找到的變量替換為newdata的變量。 訣竅是, rcs函數根據提供的數據(分布)確定結的位置。 因此,如果new_data中的數據與my_df的數據具有不同的分布,則結將位於不同的位置,並且它將改變曲線。 無論如何,固定結位置可以解決問題。

要修復結點位置,你不能使用rcs函數,而是使用rcspline.eval函數,它將結點位置作為參數。 您可以使用相同的函數來計算結“應該”的位置。 見下面的代碼。

Knots <- rcspline.eval(my_df$x, knots.only = TRUE) # returns only locations of knots
# see ??Hmisc::rcspline.eval for details of how it determines knot locations
mod2 <- lm(y ~ rcspline.eval(x, knots = Knots), data = my_df) # fit model
predict(mod2, newdata = new_data) # predict based on mod2 and new data

由於mod2公式包含結點位置,因此曲線應為相同的形狀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM