NBA = read.csv("NBA_train.csv")
str(NBA)

A. How many observations do we have in the training dataset? 835

table(NBA$W, NBA$Playoffs)

B. Is there any chance that a team winning 38 games can make it to the playoffs? Why? 7 have made it but 8 have not, so it is close to being a 50/50 scenario.

C. What is the number of wins that can guarantee for any team a presence in the playoffs based on historical data? 49

# Compute Points Difference
NBA$PTSdiff = NBA$PTS - NBA$oppPTS
# Check for linear relationship
plot(NBA$PTSdiff, NBA$W)

D. Can you determine (visually) if there is any relationship between the points difference (PTSdiff) and the number of wins (W)?Explain. There is very visible linear relationship between the point difference and the number of wins.

# Linear regression model for wins
WinsReg = lm(W ~ PTSdiff, data=NBA)
summary(WinsReg)
PointsReg = lm(PTS ~ X2PA + X3PA + FTA + AST + ORB + DRB + TOV + STL + BLK, data=NBA)
summary(PointsReg)

E. Here we want to determine what aspects of the game affect the number of wins of a team(WingsReg model). Is the predictor variable points difference (PTSdiff) significant at a 5% significance level?

Points diff is a predictor variable at a 5% sign lvl.

F. We also built a linear model to predict the number of points as a function of some aspects of the game. Is the number of blocks (BLK) significant at a 5% significance level?

BLK is not a predictor variable at 5% sig lvl since it is 0.5256, which is less than the 0.05 sig lvl.

# Average number of points in a season
max(NBA$PTS)

G. What has been the maximum number of points in a season? 10371

# Sum of Squared Errors
PointsReg$residuals
SSE = sum(PointsReg$residuals^2)
SSE
# Root mean squared error
RMSE = sqrt(SSE/nrow(NBA))
RMSE
# Average number of points in a season
mean(NBA$PTS)

H. What is the meaning of the RMSE(Root mean squared error) in the PointsReg model? Are you satisfied with this value? It is the mean difference of points, it is a somewhat satisfying amount since the average number of points in a season is 8370.24. Making our number very small in comparison.

I. How well did your predictions work on the testing dataset? Report the new R2 and RMSE. It performed well, giving a 81.27% result.

