6/15/2020

Outline

  • Questions
  • Data
  • Result: Analysis and Findings
  • Conclusion and Discussion

Questions

  • What kind of Broadgames tends to be popular?
  • Relation between parameters of broadgame and the rating it gets.
  • Using Machine Learning to predict the rating score.

Data: Source

Data:

##        id      type     name yearpublished minplayers maxplayers playingtime
## 486 36235 boardgame The Duke          2013          2          2          30
##     minplaytime maxplaytime minage users_rated average_rating
## 486          30          30     13        3526         7.4375
##     bayes_average_rating total_owners total_traders total_wanters total_wishers
## 486               6.8684         5864           188           310          1498
##     total_comments total_weights average_weight               types
## 486            850           120         2.5167 boardgame,abstracts
##                     categories                    mechanics
## 486 Abstract Strategy,Medieval Grid Movement,Tile Placement
##                                              family
## 486 Crowdfunding: Kickstarter,The Duke,Mensa Select
##                             designers
## 486 Jeremy Holcomb,Stephen McLaughlin
##                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      description
## 486 Levy. Maneuver. Conquer.

The Duke is a dynamic, tile-based strategy game with an old-world, feudal theme, high-quality wooden playing pieces, and an innovative game mechanism in its double-sided tiles. Each side represents a different posture – often considered to be defensive or offensive – and demonstrates exactly what the piece can do within the turn. At the end of a move (or after the use of a special ability), the tile is flipped to its other side, displaying a new offensive or defensive posture.

Each posture conveys different options for maneuver and attack. The full circle is a standard Move, the hollow circle the Jump, the arrow provides for the Slide, the star a special Strike ability and so on. Each turn a player may select any tile to maneuver, attempting to defend his own troops while positioning himself to capture his opponent's tiles. If you end your movement in a square occupied by an opponent's tile, you capture that tile. Capture your opponent's Duke to win!

Players start the game by placing their Duke in one of the two middle squares on their side of the game board. Two Footman are then placed next to the Duke. Each turn a player may choose to either move a single tile or randomly draw a new tile from the bag. With fifteen different Troop Tiles, all double-sided, and nineteen total pieces for each player (plus special optional tiles), the variety of game play is limitless.

Beyond the endless variety of the basic game, Terrain Tiles introduce a variety of game play options, altering the game board. These rules also include several alternate objectives, such as the challenging Dark Rider game which pits five Pikeman against a lone Knight.


