Introduktion til R #3

Introduktion til R, 2. udgave, ude nu. Køb den før din nabo. Her!

I 2022 udgav jeg bogen Introduktion til R på Hans Reitzels Forlag. Bogens primære – hvis ikke eneste – formål var, at klæde læseren på til at bruge R. Det viste sig heldigvis, at der var en efterspørgsel efter sådan en bog, hvorfor jeg blev enig med forlaget om at arbejde på en 2. udgave.

Fokus var i 1. udgave på at skrive en bog. Det var ingenlunde en let opgave. Jeg gjorde hvad jeg kunne for, at der var tilstrækkeligt med godt indhold til, at jeg kunne retfærdiggøre at kalde det for en bog (altså mere end blot en lang guide, der lige så godt kunne være frit tilgængelig online). Fokus i 2. udgave er ikke længere blot at skrive en bog, men at redigere en bog. Det indebærer blandt andet at fjerne overflødige sætninger og ord, der kunne skabe plads til andet substantielt indhold. Det skulle vise sig at være lige så svært som at skrive en bog, men jeg er tilfreds med slutproduktet.

I dette indlæg vil du finde en beskrivelse af de ændringer, der er foretaget. Det vil sandsynligvis primært være af interesse for dem, der bruger bogen i deres undervisning, så det er klart, hvilke ændringer man skal tage højde for, hvis man har anvendt 1. udgave. Alternativt kan du vurdere, om det vil være pengene værd at investere i 2. udgave, hvis du allerede har investeret i 1. udgave.

I den nye udgave vil du kunne finde følgende større ændringer:

  • Introduktion til R – Nu i farver. 1. udgave af bogen var i sort/hvid. Det er ærgerligt, da der er et stort fokus på visualisering af data i bogen (og en masse {ggplot2} figurer). Eller som Sine Zambach helt korrekt formulerede det i sin konstruktive anmeldelse af bogen: “Introduktion til R kunne dog godt være trykt i farve. Da forfatteren bruger en del plads på visualiseringer – og dermed også farvekoder i sine grafer er det lidt trist, at det kun kommer til udtryk i gråtoner i den trykte bog.” 2. udgave er heldigvis i farver – og som en vigtig tilføjelse kan jeg nævne, at figurerne nu er trykt som vektorgrafik.
  • Opdateret R og RStudio. Den nye udgave tager udgangspunkt i R version 4.3.1. Det betyder også at al tekst, billeder m.v. er opdateret, så det reflekterer den nyeste version af både R og RStudio. Jeg har ligeledes gennemgået al kode for at sikre, at alt virker med den seneste version af R (samt seneste version af de relevante pakker, som beskrevet nedenfor). Siden 1. udgave har virksomheden bag RStudio skiftet navn til Posit, hvorfor jeg også har opdateret dette og ændret relevante links i installationsguiden.
  • Revisioner i forhold til pakker. Grundtanken er at man skal kunne læse bogen ved primært at anvende {tidyverse} og færrest mulige andre pakker. I 2. udgave har jeg fjernet flere kodeeksempler fra pakker, der ikke er nødvendige. Det indebærer pakkerne {janitor}, {gvlma}, {GGally}, {ggthemes}, {report} og {tidylog}. Jeg er stor tilhænger af de nævnte pakker, og jeg anbefaler og citerer dem stadig i bogen, hvor det er relevant, men jeg har forsøgt at være mere minimalistisk i 2. udgave. Ligeledes er al kode og output opdateret til at kunne arbejde med de seneste udgaver af de respektive pakker. Den største ændring her er i kapitel 10, hvor funktionen plot_cme() fra {marginaleffects} er opdateret (blandt andet er navnet på en af tilføjelserne ændret, så funktionen melder følgende fejl hvis man bruger koden i 1. udgave: “The `effect` argument has been renamed to `variables`.”).
  • Nyt kapitel om indekskonstruktion. Et af de forslag jeg har fået siden udgivelsen af 1. udgave af bogen er, at det ville være godt med et kapitel omkring indekskonstruktion. I den nye udgave af bogen er sådan et kapitel tilføjet (kapitel 12), hvor det vises, hvordan man laver et indeks og undersøger målingsvaliditet såvel som intern reliabilitet. Jeg overvejede først at introducere pakken {psych} i dette kapitel, men jeg var glad da jeg fandt ud af, at jeg kunne bruge pakken {performance} til alt, jeg havde på hjerte her. Med andre ord kunne jeg introducere mere indhold i 2. udgave uden at tilføje flere pakker.

