predict() 为 bs() 给出了错误的矩阵;如何预测线性回归?
predict() gives wrong matrix for bs(); how to predict linear regression?
我遇到了关于函数 bs()
的问题。
library(ISLR)
library(ggplot2)
library(caret)
data(Wage)
#summary(Wage)
set.seed(123)
inTrain <- createDataPartition(Wage$wage, p = 0.7, list = F)
training <- Wage[inTrain,]
testing <- Wage[-inTrain,]
library(splines)
bsBasis <- bs(training$age, df=3)
bsBasis[1:12,]
lm1 <- lm(wage ~ bsBasis, data=training)
lm1$coefficients
## (Intercept) bsBasis1 bsBasis2 bsBasis3
## 60.22 93.39 51.05 47.28
plot(training$age, training$wage, pch=19, cex=0.5)
points(training$age, predict(lm1, newdata=training), col="red", pch=19, cex=0.5)
predict(bsBasis, age=testing$age)
predict(bsBasis, age=testing$age)
的尺寸是 2012x3,而 testing$age
只有 988 行。 predict(bsBasis, age=testing$age)
的结果与 bsBasis
相同。
我的问题是:
predict(bsBasis, age=testing$age)
实际上在做什么?
- 如何使用这个
bsBasis
来正确预测 TEST 数据中的 wage
?
你的问题1
使用newx
。检查 ?predict.bs
的参数。
x <- runif(100)
b <- bs(x, df = 3)
predict(b, newx = c(0.2, 0.5))
不同的 predict
函数可能表现不同。这里,无论你在bs()
、age
、sex
、height
等中使用什么变量,都只能是predict.bs()
中的newx
.
你的问题2
你真的不需要明确地形成 bsBasis
。在回归中使用样条曲线时,lm
和 predict.lm
将向您隐藏样条曲线的构造和预测。
lm1 <- lm(wage ~ bs(age, df = 3), data=training)
predict(lm1, newdata = test)
注意 predict.lm
中的参数是 newdata
。
我遇到了关于函数 bs()
的问题。
library(ISLR)
library(ggplot2)
library(caret)
data(Wage)
#summary(Wage)
set.seed(123)
inTrain <- createDataPartition(Wage$wage, p = 0.7, list = F)
training <- Wage[inTrain,]
testing <- Wage[-inTrain,]
library(splines)
bsBasis <- bs(training$age, df=3)
bsBasis[1:12,]
lm1 <- lm(wage ~ bsBasis, data=training)
lm1$coefficients
## (Intercept) bsBasis1 bsBasis2 bsBasis3
## 60.22 93.39 51.05 47.28
plot(training$age, training$wage, pch=19, cex=0.5)
points(training$age, predict(lm1, newdata=training), col="red", pch=19, cex=0.5)
predict(bsBasis, age=testing$age)
predict(bsBasis, age=testing$age)
的尺寸是 2012x3,而 testing$age
只有 988 行。 predict(bsBasis, age=testing$age)
的结果与 bsBasis
相同。
我的问题是:
predict(bsBasis, age=testing$age)
实际上在做什么?- 如何使用这个
bsBasis
来正确预测 TEST 数据中的wage
?
你的问题1
使用newx
。检查 ?predict.bs
的参数。
x <- runif(100)
b <- bs(x, df = 3)
predict(b, newx = c(0.2, 0.5))
不同的 predict
函数可能表现不同。这里,无论你在bs()
、age
、sex
、height
等中使用什么变量,都只能是predict.bs()
中的newx
.
你的问题2
你真的不需要明确地形成 bsBasis
。在回归中使用样条曲线时,lm
和 predict.lm
将向您隐藏样条曲线的构造和预测。
lm1 <- lm(wage ~ bs(age, df = 3), data=training)
predict(lm1, newdata = test)
注意 predict.lm
中的参数是 newdata
。