NBA_test = read.csv("NBA_test.csv")
# Make predictions on test set
PointsPredictions = predict(PointsReg4, newdata=NBA_test)
# Compute out-of-sample R^2
SSE = sum((PointsPredictions - NBA_test$PTS)^2)
SST = sum((mean(NBA$PTS) - NBA_test$PTS)^2)
R2 = 1 - SSE/SST
R2
# Compute the RMSE
RMSE = sqrt(SSE/nrow(NBA_test))
RMSE 
LS0tDQp0aXRsZTogIk1hcmNvIENhbGRlcm9uIEluLWNsYXNzIGFjdGl2aXR5ICMxMihIVyk6IEFuYWx5emluZyB0aGUgTGVjdHVyZSBTb2x1dGlvbiBGaWxlIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KYGBge3J9DQpOQkEgPSByZWFkLmNzdigiTkJBX3RyYWluLmNzdiIpDQpzdHIoTkJBKQ0KYGBgDQoNCg0KQS4gSG93IG1hbnkgb2JzZXJ2YXRpb25zIGRvIHdlIGhhdmUgaW4gdGhlIHRyYWluaW5nIGRhdGFzZXQ/IDgzNQ0KDQpgYGB7cn0NCnRhYmxlKE5CQSRXLCBOQkEkUGxheW9mZnMpDQpgYGANCg0KQi4gSXMgdGhlcmUgYW55IGNoYW5jZSB0aGF0IGEgdGVhbSB3aW5uaW5nIDM4IGdhbWVzIGNhbiBtYWtlIGl0IHRvIHRoZSBwbGF5b2Zmcz8gV2h5PyA3IGhhdmUgbWFkZSBpdCBidXQgOCBoYXZlIG5vdCwgc28gaXQgaXMgY2xvc2UgdG8gYmVpbmcgYSA1MC81MCBzY2VuYXJpby4NCg0KQy4gV2hhdCBpcyB0aGUgbnVtYmVyIG9mIHdpbnMgdGhhdCBjYW4gZ3VhcmFudGVlIGZvciBhbnkgdGVhbSBhIHByZXNlbmNlIGluIHRoZSBwbGF5b2ZmcyBiYXNlZCBvbiBoaXN0b3JpY2FsIGRhdGE/IDQ5DQoNCmBgYHtyfQ0KIyBDb21wdXRlIFBvaW50cyBEaWZmZXJlbmNlDQpOQkEkUFRTZGlmZiA9IE5CQSRQVFMgLSBOQkEkb3BwUFRTDQojIENoZWNrIGZvciBsaW5lYXIgcmVsYXRpb25zaGlwDQpwbG90KE5CQSRQVFNkaWZmLCBOQkEkVykNCmBgYA0KDQpELiBDYW4geW91IGRldGVybWluZSAodmlzdWFsbHkpIGlmIHRoZXJlIGlzIGFueSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgcG9pbnRzIGRpZmZlcmVuY2UgKFBUU2RpZmYpIGFuZCB0aGUgbnVtYmVyIG9mIHdpbnMgKFcpP0V4cGxhaW4uDQpUaGVyZSBpcyB2ZXJ5IHZpc2libGUgbGluZWFyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBwb2ludCBkaWZmZXJlbmNlIGFuZCB0aGUgbnVtYmVyIG9mIHdpbnMuIA0KDQpgYGB7cn0NCiMgTGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgZm9yIHdpbnMNCldpbnNSZWcgPSBsbShXIH4gUFRTZGlmZiwgZGF0YT1OQkEpDQpzdW1tYXJ5KFdpbnNSZWcpDQpgYGANCmBgYHtyfQ0KUG9pbnRzUmVnID0gbG0oUFRTIH4gWDJQQSArIFgzUEEgKyBGVEEgKyBBU1QgKyBPUkIgKyBEUkIgKyBUT1YgKyBTVEwgKyBCTEssIGRhdGE9TkJBKQ0Kc3VtbWFyeShQb2ludHNSZWcpDQpgYGANCg0KDQpFLiBIZXJlIHdlIHdhbnQgdG8gZGV0ZXJtaW5lIHdoYXQgYXNwZWN0cyBvZiB0aGUgZ2FtZSBhZmZlY3QgdGhlIG51bWJlciBvZiB3aW5zIG9mIGEgdGVhbShXaW5nc1JlZyBtb2RlbCkuIElzIHRoZSBwcmVkaWN0b3IgdmFyaWFibGUgcG9pbnRzIGRpZmZlcmVuY2UgKFBUU2RpZmYpIHNpZ25pZmljYW50IGF0IGEgNSUgc2lnbmlmaWNhbmNlIGxldmVsPw0KDQpQb2ludHMgZGlmZiBpcyBhIHByZWRpY3RvciB2YXJpYWJsZSBhdCBhIDUlIHNpZ24gbHZsLiANCg0KRi4gV2UgYWxzbyBidWlsdCBhIGxpbmVhciBtb2RlbCB0byBwcmVkaWN0IHRoZSBudW1iZXIgb2YgcG9pbnRzIGFzIGEgZnVuY3Rpb24gb2Ygc29tZSBhc3BlY3RzIG9mIHRoZSBnYW1lLiBJcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyAoQkxLKSBzaWduaWZpY2FudCBhdCBhIDUlIHNpZ25pZmljYW5jZSBsZXZlbD8NCg0KQkxLIGlzIG5vdCBhIHByZWRpY3RvciB2YXJpYWJsZSBhdCA1JSBzaWcgbHZsIHNpbmNlIGl0IGlzIDAuNTI1Niwgd2hpY2ggaXMgbGVzcyB0aGFuIHRoZSAwLjA1IHNpZyBsdmwuIA0KDQpgYGB7cn0NCiMgQXZlcmFnZSBudW1iZXIgb2YgcG9pbnRzIGluIGEgc2Vhc29uDQptYXgoTkJBJFBUUykNCmBgYA0KDQpHLiBXaGF0IGhhcyBiZWVuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgaW4gYSBzZWFzb24/IDEwMzcxDQoNCmBgYHtyfQ0KIyBTdW0gb2YgU3F1YXJlZCBFcnJvcnMNClBvaW50c1JlZyRyZXNpZHVhbHMNCmBgYA0KYGBge3J9DQpTU0UgPSBzdW0oUG9pbnRzUmVnJHJlc2lkdWFsc14yKQ0KU1NFDQpgYGANCmBgYHtyfQ0KIyBSb290IG1lYW4gc3F1YXJlZCBlcnJvcg0KUk1TRSA9IHNxcnQoU1NFL25yb3coTkJBKSkNClJNU0UNCmBgYA0KYGBge3J9DQojIEF2ZXJhZ2UgbnVtYmVyIG9mIHBvaW50cyBpbiBhIHNlYXNvbg0KbWVhbihOQkEkUFRTKQ0KYGBgDQoNCkguIFdoYXQgaXMgdGhlIG1lYW5pbmcgb2YgdGhlIFJNU0UoUm9vdCBtZWFuIHNxdWFyZWQgZXJyb3IpIGluIHRoZSBQb2ludHNSZWcgbW9kZWw/IEFyZSB5b3Ugc2F0aXNmaWVkIHdpdGggdGhpcyB2YWx1ZT8gDQpJdCBpcyB0aGUgbWVhbiBkaWZmZXJlbmNlIG9mIHBvaW50cywgaXQgaXMgYSBzb21ld2hhdCBzYXRpc2Z5aW5nIGFtb3VudCBzaW5jZSB0aGUgYXZlcmFnZSBudW1iZXIgb2YgcG9pbnRzIGluIGEgc2Vhc29uIGlzIDgzNzAuMjQuIE1ha2luZyBvdXIgbnVtYmVyIHZlcnkgc21hbGwgaW4gY29tcGFyaXNvbi4gDQoNCkkuIEhvdyB3ZWxsIGRpZCB5b3VyIHByZWRpY3Rpb25zIHdvcmsgb24gdGhlIHRlc3RpbmcgZGF0YXNldD8gUmVwb3J0IHRoZSBuZXcgUjIgYW5kIFJNU0UuIA0KSXQgcGVyZm9ybWVkIHdlbGwsIGdpdmluZyBhIDgxLjI3JSByZXN1bHQuDQoNCmBgYHtyfQ0KTkJBX3Rlc3QgPSByZWFkLmNzdigiTkJBX3Rlc3QuY3N2IikNCmBgYA0KYGBge3J9DQojIE1ha2UgcHJlZGljdGlvbnMgb24gdGVzdCBzZXQNClBvaW50c1ByZWRpY3Rpb25zID0gcHJlZGljdChQb2ludHNSZWc0LCBuZXdkYXRhPU5CQV90ZXN0KQ0KYGBgDQpgYGB7cn0NCiMgQ29tcHV0ZSBvdXQtb2Ytc2FtcGxlIFJeMg0KU1NFID0gc3VtKChQb2ludHNQcmVkaWN0aW9ucyAtIE5CQV90ZXN0JFBUUyleMikNClNTVCA9IHN1bSgobWVhbihOQkEkUFRTKSAtIE5CQV90ZXN0JFBUUyleMikNClIyID0gMSAtIFNTRS9TU1QNClIyDQpgYGANCg0KYGBge3J9DQojIENvbXB1dGUgdGhlIFJNU0UNClJNU0UgPSBzcXJ0KFNTRS9ucm93KE5CQV90ZXN0KSkNClJNU0UgDQpgYGANCg0K