Der er desuden også en række mindre ændringer:

  1. Korrektion af tekniske fejl og stavefejl. Der er intet værre end at finde en stavefejl i ens bog, efter den er trykt. Heldigvis hjælper det på det, når man kan korrigere fejl og mangler i en ny udgave. Jeg har rettet en lang række mindre fejl i bogen, herunder en gentagelse af pakkenavne (i oversigten over hvilke pakker, bogen vil bruge), et overflødigt mellemrum i indholdsfortegnelsen ved ‘Lav og vælg variable med transmute()’, et fravær af konsistent brug af visse ord (eksempelvis blev både data frame og dataframe brugt i forskellige kapitler), osv.
  2. Fjernet eksempel på figur og tabel fra introduktionskapitel. Introduktionskapitlet gav et eksempel på, hvad man ville kunne lave af figurer og tabeller, når man havde gennemført bogen. Jeg er i princippet ikke imod den slags eksempler, men jeg fandt det overflødigt relativt til, hvad den plads ellers kunne bruges på. Hvis man vil få et indblik i hvad man lærer ved at læse bogen, står det en frit for at bladre den igennem.
  3. Fjernet eksempel med indbyggede objekter i R. I 1. udgave gav jeg et eksempel i afsnit 2.4 på, hvordan R kommer med indbyggede objekter som pi. Da det nok er de færreste der vil finde det pågældende eksempel relevant, når de skal til at lære R, har jeg fjernet det. Min tilgang har mere overordnet være at sikre, at alt der introduceres tidligt i bogen, er vigtigt (need to know), og ikke blot interessant (nice to know).
  4. Opdateringer til polls_2020.csv. Datasættet med partipolitiske meningsmålinger fra 2020 har fået et par opdateringer. For det første har jeg ændret variabelnavnet n til respondenter, da det let kunne blive forvirrende når outputtet fra funktioner også indeholder n, og der sågar er en funktion ved navn dplyr::n(). For det andet har jeg lavet et kvalitetstjek på meningsmålingerne og fjernet meningsmålinger, jeg ikke længere har tiltro til.
  5. Opdateringer til ess_9.sav. Jeg har opdateret datasættet fra European Social Survey, så det nu har tre ekstra variable, der bliver brugt i kapitel 12. Derudover har jeg begrænset antallet af observationer til 1000, så det fylder mindre og ikke er en kopi af alle observationer (som man bør besøge ESS for at tilgå).
  6. Note om indbyggede datasæt. Jeg har tilføjet en kort introduktion til funktionen data(), der giver et overblik over alle indbyggede datasæt i R.
  7. Ændret introduktion af {lubridate}. I tidyverse 2.0.0 blev {lubridate} inkluderet som en af de pakker, der åbnes automatisk, når man åbner tidyverse. Dette tager 2. udgave af bogen højde for.
  8. Tilføjet anbefaling om at skrive koden bogstav for bogstav. I afsnit 1.2 om, hvordan man bør bruge bogen, har jeg tilføjet følgende sætning: “Sørg for ikke blot at kopiere koden men skriv det bogstav for bogstav, da dine fingre husker bedre end dine øjne.” Dette råd kommer oprindeligt – og bogstaveligt – fra et tweet af David Robinson.
  9. Tilføjet pointe om pakken conflicted. Da {conflicted} nu nævnes eksplicit, når man åbner tidyverse, har jeg tilføjet en sætning om, hvorfor denne pakke er relevant og hvad der sker, hvis man åbner den.
  10. Fjernet eksempel med .after. Da der allerede er eksempler med tilføjelsen .before i mutate(), har jeg valgt at fjerne et lignende eksempel med tilføjelsen .after.
  11. Note om AIC() og BIC(). I kapitel 11 omhandlende logistisk regressionsanalyse har jeg tilføjet information om, hvordan man får hhv. AIC- og BIC-værdier fra sin logistiske regressionsmodel.
  12. Erstattet NA_real_ med NA. Med tidyverse 2.0.0 er det ikke længere nødvendigt at være konkret om, hvilken type NA man anvender, når man bruger if_else() og case_when(). I det ene eksempel i bogen, hvor der bruges NA_real_, har jeg nu erstattet det med NA. Det er ikke en dårlig idé at lære om NA_real_, NA_character_, etc., men min bekymring er, at det kan forvirre mere end det gavner i en introduktionsbog.
  13. Fjernet eksempel med ændring af skrifttype i {ggplot2} figur. Noget af den feedback jeg fik allerede før udgivelsen af 1. udgave var, at det hurtigt kan blive kompliceret at ændre en skrifttype i en figur, især på tværs af forskellige systemer og filtyper. Dette har jeg tænkt en del over siden udgivelsen af 1. udgave, og jeg er kommet frem til, at det fungerer bedre uden det pågældende eksempel.
  14. Anbefal Quarto i stedet for rmarkdown. I konklusionskapitlet giver jeg forskellige anbefalinger til, hvad man kan forsøge sig med, når man er færdig med bogen. I 1. udgave anbefalede jeg, at man giver sig i kast med pakken {rmarkdown}, hvis man ønsker at arbejde med dokumenter lavet i R. Siden da har Quarto meldt sin ankomst, og jeg finder det bedre at anbefale dette, hvilket nu er tilfældet i 2. udgave.
  15. Fjernet register. Dette er den måske mest kontroversielle ændring. Der er ikke længere et register i bogen. Der er to grunde til dette. For det første forsøger jeg at minimere antallet af sider (alt nyt indhold, farver, m.v. i 2. udgave har ikke medført en dyrere salgspris). For det andet ser jeg ike et register som værende nødvendigt for at bruge bogen og finde bestemte afsnit, funktioner og eksempler. Der er en udførlig indholdsfortegnelse, og de primære funktioner og muligheder bogen byder på, kan let identificeres her.

