Some differences in setup:
xx
(*
{{1, 1}, {2, 1}, {3, 1}, {4, 1}} <-- Yours is a design matrix (rank 2 array)
{1, 2, 3, 4} <-- Mine is a vector of x abscissae (rank 1 array)
*)
yy
(*
{{2}, {3}, {5}, {5}} <-- Yours is a column matrix
{2, 3, 5, 5} <-- Mine is a vector
*)
If you want to set up the problem all in matrices, then the solution will be in terms of matrices. The plot can be adapted to the matrices as follows:
ListPlot[Transpose[{xx[[All, 1]], yy[[All, 1]]}],
Epilog -> {Red,
Line[{{0, First@First@bmvec}, (* there was a typo in my previous code *)
{5, {{1, 5}} . bmvec // First // First}}]}]
The code can be fixed in many ways. The following couplets are pairwise equivalent:
Transpose[{xx[[All, 1]], yy[[All, 1]]}]
Table[{xx[[1 k, 1]], yy[[k, 1]]}, {k, Length@xx}]
{{1, 5}} . bmvec // First // First
({{1, 5}} . bmvec)[[1, 1]]
First@First@bmvec
bmvec[[1, 1]]
I've found it easier to work with vectors as rank-1 arrays and not as rank-2 ones (matrices) in Mathematica. For one thing, it's how the examples in the documentation are set up.
†The rank of an array corresponds to how many layers of curly braces the expression has. It also corresponds to how many indices are needed between the square brackets [[…]] to extract an entry.