## Warning: package 'ggplot2' was built under R version 3.6.3
## Warning: package 'readr' was built under R version 3.6.3
## Warning: package 'dplyr' was built under R version 3.6.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## Warning: package 'stringr' was built under R version 3.6.3
## Warning: package 'gridExtra' was built under R version 3.6.3
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
## Warning: package 'ggrepel' was built under R version 3.6.3
## 'data.frame':    976 obs. of  26 variables:
##  $ id                  : chr  "36235" "197405" "19427" "215613" ...
##  $ type                : chr  "boardgame" "boardgame" "boardgame" "boardgame" ...
##  $ name                : chr  "The Duke" "Tak" "Gemblo" "Tao Long: The Way of the Dragon" ...
##  $ yearpublished       : int  2013 2017 2003 2017 2016 2017 2012 2015 2013 2019 ...
##  $ minplayers          : int  2 2 2 2 1 2 2 2 2 2 ...
##  $ maxplayers          : int  2 2 6 2 4 4 7 2 2 4 ...
##  $ playingtime         : int  30 60 30 30 30 60 45 45 15 30 ...
##  $ minplaytime         : int  30 20 30 10 30 15 45 30 15 15 ...
##  $ maxplaytime         : int  30 60 30 30 30 60 45 45 15 30 ...
##  $ minage              : int  13 12 6 14 13 12 8 12 0 14 ...
##  $ users_rated         : int  3526 1708 1335 1040 927 534 743 1705 1730 271 ...
##  $ average_rating      : num  7.44 7.73 6.83 7.03 6.8 ...
##  $ bayes_average_rating: num  6.87 6.63 6.14 6.12 5.98 ...
##  $ total_owners        : int  5864 3329 1478 3239 1948 1252 1218 3607 4785 512 ...
##  $ total_traders       : int  188 41 41 144 168 21 74 191 362 11 ...
##  $ total_wanters       : int  310 199 148 64 45 44 45 88 19 25 ...
##  $ total_wishers       : int  1498 1089 588 492 235 165 191 650 255 105 ...
##  $ total_comments      : num  850 475 466 353 325 154 222 536 736 104 ...
##  $ total_weights       : num  120 46 128 22 24 16 46 51 122 12 ...
##  $ average_weight      : num  2.52 2.46 1.9 2.68 1.96 ...
##  $ types               : chr  "boardgame,abstracts" "boardgame,abstracts" "boardgame,abstracts" "boardgame,abstracts" ...
##  $ categories          : chr  "Abstract Strategy,Medieval" "Abstract Strategy" "Abstract Strategy" "Abstract Strategy" ...
##  $ mechanics           : chr  "Grid Movement,Tile Placement" "Grid Movement,Network and Route Building" "" "Grid Movement,Modular Board,Point to Point Movement" ...
##  $ family              : chr  "Crowdfunding: Kickstarter,The Duke,Mensa Select" "5x5 grid,Combinatorial,Connection Games,Crowdfunding: Kickstarter,Fictional Games" "Combinatorial,Crowdfunding: Kickstarter,Gemblo" "Crowdfunding: Kickstarter" ...
##  $ designers           : chr  "Jeremy Holcomb,Stephen McLaughlin" "James Ernest,Patrick Rothfuss" "Justin Oh" "Dox Lucchin,Pedro Latro" ...
##  $ description         : chr  "Levy. Maneuver. Conquer.

The Duke is a dynamic, tile-based strategy game with an old-world, feudal the"| __truncated__ ""My next several hours were spent learning how to play tak. Even if I had not been nearly mad with idlenes"| __truncated__ "Gemblo is an abstract strategy game with translucent, colored pieces, each of which is made up of one to five h"| __truncated__ ""There was something formless and perfect before the Universe was born. For lack of a better name, I call "| __truncated__ ...

treemap of mechanics

## Warning: package 'treemap' was built under R version 3.6.3
## Warning: package 'viridis' was built under R version 3.6.3
## Loading required package: viridisLite
## Warning: package 'viridisLite' was built under R version 3.6.3
## Warning: package 'splitstackshape' was built under R version 3.6.3

distribution of weight

## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

distribution of ages

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

category

distribution of different rating

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

distribution of different rating

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

popular games per average rating

popular games per bayes average rating

linear model:

## 
## Call:
## lm(formula = average_rating ~ types + maxplayers + minage + total_wanters + 
##     yearpublished + playingtime + users_rated + average_weight + 
##     total_owners, data = par_year1234)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.35232 -0.24534  0.01443  0.25114  2.17439 
## 
## Coefficients:
##                                 Estimate  Std. Error t value
## (Intercept)                   5.87067363  0.11374194  51.614
## typesboardgame,strategygames  0.03273491  0.05892177   0.556
## maxplayers                    0.01001343  0.00483840   2.070
## minage                       -0.00623653  0.00839849  -0.743
## total_wanters                 0.00111332  0.00014275   7.799
## yearpublished2                0.16490067  0.04966829   3.320
## yearpublished3                0.33804976  0.05739377   5.890
## yearpublished4                0.67470240  0.06218698  10.850
## playingtime                   0.00048708  0.00041633   1.170
## users_rated                  -0.00006134  0.00002301  -2.666
## average_weight                0.29092989  0.04547164   6.398
## total_owners                  0.00003987  0.00001445   2.760
##                                          Pr(>|t|)    
## (Intercept)                  < 0.0000000000000002 ***
## typesboardgame,strategygames             0.578707    
## maxplayers                               0.038903 *  
## minage                                   0.458017    
## total_wanters                  0.0000000000000263 ***
## yearpublished2                           0.000952 ***
## yearpublished3                 0.0000000063147203 ***
## yearpublished4               < 0.0000000000000002 ***
## playingtime                              0.242478    
## users_rated                              0.007869 ** 
## average_weight                 0.0000000003090201 ***
## total_owners                             0.005952 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4908 on 624 degrees of freedom
## Multiple R-squared:  0.5157, Adjusted R-squared:  0.5072 
## F-statistic: 60.42 on 11 and 624 DF,  p-value: < 0.00000000000000022

