Skip to content

Update manuscript for RFP storage of large diagonal blocks beyond [1,1] - #10

Draft
dmbates wants to merge 18 commits into
mainfrom
JDataScienceRFP
Draft

Update manuscript for RFP storage of large diagonal blocks beyond [1,1]#10
dmbates wants to merge 18 commits into
mainfrom
JDataScienceRFP

Conversation

@dmbates

@dmbates dmbates commented Aug 1, 2026

Copy link
Copy Markdown

This version uses the more compact storage available in the db/FasterrankUpdate branch of MixedModels.jl

@dmbates
dmbates marked this pull request as draft August 1, 2026 19:37
@dmbates
dmbates requested a review from palday August 1, 2026 19:37
@dmbates
dmbates requested a review from ajinkya-k August 2, 2026 18:26
@dmbates

dmbates commented Aug 2, 2026

Copy link
Copy Markdown
Author

@palday and @ajinkya-k Could you, at your convenience, take a look at this re-arrangment of the JDS version of the paper. I moved the discussion of the RFP format into section 3.2 because it is now the default for dense triangular matrices of dimension > 1000. To reproduce the timings you will need to use the db/FasterrankUpdate branch of the MixedModels.jl package.

I can't guarantee that this version is error-free, just that it is the version I had when I got tired of re-reading the text over and over again.

I guess we should comment on the interpretation of results for some of the movielens fits. One possible approach is to look at the "most popular" 20 movies as determined by raw mean scores and BLUPS and how that changes according the movie-cutoff value in the model fit. (I.e. are there movies that have very few but very high ratings?) Any other suggestions?

@dmbates

dmbates commented Aug 3, 2026

Copy link
Copy Markdown
Author

Regarding how the mixed model helps with analysis of the ml32m data set, I did find that movies with very few ratings had both the highest and the lowest mean ratings

julia> sort!(combine(groupby(DataFrame(tbl), [:movieId, :mnrtngs]), :rating => mean), :rating_mean; rev=true)
84432×3 DataFrame
   Row │ movieId  mnrtngs  rating_mean 
       │ Int32    Int32    Float32     
───────┼───────────────────────────────
     1257777        1          5.0
     2257983        1          5.0
     3240154        1          5.0
     4200016        3          5.0
     5196787        1          5.0
     6223908        1          5.0
     7221334        1          5.0
     8279542        2          5.0
     9205593        1          5.0
    10292047        1          5.0
    11226640        2          5.0
    12270540        1          5.0
    13117656        1          5.0
    14189587        1          5.0
    15206168        1          5.0
    16141064        1          5.0
    17172071        1          5.0
    18254544        1          5.0
    19276277        1          5.0
                     
 84414160108        1          0.5
 84415160498        1          0.5
 84416160523        1          0.5
 84417160742        1          0.5
 84418160784        1          0.5
 84419160994        1          0.5
 84420161000        1          0.5
 84421161004        1          0.5
 84422203529        1          0.5
 84423203589        1          0.5
 84424203707        1          0.5
 84425155577        1          0.5
 84426234239        1          0.5
 84427244112        1          0.5
 84428131288        1          0.5
 84429180659        1          0.5
 84430244546        1          0.5
 84431254997        1          0.5
 84432150562        1          0.5
                     84394 rows omitted

@dmbates

dmbates commented Aug 7, 2026

Copy link
Copy Markdown
Author

I have added the formulation of the gradient suggested by Claude fable and cited the Murray (2016) arxiv.org paper on using symbolic differentiation for the Cholesky factor. Unfortunately the citation style used by JDS reduces this to just the author and title without mention of the arxiv identifier. @palday or @ajinkya-k if you can work out how to fix this please do. I feel this is ready for resubmission after addition of some brief discussion of the results of the ml-32m fits. My thought was to concentrate on the most popular movies and to show that those at the extremes for simple averages have very few ratings whereas the extremes of conditional modes for the movies have many ratings. Also to show that the conditional modes for movies with many ratings are not affected strongly by changing the movie cutoff or the user cutoff.

@palday and @ajinkya-k If possible I would appreciate your comments over the weekend.

@dmbates

dmbates commented Aug 8, 2026

Copy link
Copy Markdown
Author

I did check on the number of ratings for movies with extreme average ratings (i.e. average rating of 0.5 or 5.0) and the vast majority have only a single rating

julia> freqtable(r5, :mnrtngs)
4-element Named Vector{Int64}
mnrtngs  │ 
─────────┼─────
11359
280
35
41

julia> size(r5)
(1445, 3)

julia> freqtable(filter(x -> x.rating_mean == 0.5, mnrtng), :mnrtngs)
5-element Named Vector{Int64}
mnrtngs  │ 
─────────┼─────
11167
298
315
45
91

Now I need to go back to a fit of the whole data set to get the conditional modes of the movie random effects.

Does this seem like a suitable direction to respond to the question of what we learn about the movie ratings by fitting these models?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants