antongrau / moneca Goto Github PK
View Code? Open in Web Editor NEWMONECA - Mobility Network Clustering Algorithm
MONECA - Mobility Network Clustering Algorithm
Fandt en funktion til at lave virkelig flotte heatmaps. Den bliver normalt brugt til at se på DNA-strenge, men den fungerer også fremragende til moneca, fordi den muliggør at man kan "underopdele" heatmappet, således at man i heatmappet kan skelne forskellige segmenter (eller lavere niveauer i et segment) fra hinanden. Her er et screendump, koden er lidt omstændig men er sådan set (nogenlunde) generaliserbar.
Skriver det her for at for at huske de forskellige ting vi skal tale om i næste måned, og for at få en praksis op at stå om det her:
i segment.quality-funktionen benyttes følgende til at udregne den interne mobilitet:
niveau.qual <- round(diag(mat.niveau)/((rowSums(mat.niveau) +
colSums(mat.niveau))/2), 3)
Det vil sige, der summers både række-vis og kolonnevis, og gennemsnittet af dette tages. Men, intern mobilitet handler vel om en node, og hvor mobilitet fra den bevæger sig hen. Derfor bør kun række-summen medtages, så det kun er fra denne node:
niveau.qual <- round(diag(mat.niveau)/(rowSums(mat.niveau)), 3)
Denne her pakke ser ret moderne ud, og kan muligvis løse problemet med de dårligt tegnede klynger når der er mange observationer, som hos mig?
https://cran.r-project.org/web/packages/ggalt/vignettes/ggalt_examples.html
se under "geom_encircle()"
Jeg har lavet et par funktioner til at se på inflow og outflow af mobilitet på specifikke discogrupper/segmenter, og sætte dem op i en dataframe. Jeg har arbejdet en hel del med Moneca nu og jeg tror faktisk det er det her, der virkelig er hvor dens (næste) potentiale ligger, udover at lave selve klyngedannelsen og kortet: specifikke mobilitetsanalyser.
Tit overlapper labels med gg.jonas-funktionen, hvilket gør det svært at aflæse noder og nogle gange også hvilke labels der hører til hvilke noder. Måske kunne man implementere ggrepel, der er en extension til ggplot. Den sørger automatisk for at placere labels i plots så de ikke overlapper. Se vignetten her:
https://cran.r-project.org/web/packages/ggrepel/vignettes/ggrepel.html
diag(mob.mat)[which(duplicated(diag(mob.mat)))] <- diag(mob.mat+1)[which(duplicated(diag(mob.mat)))]
diag(mob.mat)[which(duplicated(diag(mob.mat)))] <- diag(mob.mat+1)[which(duplicated(diag(mob.mat)))]
Med segment.edges-funktionen kan man jo inputte RR-mobilitetsmatricen til gg.jonas. Jeg har gerne ville fokusere på bestemte mobilitetskanaler, og bruger denne her metode til at fremhæve de edges, jeg er interesserede i. Følgende legetøjseksempel burde dækkke de fleste brugseksempler:
jobnames <- c("job 1","job 2","job 3","job 4","job 5","job 6","job 7")
jobdat <- matrix(c(
99, 5, 5, 0, 0, 5, 5,
5, 99, 2, 5, 5, 1, 5,
1, 5, 99, 5, 0, 0, 1,
1, 0, 5, 99, 8, 0, 1,
0, 5, 0, 0, 99, 5, 1,
0, 0, 5, 5, 0, 99, 5,
0, 1, 0, 0, 5, 1, 99
),
nrow = 7, ncol = 7, byrow = TRUE,
dimnames = list(jobnames,jobnames
))
mat.e <- jobdat
work.list <- c(1,2,3)
################ avanceret2: segment + ties (uden edges ml ties)
irr.job.indices <- which(!(seq_len(7) %in% work.list))
dvals <- diag(mat.e)
mat.e[irr.job.indices,irr.job.indices] <- 0
#fjerner interne ties i segmenter af interesse (hvis vi bare vil se hvor de går hen)
mat.e[work.list,work.list] <- 0
#kun fra segmenter af interesse til andre segmenter
mat.e[irr.job.indices,work.list] <- 0
#kun til segmenter af interesse fra andre segmenter (modstridende ihft ovenstående)
diag(mat.e) <- dvals
Det her er et gammelt issue, ved ikke om I har rettet det, men skrev med Jonas om det, og ved at Moneca helt sikkert regner forkert her:
_Hej igen Jonas,
Jeg har et spørgsmål til om monecas måde at udregne ikke relativ Risiko, men de forventede sandsynligheder i cellerne, altså skridtet før det. Du skrev engang til mig at når Moneca benyttede marginale distributioner fra to andre variable (altså for alle beskæftigede i to forskudte tidsperioder), så summerede den de marginale sandsynligheder for række og kolonne distributionerne og dividerede den med to, og dette blev brugt til at beregne distributionen. Men det betyder jo at sandsynlighederne for den forventede fordeling i cellerne ikke summer til 1. Det gør det imidlertidig hvis man benytter summen af de marginale frekvenser hver for sig, fremfor at summere og dividere med to. Jeg har vedlagt eksempler på dette vedhæftet.
_
Jeg har vedhæftet et regneeksempel. der både benytter Monecas nuværende forkerte måde, og den korrekte. Det er heldigvis kun hvis der er stor forskel på den marginale fordeling af række og kolonne variablen (dvs i mit og jeres tilfælde, til og fra jobs), at det giver fejlberegninger med betydning, hvilket sjældent er tilfældet, indtil videre har det jo bare været antallet af beskæftigede forskudt med et år, altså ikke den store forskel. Men det bliver et reelt problem hvis man benytter Moneca på noget, hvor "til" og "fra" indeholder større forskelle.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.