plots of linear model

## 
## Call:
## lm(formula = average_rating ~ types + maxplayers + minage + total_wanters + 
##     yearpublished + playingtime * average_weight + users_rated + 
##     total_owners, data = par_year1234)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.3454 -0.2433  0.0124  0.2540  2.1980 
## 
## Coefficients:
##                                 Estimate  Std. Error t value
## (Intercept)                   5.89695955  0.12483889  47.237
## typesboardgame,strategygames  0.03889964  0.06017193   0.646
## maxplayers                    0.01008558  0.00484331   2.082
## minage                       -0.00552839  0.00851636  -0.649
## total_wanters                 0.00111640  0.00014296   7.809
## yearpublished2                0.16386413  0.04973883   3.294
## yearpublished3                0.33991510  0.05754301   5.907
## yearpublished4                0.67649007  0.06232152  10.855
## playingtime                  -0.00033713  0.00166175  -0.203
## average_weight                0.28138771  0.04916289   5.724
## users_rated                  -0.00006027  0.00002312  -2.607
## total_owners                  0.00003890  0.00001458   2.668
## playingtime:average_weight    0.00021840  0.00042628   0.512
##                                          Pr(>|t|)    
## (Intercept)                  < 0.0000000000000002 ***
## typesboardgame,strategygames              0.51821    
## maxplayers                                0.03772 *  
## minage                                    0.51648    
## total_wanters                  0.0000000000000245 ***
## yearpublished2                            0.00104 ** 
## yearpublished3                 0.0000000057275230 ***
## yearpublished4               < 0.0000000000000002 ***
## playingtime                               0.83930    
## average_weight                 0.0000000162182083 ***
## users_rated                               0.00935 ** 
## total_owners                              0.00783 ** 
## playingtime:average_weight                0.60859    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4911 on 623 degrees of freedom
## Multiple R-squared:  0.516,  Adjusted R-squared:  0.5066 
## F-statistic: 55.34 on 12 and 623 DF,  p-value: < 0.00000000000000022

Polynomial regression

quadratic model:

