I am currently working on a university project in which I am trying to compare the impact of postitive critic scores on video game sales (basically comparing positive user scores with positive critic scores). The data set has almost 7000 entries. Now, probability distributions for both sets seem to be exponential and I also did a Pearson chi-square normality test which stated that data is not normally distributed. Am I supposed to perform a non-parametric variation of a T-Test, like a Wilcoxon Test or a standard t-test will be a good fit? It doesn't seem like a viable option to follow CLT and assume that data is normally distributed or am I misinterpreting that? I'd greatly appreciate any help.
I looked at the data at kaggle. They have much missing, so that should be tackled somehow, maybe multiple imputation, but I will not touch that. A simple plot is
Which shows that there is indeed higher (global) sales when the critic score is high, but the effect really starts at somewhat high scores.
What you propose seems to be to cut in two groups based on a cutoff on critic score, that is not a natural idea (for instance, the result could depend on choice of cutoff.)
This is really a regression problem, and you would be better off treating it as such. Since the distribution are heavily skewed, as you observed, I would try a glm (generalized linear model), and try first a gamma model. As proposed by commenters, I will show how this can be done with additive models as implemented in R's
mgcv package. One could also use regression splines with glm's. The main result is
The wide confidence bands when the critic score is lesser than about 40 reflects the paucity of data there, above that level there is a clearly significant positive dependence on sales by the critic score, and it is not linear. The used code:
mod.mgcv <- mgcv::gam(Global_Sales ~ s(Critic_Score), family=Gamma(link="log"), data=videodf) summary(mod.mgcv) Family: Gamma Link function: log Formula: Global_Sales ~ s(Critic_Score) Parametric coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.61540 0.02706 -22.74 <2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Approximate significance of smooth terms: edf Ref.df F p-value s(Critic_Score) 7.68 8.395 67.74 <2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 R-sq.(adj) = 0.124 Deviance explained = 23.9% GCV = 1.5538 Scale est. = 5.9578 n = 8137
(Again it must be said that there is a lot of missing data, which I have just omitted. No results should be trusted until that is somehow trusted.)
The code used for the first plot is:
videodf <- read.csv("Video_Games_Sales_as_at_22_Dec_2016.csv") videodf <- within(videodf, User_Score <- as.numeric(levels(User_Score))[User_Score]) ggplot2::ggplot(videodf, aes(x=Critic_Score, y=Global_Sales)) + geom_jitter() + geom_smooth()