dat<-data.frame(x=c(2,3,4,5,6),y=c(4,4,6,6,10)) N = length(dat$x) x<-dat$x y<-dat$y ols<-lm(y~x) summary(ols) min.RSS <- function(pa1, pa2, x, y, N) { b0 = pa1 b1 = pa2 RSS = vector("numeric",length(b1)) for (i in 1:length(b1)){ RSS[i] = sum((pa1[i]+pa2[i]*x-y)^2) } return(RSS) } pa1 <- seq(0.1, 1.1, by=0.05) names(pa1) <- pa1 pa2 <- seq(1, 2, by=0.05) names(pa2) <- pa2 z.RSS <- outer(X = pa1, Y = pa2, FUN = min.RSS, N = N, x = x, y = y) min(z.RSS) zd.RSS<-data.frame(z.RSS) inds_0 = which(zd.RSS == min(zd.RSS), arr.ind=TRUE) inds_0 (rnames = rownames(zd.RSS)[inds_0[,1]]) (cnames = colnames(zd.RSS)[inds_0[,2]]) require(lattice) #Loading required package: lattice wireframe(z.RSS, drape=T, xlab="b0", ylab="b1", zlab="RSS",col.regions=rainbow(100)) wireframe(z.RSS, xlab="b0", ylab="b1", zlab="RSS")