I have a response variable and number of predictors. I need to calculate the percent contribution of each predictor. I know that this can be done using Shapley value regression, but is there any way to do it through SPSS, Excel, or Minitab? Is there an alternative method, similar to the Shapley value method?
Asked
Active
Viewed 4,372 times
4
-
2See [this blog post](http://jeromyanglim.blogspot.com/2009/09/variable-importance-and-multiple.html) by Jeromy Anglim. A simple alternative (available in SPSS and likely MiniTab) would be the semi-partial correlation. The linked page to [Ulrike Gromping](http://prof.beuth-hochschule.de/groemping/relaimpo/) goes into much detail about various other procedures - see the American Statistician articles. – Andy W Jul 11 '13 at 16:50
-
@AndyW Thank you. I tried semi-partial correlation but am not getting correct values. I have one response and 10 predictor variables. Could this be why the values are not matching up? – A A Jul 12 '13 at 14:16
-
That is not enough information to give any useful advice. How exactly are the values not correct? If you provide the correlation matrix for all of the variables it is possible someone would be nice enough to walk through the calculations. – Andy W Jul 12 '13 at 14:22
-
@AndyW Sorry should have explained more. Basically I am analyzing some customer satisfaction data for a program. My response is the customer satisfaction. All my variables are categorical, and some are scaled differently than others. I tried doing the semi-partial correlation directly on SPSS, but for some reason was unable to. So I had to do it through the linear regression option. Do you know how to paste the matrix as an image? It's pretty large – A A Jul 12 '13 at 15:29
-
[See here](http://stats.stackexchange.com/editing-help) for how to upload an image or insert a table (plain text). Are you sure this is necessary though? It looks to me like what you want is available as a supplemental statistic for a linear reg. model ([see here](http://www.upa.pdx.edu/IOA/newsom/da2/ho_partial.pdf) and linear regression in the command syntax reference). – Andy W Jul 12 '13 at 17:01
-
@AndyW I did try that, but the output I get does not match the output I need. Do you think tranforming the data will help? – A A Jul 12 '13 at 17:05
-
What output do you need is again quite vague. It may be good to step back, describe your situation and say your stated goals and how what you have been doing is not satisfactory. This forum isn't the right place to just ask for programmatic solutions anyway. – Andy W Jul 12 '13 at 17:57
-
@AndyW Okay, I'll try to explain. I am analyzing the customer satisfaction results for a certain program. My response variable is customer satisfaction with the program, and it is on a 0-10 scale (0=dissatisfied, 10=very satisfied). I have ten possible predictors/factors. An example of one of the predictors is "ease or sigining up for a program", etc. The scales for the predictor variables differ, i.e. some on a 0-10 scale, others on a 1-2 scale. I am trying to get the percent contribution each predictor has on the response. – A A Jul 12 '13 at 19:21
-
This was done with the Shapley value method, but I do not have the resources to use the method. As a note, I believe there is interaction between the predictor variables, so I'm not sure if I can use regression or semi-partial correlation in this case. – A A Jul 12 '13 at 19:22
2 Answers
2
don't use linear regression for customer satisfaction survey data... Your response set is not normally distributed and, most likely, there is a high degree of multicolinearity amongst prediction variables. Shapley-value is the most correct method of assigning coefficient weights to your prediction variables. If you write the code and don't have millions of surveys, you should be able to do it in Excel by writing the VBA.

josh
- 21
- 2
1
You could use R (open source and free available under https://www.r-project.org/) and the package relaimpo (https://cran.r-project.org/web/packages/relaimpo/), the function to do so is calc.relimp. Syntax is e.g.: calc.relimp(mymodel, type="lmg") where mymodel is a lm reression model done before hand.

Erik
- 11
- 1