# Packages and data
library(spatstat)
library(dplyr)
library(splines)
dataNBA <- read.csv(unz("data/newDataNBA.zip", "newDataNBA.csv"))
# The observation window
crcl <- function(x0, y0, r, span = r, nsteps = 100) {
x <- seq(x0 - span, x0 + span, length.out = nsteps)
ylo <- y0 - sqrt(r^2 - (x - x0)^2)
yup <- y0 + sqrt(r^2 - (x - x0)^2)
data.frame(x = x, ylo = ylo, yup = yup)
}
crcl2 <- crcl(x0 = 0, y0 = -41.75, r = 34, span = 25, nsteps = 1000)
Z.m <- owin(poly = list(
x = c(-25, -3, 3, 25, 25, rev(crcl2$x), -25, -25),
y = c(-47, -43, -43, -47, -18.70656, rev(crcl2$yup), -18.70656, -47)
))
rm(crcl, crcl2)
# The hyperframe object. The following warnings are simply due to a few
# points recorded in locations we do not wish to consider since they are too
# far from plausible shooting areas.
hy.data <- dataNBA |>
select(TEAM_NAME, newreal_x, newreal_y) |>
group_nest(TEAM_NAME) |>
rowwise() |>
mutate(
pts = list(ppp(data$newreal_x, data$newreal_y, window = Z.m))
) |>
select(-data) |>
as.hyperframe()
#> Warning: There were 30 warnings in `mutate()`.
#> The first warning was:
#> ℹ In argument: `pts = list(ppp(data$newreal_x, data$newreal_y, window = Z.m))`.
#> ℹ In row 1.
#> Caused by warning:
#> ! 54 points were rejected as lying outside the specified window
#> ℹ Run `dplyr::last_dplyr_warnings()` to see the 29 remaining warnings.
mppm(
formula = pts ~ y,
data = hy.data,
random = ~ bs(x, degree = 3, df = 3) | TEAM_NAME,
gcontrol = list(msVerbose = TRUE, msMaxIter = 150)
)
#> iteration 1
#> 0: 8683290.2: 3.68734 4.30950 0.388302 4.13124 17.0227 -15.1854 -72.8263 -103.675 -98.0104 14.2680
#> 1: 8683289.5: 3.68293 4.28391 0.361249 4.12979 17.0245 -15.1836 -72.8267 -103.675 -98.0104 14.2680
#> 2: 8683288.8: 3.67806 4.30993 0.334687 4.12931 17.0265 -15.1817 -72.8263 -103.675 -98.0104 14.2680
#> 3: 8683287.6: 3.66510 4.28176 0.266636 4.12714 17.0319 -15.1761 -72.8267 -103.675 -98.0104 14.2681
#> 4: 8683286.2: 3.62652 4.32416 0.130109 4.12782 17.0504 -15.1572 -72.8264 -103.675 -98.0103 14.2680
#> 5: 8683285.2: 3.53435 4.28799 0.0769331 4.16922 17.1143 -15.0924 -72.8272 -103.675 -98.0102 14.2666
#> 6: 8683278.8: 3.12283 4.26497 0.00577310 5.39128 18.0247 -14.1800 -72.8275 -103.666 -98.0093 14.2497
#> 7: 8683274.9: 2.96704 4.27737 -0.00365739 5.91342 18.8649 -13.3340 -72.8282 -103.663 -98.0084 14.2428
#> 8: 8683274.6: 2.97813 4.32281 -0.00140261 5.91439 18.8662 -13.3326 -72.8276 -103.663 -98.0084 14.2428
#> 9: 8683273.9: 2.98728 4.29981 -0.00280936 5.93205 18.8913 -13.3073 -72.8280 -103.663 -98.0084 14.2426
#> 10: 8683273.4: 3.06956 4.31618 0.0110332 5.94824 18.9165 -13.2815 -72.8278 -103.662 -98.0084 14.2425
#> 11: 8683272.3: 3.09070 4.29678 0.00116513 6.03041 19.0332 -13.1637 -72.8282 -103.662 -98.0082 14.2414
#> 12: 8683262.2: 3.56422 4.31927 -0.255118 8.13110 22.0304 -10.1362 -72.8315 -103.647 -98.0051 14.2129
#> 13: 8683252.5: 3.83048 4.31909 0.121384 10.1544 25.0291 -7.04540 -72.8405 -103.636 -98.0005 14.1833
#> 14: 8683247.3: 3.94849 4.31948 0.0385093 12.0869 28.0477 -3.88554 -72.8575 -103.624 -97.9974 14.1533
#> 15: 8683243.8: 4.25927 4.31546 -0.00777101 14.0100 31.0789 -0.744458 -72.8712 -103.614 -97.9935 14.1209
#> 16: 8683242.1: 4.44667 4.31341 0.0287162 15.9638 34.0813 2.41517 -72.8898 -103.602 -97.9899 14.0906
#> 17: 8683240.2: 4.54793 4.31272 0.0538241 17.9220 37.0588 5.59955 -72.9137 -103.590 -97.9867 14.0613
#> 18: 8683239.4: 4.69398 4.31462 0.0308070 19.8668 40.0457 8.78163 -72.9339 -103.578 -97.9834 14.0313
#> 19: 8683238.8: 4.80812 4.31597 0.0165021 21.8157 43.0189 11.9754 -72.9552 -103.566 -97.9803 14.0018
#> 20: 8683238.2: 4.92565 4.31644 0.0159158 24.2078 46.6473 15.8971 -72.9808 -103.552 -97.9765 13.9660
#> 21: 8683238.: 5.04819 4.31619 0.0243189 26.6012 50.2759 19.8175 -73.0037 -103.537 -97.9727 13.9301
#> 22: 8683237.7: 5.13762 4.31634 0.0249592 28.9952 53.8862 23.7553 -73.0256 -103.522 -97.9690 13.8947
#> 23: 8683237.6: 5.28686 4.31676 0.0250268 32.4857 59.1615 29.4908 -73.0545 -103.500 -97.9636 13.8427
#> 24: 8683237.4: 5.28509 4.31688 0.0245291 32.9053 59.7807 30.1902 -73.0542 -103.498 -97.9630 13.8368
#> 25: 8683237.4: 5.34161 4.31702 0.0244450 34.5804 62.3007 32.9503 -73.0637 -103.487 -97.9605 13.8121
#> 26: 8683237.3: 5.49892 4.31724 0.0247337 39.2837 69.3748 40.7012 -73.0866 -103.458 -97.9534 13.7427
#> 27: 8683237.2: 5.46963 4.31706 0.0249448 38.7511 68.5637 39.8303 -73.0771 -103.461 -97.9543 13.7507
#> 28: 8683237.2: 5.52673 4.31709 0.0249489 40.7556 71.5698 43.1397 -73.0791 -103.448 -97.9513 13.7213
#> 29: 8683237.2: 5.59854 4.31711 0.0248718 43.3155 75.4079 47.3670 -73.0795 -103.432 -97.9475 13.6838
#> 30: 8683237.1: 5.66367 4.31706 0.0247171 45.8758 79.2403 51.5993 -73.0722 -103.416 -97.9437 13.6463
#> 31: 8683237.1: 5.71251 4.31685 0.0245382 48.1520 82.6390 55.3683 -73.0536 -103.402 -97.9404 13.6131
#> 32: 8683237.1: 5.76560 4.31661 0.0246346 50.4280 86.0413 59.1339 -73.0383 -103.388 -97.9371 13.5799
#> 33: 8683237.0: 5.81377 4.31623 0.0248040 52.7043 89.4392 62.9035 -73.0137 -103.373 -97.9338 13.5467
#> 34: 8683237.0: 5.86625 4.31560 0.0249265 55.4677 93.5584 67.4840 -72.9699 -103.356 -97.9298 13.5066
#> 35: 8683237.0: 5.92249 4.31511 0.0248372 58.2309 97.6810 72.0617 -72.9321 -103.338 -97.9258 13.4663
#> 36: 8683237.0: 5.95514 4.31459 0.0246937 60.0999 100.464 75.1618 -72.8914 -103.326 -97.9231 13.4392
#> 37: 8683237.: 6.00440 4.31363 0.0247265 62.9730 104.742 79.9281 -72.8225 -103.308 -97.9190 13.3975
#> 38: 8683237.: 6.06829 4.31228 0.0247530 66.7565 110.374 86.2054 -72.7248 -103.284 -97.9136 13.3426
#> 39: 8683237.: 6.12327 4.31046 0.0247952 70.5403 115.998 92.4893 -72.5921 -103.260 -97.9082 13.2879
#> 40: 8683237.: 6.18304 4.30887 0.0247954 74.3239 121.627 98.7697 -72.4769 -103.236 -97.9028 13.2330
#> 41: 8683237.: 6.18374 4.30864 0.0247453 74.4994 121.886 99.0624 -72.4599 -103.235 -97.9026 13.2305
#> 42: 8683237.: 6.18508 4.30847 0.0247423 74.6750 122.147 99.3540 -72.4527 -103.234 -97.9023 13.2280
#> 43: 8683237.: 6.18998 4.30834 0.0247378 75.0261 122.669 99.9371 -72.4392 -103.232 -97.9018 13.2229
#> Error in `lme.formula()`:
#> ! nlminb problem, convergence error code = 1
#> message = singular convergence (7)Created on 2025-09-28 with reprex v2.1.1.9000
Session info
sessioninfo::session_info()
#> Warning in system2("quarto", "-V", stdout = TRUE, env = paste0("TMPDIR=", :
#> running command '"quarto"
#> TMPDIR=C:/Users/andre/AppData/Local/Temp/RtmpuePdZr/file1e2870ae5899 -V' had
#> status 1
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.4.2 (2024-10-31 ucrt)
#> os Windows 11 x64 (build 26100)
#> system x86_64, mingw32
#> ui RTerm
#> language (EN)
#> collate Italian_Italy.utf8
#> ctype Italian_Italy.utf8
#> tz Europe/Rome
#> date 2025-09-28
#> pandoc 3.2 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)
#> quarto NA @ C:\\Users\\andre\\AppData\\Local\\Programs\\Quarto\\bin\\quarto.exe
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> abind 1.4-8 2024-09-12 [1] CRAN (R 4.4.2)
#> cli 3.6.5 2025-04-23 [1] CRAN (R 4.4.2)
#> deldir 2.0-4 2024-02-28 [1] CRAN (R 4.4.2)
#> digest 0.6.37 2024-08-19 [1] CRAN (R 4.4.2)
#> dplyr * 1.1.4 2023-11-17 [1] CRAN (R 4.4.2)
#> evaluate 1.0.3 2025-01-10 [1] CRAN (R 4.4.2)
#> fastmap 1.2.0 2024-05-15 [1] CRAN (R 4.4.2)
#> fs 1.6.5 2024-10-30 [1] CRAN (R 4.4.2)
#> generics 0.1.3 2022-07-05 [1] CRAN (R 4.4.2)
#> glue 1.8.0 2024-09-30 [1] CRAN (R 4.4.2)
#> goftest 1.2-3 2021-10-07 [1] CRAN (R 4.4.2)
#> htmltools 0.5.8.1 2024-04-04 [1] CRAN (R 4.4.2)
#> knitr 1.50.4 2025-07-11 [1] https://yihui.r-universe.dev (R 4.4.2)
#> lattice 0.22-6 2024-03-20 [2] CRAN (R 4.4.2)
#> lifecycle 1.0.4 2023-11-07 [1] CRAN (R 4.4.2)
#> magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.4.2)
#> Matrix 1.7-1 2024-10-18 [2] CRAN (R 4.4.2)
#> mgcv 1.9-3 2025-04-04 [1] CRAN (R 4.4.2)
#> nlme * 3.1-166 2024-08-14 [2] CRAN (R 4.4.2)
#> pillar 1.10.2 2025-04-05 [1] CRAN (R 4.4.3)
#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.4.2)
#> polyclip 1.10-7 2024-07-23 [1] CRAN (R 4.4.2)
#> R6 2.6.1 2025-02-15 [1] CRAN (R 4.4.2)
#> reprex 2.1.1.9000 2025-02-25 [1] Github (tidyverse/reprex@07cd5d7)
#> rlang 1.1.6 2025-04-11 [1] CRAN (R 4.4.3)
#> rmarkdown 2.29 2024-11-04 [1] CRAN (R 4.4.2)
#> rpart * 4.1.23 2023-12-05 [2] CRAN (R 4.4.2)
#> rstudioapi 0.17.1 2024-10-22 [1] CRAN (R 4.4.2)
#> sessioninfo 1.2.3 2025-02-05 [1] CRAN (R 4.4.2)
#> spatstat * 3.4-0.001 2025-08-24 [1] https://spatstat.r-universe.dev (R 4.4.2)
#> spatstat.data * 3.1-8 2025-08-24 [1] https://spatstat.r-universe.dev (R 4.4.2)
#> spatstat.explore * 3.5-2 2025-08-24 [1] https://spatstat.r-universe.dev (R 4.4.2)
#> spatstat.geom * 3.5-0.008 2025-08-19 [1] https://spatstat.r-universe.dev (R 4.4.2)
#> spatstat.linnet * 3.3-1 2025-08-24 [1] https://spatstat.r-universe.dev (R 4.4.2)
#> spatstat.model * 3.4-0.004 2025-09-01 [1] Github (spatstat/spatstat.model@873a75e)
#> spatstat.random * 3.4-1 2025-05-20 [1] CRAN (R 4.4.2)
#> spatstat.sparse 3.1-0 2024-06-21 [1] CRAN (R 4.4.2)
#> spatstat.univar * 3.1-4 2025-07-13 [1] https://spatstat.r-universe.dev (R 4.4.2)
#> spatstat.utils 3.1-5.001 2025-07-25 [1] https://spatstat.r-universe.dev (R 4.4.3)
#> tensor 1.5 2012-05-05 [1] CRAN (R 4.4.2)
#> tibble 3.2.1 2023-03-20 [1] CRAN (R 4.4.2)
#> tidyselect 1.2.1 2024-03-11 [1] CRAN (R 4.4.2)
#> vctrs 0.6.5 2023-12-01 [1] CRAN (R 4.4.2)
#> withr 3.0.2 2024-10-28 [1] CRAN (R 4.4.2)
#> xfun 0.52 2025-04-02 [1] CRAN (R 4.4.2)
#> yaml 2.3.10 2024-07-26 [1] CRAN (R 4.4.2)
#>
#> [1] C:/Users/andre/AppData/Local/R/win-library/4.4
#> [2] C:/Program Files/R/R-4.4.2/library
#> * ── Packages attached to the search path.
#>
#> ──────────────────────────────────────────────────────────────────────────────