Der er sket flere ændringer med tidyverse i løbet af de seneste år, hvoraf nogle af disse ændringer også er relevante, når man bruger tidyverse i undervisningen (se dette indlæg for en oversigt). Jeg overvejede i den forbindelse også at tilføje mere tekst omkring *_join(), nye måder at gruppere data på (med tilføjelsen .by i summarise()), m.v., men jeg har forsøgt at holde bogen så simpel som mulig i forhold til at introducere studerende til R. Jeg hører dog gerne fra undervisere og studerende, hvis de har konkrete idéer til, hvad der mangler.

Det er en balancegang at holde bogen moderne og intuitiv, eksempelvis ved at introducere læseren til de mest pædagogiske redskaber og funktioner i tidyverse, og reproducerbar og tidløs, eksempelvis ved at bruge færrest mulige pakker og funktioner. Jeg synes selv at 2. udgave udgør en kæmpe forbedring i forhold til 1. udgave i forhold til at sørge for, at funktionerne, der anvendes, også vil kunne bruges i deres nuværende form om flere år uden problemer. Med andre ord har jeg med 2. udgave forsøgt at forbedre bogen så meget, at indholdet er lige så aktuelt om et par år som det er nu.

Jeg har også haft en lang række ideer til emner, jeg godt kunne dække, men som ikke rigtigt egner sig til en introduktionsbog. Det indebærer blandt andet kapitler om replikation/dokumentation, funktionel programmering, tekstanalyse, web scraping, hierarkiske modeller, kausalanalyse (DiD, IV, RDD, etc.), Bayesiansk regressionsanalyse, maskinlæring, præsentation af data (tabeller, statistiske dokumenter, dashboards, etc.). Disse kapitler ville passe bedre ind i en ‘Videregående R’ bog.

Kommer der en 3. udgave? Det må guderne vide. Hvis der stadig er interesse for bogen (i.e., hvis der bliver solgt nok eksemplarer), skal jeg nok kunne overtales af Hans Reitzels Forlag til at arbejde på en 3. udgave. Har du forslag, idéer, kommentarer eller lignende til bogen, hører jeg gerne fra dig.

God fornøjelse!