最近做了一些模拟,其中就有LS方法,用training set做回归,再用test set做预测,然后看MSE,但是用predict函数做的预测值都是训练集的,不知道出了什么问题,还请高人指点!
library(MASS)
library(glmnet)
library(Matrix)
set.seed(1)
n=400
p=5
q=0
sigma=matrix(q,p,p)
diag(sigma)=1
x=mvrnorm(n,rep(0,p),sigma)
b=rep(3,p)
e=rnorm(n,0,1)
y=x%*%b+e
以上是生成的x,y.大家重点看后边,一共400个,用前200来做训练,后200做测试
x1=x[1:200,]
y1=y[1:200,]
x2=x[201:n,]
y2=y[201:n,]
hatb=solve(t(x1)%*%x1)%*%t(x1)%*%y1
yhat=x2%*%hatb
mean((yhat-y2)^2)
这个是用OLS公式算的,肯定是对的,结果大概是0.9几,但是用predict函数做的就不一样
lm1=lm(y[1:200]~x[1:200,])
summary(lm2)
new=data.frame(x[201:n,])
ypred=predict(lm1,new)
mean((y[201:n]-ypred)^2)
这个结果很大,但是OLS估计在低维应该表现不错才对,我看了下,最后预测出来的还是训练集的,那个函数写的有问题,就是不知道怎么写了,求大神啊啊啊啊