Society for Consumer Psychology 2008 Winter Conference

I just returned from SCP 2008, which was held in New Orleans. What a great conference! The two keynote speakers, Russel Fazio and John Cacioppo, were simply amazing; it was inspiring to hear them talk about their research.

Joann Peck and I presented our working paper, In Search of a Surrogate for Touch: The Effect of Haptic Imagery on Psychological Ownership and Object Valuation, at the working paper session. We received a number of helpful questions and suggestions. The session also provided a welcome opportunity to interact with the other participants and learn about their research.

Incidentally, here’s the abstract from our working paper:

Previous research has shown that consumers value objects more highly if they own them, a finding commonly known as the endowment effect. This effect extends beyond legal ownership to psychological ownership, which can arise simply from touching an object. In this research, we explore the possibility of using touch (haptic) imagery as a surrogate for actual touch. An experimental study demonstrates that an increase in psychological ownership and valuation can be obtained by having consumers close their eyes and visualize touching an object; moreover, this increase is similar in magnitude to that obtained from having consumers actually touch the object.

If you’d like a copy of our paper, let me know and I’ll be happy to send it to you when it’s available.

Okay, now that I’m all invigorated it’s time to get back to work!

Raising a matrix to a power in R

A surprising deficiency in R is the absence of an operator or built-in function for matrix exponentiation. I had to deal with this today when porting a function from MATLAB to R. Here is my quick-and-dirty solution:

```mpower = function(M,p) {
A = as.matrix(M)

if (dim(A)[1] != dim(A)[2]) stop("not a square matrix")

# M^{-1} = the matrix inverse of M
if (p==-1) return(solve(A))

# M^0 = I
if (p==0) return(diag(1,dim(A)[1],dim(A)[2]))

# M^1 = M
if (p==1) return(A)

if (p < -1) stop("only powers >= -1 allowed")
if (p != as.integer(p)) stop("only integer powers allowed")

R = A
for (i in 2:p) {
R = R %*% A
}
return(R)
}
```

Not the most efficient method, perhaps, but it works. If you know of a better alternative, please add a comment to this blog entry. One possibility might be to port MATLAB’s `expm` function, as defined in `expm1.m` in the MATLAB demos directory, to R.

For a detailed review of methods for computing the exponential of a matrix, see:

Moler, Cleve and Charles Van Loan (2003), “Nineteen dubious ways to compute the exponential of a matrix, twenty-five years later,” Society for Industrial and Applied Mathematics, 45 (1), 3-49.