# [R] outer() or some other function for regression prediction with 2 IVs

Michael Weylandt michael.weylandt at gmail.com
Tue Jul 10 05:30:58 CEST 2012

```Your problem is the sum() call -- it's not vectorized (in the regular sense) so it breaks some of the internal assumptions of outer().

Easiest way is probably to do matrix multiplication (%*%) directly here

Michael

On Jul 9, 2012, at 10:19 PM, Joseph Clark <joeclark77 at hotmail.com> wrote:

>
> Hi there, I'm trying to prep some data for a persp() surface plot
>
> representing the predictions from a regression with two inddependent
>
> variables. The regression model "m3" has an intercept, 2 linear terms,
>
> and 2 squared terms.  The coefficients are given by coef(m3).
>
>
>
> My approach to generating the predictions for a range of each of my IVs,
>
> "s" and "d" was to use outer() like so:
>
>
>
> predxn <- function(s,d) { sum( coef(m3) * c(1,s,s^2,d,d^2) ) }
> z <- outer(s_vector,d_vector,predxn)
>
>
>
> I can't see what's wrong with this.  For each value of s_vector and d_vector,
>
> it should multiply each coefficient by its term and give me a nice
>
> two-dimensional array "z" containing the predictions.
>
>
>
> The problem is that the c() vector ends up with 1601 elements instead of 5.
>
> There are 20 items each in s_vector and d_vector so it looks like each variable
>
> in my function is using the whole "z" array of s's and d's rather than being
>
> calculated for each combination of values one at a time.
>
>
>
> So, am I using outer() wrong?  Or did I write my function badly?
>
> Or is there a better way to plot a 3d surface plot of my regression model?
>
>
>
>
>
>
> // joseph w. clark , phd candidate
> \\ usc marshall school of business
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help