是否有一个简单的命令可以使用lm()R中的函数进行一次性交叉验证?
具体是有一个简单的命令,对于下面的代码?
x <- rnorm(1000,3,2)
y <- 2*x + rnorm(1000)
pred_error_sq <- c(0)
for(i in 1:1000) {
x_i <- x[-i]
y_i <- y[-i]
mdl <- lm(y_i ~ x_i) # leave i'th observation out
y_pred <- predict(mdl, data.frame(x_i = x[i])) # predict i'th observation
pred_error_sq <- pred_error_sq + (y[i] - y_pred)^2 # cumulate squared prediction errors
}
y_squared <- sum((y-mean(y))^2)/100 # Variation of the data
R_squared <- 1 - (pred_error_sq/y_squared) # Measure for goodness of fit
Run Code Online (Sandbox Code Playgroud) 的的矩阵递归n x n矩阵Y_t如下:
Y_{t} = A + \sum_{i=1}^{p} B_{i} * Y_{t-i}
Run Code Online (Sandbox Code Playgroud)
给出A和B.
这是我的尝试,但它运行缓慢:
Y = zeros(n,n,T); %Going to fill the 3rd dimension for Y_t, t=1:T
Y(:,:,1:p) = initializingY
for t=(p+1):T
Y(:,:,t) = A;
for i=1:p
Y(:,:,t) = Y(:,:,t) + B(:,:,i)*Y(:,:,t-i);
end
end
Run Code Online (Sandbox Code Playgroud)
你能想到更有效的方法吗?