## 
## Call:
## lm(formula = average_rating ~ types + yearpublished + poly(maxplayers, 
##     2) + poly(minage, 2) + poly(total_wanters, 2) + poly(playingtime, 
##     2) + poly(users_rated, 2) + poly(average_weight, 2) + poly(total_owners, 
##     2), data = par_year1234)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.24115 -0.22880 -0.00857  0.23810  2.26954 
## 
## Coefficients:
##                              Estimate Std. Error t value             Pr(>|t|)
## (Intercept)                   6.78441    0.04968 136.560 < 0.0000000000000002
## typesboardgame,strategygames  0.03594    0.05835   0.616             0.538214
## yearpublished2                0.17312    0.04772   3.628             0.000310
## yearpublished3                0.31212    0.05518   5.657  0.00000002362118310
## yearpublished4                0.60649    0.06055  10.016 < 0.0000000000000002
## poly(maxplayers, 2)1          1.34974    0.51326   2.630             0.008759
## poly(maxplayers, 2)2         -0.23954    0.49702  -0.482             0.630013
## poly(minage, 2)1             -0.41506    0.53601  -0.774             0.439017
## poly(minage, 2)2             -0.54438    0.48860  -1.114             0.265643
## poly(total_wanters, 2)1       7.43181    0.91520   8.120  0.00000000000000253
## poly(total_wanters, 2)2      -5.17844    0.63806  -8.116  0.00000000000000262
## poly(playingtime, 2)1         0.71776    0.72261   0.993             0.320963
## poly(playingtime, 2)2         0.24389    0.60269   0.405             0.685867
## poly(users_rated, 2)1        -6.36362    2.73241  -2.329             0.020184
## poly(users_rated, 2)2         4.68346    1.38830   3.374             0.000789
## poly(average_weight, 2)1      5.05295    0.96378   5.243  0.00000021752684085
## poly(average_weight, 2)2     -0.31244    0.51904  -0.602             0.547426
## poly(total_owners, 2)1        5.91401    2.43880   2.425             0.015596
## poly(total_owners, 2)2       -1.76605    1.35128  -1.307             0.191717
##                                 
## (Intercept)                  ***
## typesboardgame,strategygames    
## yearpublished2               ***
## yearpublished3               ***
## yearpublished4               ***
## poly(maxplayers, 2)1         ** 
## poly(maxplayers, 2)2            
## poly(minage, 2)1                
## poly(minage, 2)2                
## poly(total_wanters, 2)1      ***
## poly(total_wanters, 2)2      ***
## poly(playingtime, 2)1           
## poly(playingtime, 2)2           
## poly(users_rated, 2)1        *  
## poly(users_rated, 2)2        ***
## poly(average_weight, 2)1     ***
## poly(average_weight, 2)2        
## poly(total_owners, 2)1       *  
## poly(total_owners, 2)2          
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4671 on 617 degrees of freedom
## Multiple R-squared:  0.5664, Adjusted R-squared:  0.5538 
## F-statistic: 44.78 on 18 and 617 DF,  p-value: < 0.00000000000000022

plots of quadratic model

## Warning in sqrt(crit * p * (1 - hh)/hh): 產生了 NaNs

## Warning in sqrt(crit * p * (1 - hh)/hh): 產生了 NaNs

## Warning: package 'caret' was built under R version 3.6.3
## Loading required package: lattice

machine learning

## Warning: package 'ellipse' was built under R version 3.6.3
## 
## Attaching package: 'ellipse'
## The following object is masked from 'package:graphics':
## 
##     pairs

##   counts percentage
## 0    340   43.53393
## 1    441   56.46607

machine learning

## 
## Call:
## summary.resamples(object = results)
## 
## Models: lda, cart, knn, svm, rf, xgb 
## Number of resamples: 10 
## 
## Accuracy 
##           Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
## lda  0.6836735 0.7397959 0.7845571 0.7706186 0.8020724 0.8247423    0
## cart 0.6428571 0.7500000 0.7704082 0.7582790 0.7815064 0.8041237    0
## knn  0.7142857 0.7216495 0.7487376 0.7612666 0.7959184 0.8453608    0
## svm  0.7755102 0.8067010 0.8265306 0.8310120 0.8509363 0.9175258    0
## rf   0.8163265 0.8380234 0.8564065 0.8545550 0.8673469 0.8969072    0
## xgb  0.8265306 0.8392857 0.8564065 0.8597307 0.8740532 0.9175258    0
## 
## Kappa 
##           Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
## lda  0.3560831 0.4729190 0.5571063 0.5334978 0.5972336 0.6440751    0
## cart 0.2910294 0.4866880 0.5210937 0.5015601 0.5593714 0.5907173    0
## knn  0.4198732 0.4372251 0.4939052 0.5163414 0.5866723 0.6787370    0
## svm  0.5418615 0.6060157 0.6495024 0.6563757 0.6970886 0.8320346    0
## rf   0.6308079 0.6760997 0.7081475 0.7056573 0.7320100 0.7900433    0
## xgb  0.6468843 0.6718148 0.7078990 0.7149074 0.7442114 0.8310840    0

Conclusion and Discussion