knitr::opts_chunk$set(echo = F) Sys.setlocale("LC_ALL", "Catalan_Spain.1252") #options(encoding = "latin1") require(ggplot2) require(reshape2) require(igraph) require(visNetwork) require(kableExtra) require(dplyr) require(gridExtra) require(cowplot) require(plotly) source("sociograma_helpers.R") set.seed(1111)
El sociograma és una tècnica d'anàlisi de dades que permet visualitzar de forma gràfica diferents variables implicades en les relacions entre subjectes. A nivell educatiu, suposa una eina per comprendre el sistema d'interaccions socials d'un grup-classe, aportant informació sobre la intensitat i la qualitat de les relacions entre els alumnes. Conèixer la posició sociomètrica de cada estudiant, així com comprendre els subgrups dins l'aula ens permet elaborar estratègies per facilitar la convivència escolar i influir en el benestar dels alumnes atenent les seves necessitats.
Aquesta és una versió beta de l'informe resultat del Sociograma Àtom als cicles mitjà is superior, tant a nivell estètic com de continguts. Aquest informe està realitzat sobre dades simulades, i per tant els perfils sociomètrics dels nens i nenes poden no tenir sentit. Trobareu el document complet de preguntes en un fitxer que acompanya aquest informe. En totes les preguntes els nens i nenes han de triar els tres companys que s'adeqüin millor al que es demana.
Si trobeu errors o conceptes o gràfics que no s'entenen si us plau feu-nos-ho saber a info\@projecteorbita.cat.
######## Manipulacions inicials ########### # importem soc = read.csv('Preguntes sociograma - Sociograma_CMS.csv', fileEncoding = "UTF-8") colnames(soc)[1:2] = c("noms", "num") ## En cas que sigui necessari, si hi ha missingns en els números i noms de nens (de cada tres només n'han posat un) # soc$número =ffill(soc$número, NA) # soc$nom = ffill(soc$nom, "") # Calculem el recompte de quantes vegades cada nen ha estat anomenat en cada categoria: num_anomenats = 3 # quants nens es poden anomenar en totes les categories - la majoria de funcions depenen explícitament d'aquest número, però potser no totes; precaució en canviar-lo # matriu que calcula el número de vegades que s'ha estat anomenat en cada categoria mat = matrix(data = 0, nrow = nrow(soc)/num_anomenats, ncol = ncol(soc)-2) for (j in 1:ncol(mat)){ for (i in 1:nrow(mat)){ mat[i,j] = sum(soc[,j+2]==i) } } colnames(mat) = colnames(soc[,3:ncol(soc)]) noms = as.character(soc$nom[seq(1, nrow(soc), num_anomenats)]) # faig un vector amb els noms, que necessitaré més endavant # Estandaritzem tots els resultats: mat_est = scale(mat) ###### Aquí s'acaben les manipulacions inicials #######
# Calculem l'impacte total i la preferència total i les seves estandaritzacions: impacte = as.data.frame(cbind(mat[,1], mat[,2], mat[,3], mat[,4])) impacte_est = scale(impacte) imp = mat[,1] + mat[,2] + mat[,3] + mat[,4] pref_feina = mat[,1] - mat[,2] pref_jugar = mat[,3] - mat[,4] pref = pref_feina + pref_jugar imp_pref = cbind(imp, pref, pref_feina, pref_jugar) imp_pref_est = scale(imp_pref)
# Disrupció (antiga agressivitat) dis_directe = cbind( mat[,10], mat[,12], mat[,14], mat[,16]) dis_relacional = cbind( mat[,22], mat[,24], mat[,25], mat[,26]) dis_total = rowSums(dis_relacional) + rowSums(dis_directe) disrupcio = cbind(dis_relacional, dis_directe, dis_total) disrupcio_est = scale(disrupcio) Disrupcio = cbind.data.frame(dis_total, dis_directe[,4], rowSums(dis_directe[,1:3]), rowSums(dis_relacional)) rownames(Disrupcio) = noms colnames(Disrupcio) = c("Disrupció total", "Disrupció física", "Disrupció verbal", "Disrupció relacional") Disrupcio$noms = as.factor(rownames(Disrupcio)) # Ara en fem un posant 1 en els que són significativament liantes Disrupcio_sino = as.data.frame(ifelse(scale(Disrupcio[,-ncol(Disrupcio)])>1, 1, 0)) rownames(Disrupcio_sino) = noms Disrupcio_sino$noms = rownames(Disrupcio_sino)
# Prosocialitat/cooperació: prosocialitat = cbind(mat[,7], mat[,8], mat[,9], mat[,18]) prosocialitat_est = scale(prosocialitat) prosocialitat_total = rowSums(prosocialitat) prosocialitat_total_est = scale(rowSums(prosocialitat)) Prosocialitat = prosocialitat_total Pro_sino = prosocialitat_est > 1 Pro_sino = ifelse(Pro_sino, 1, 0) Prosocialitat = as.data.frame(Prosocialitat) Pro_sino = as.data.frame(Pro_sino) rownames(Prosocialitat) = noms rownames(Pro_sino) = noms colnames(Prosocialitat) = c("Prosocialitat")
# Victimisme victima_directe = cbind(mat[,11], mat[,13], mat[,15], mat[,17], mat[,19]) victima_directe_total = rowSums(victima_directe) victima_relacional = cbind(mat[,21], mat[,25]) victima_relacional_total = rowSums(victima_relacional) victima = as.data.frame(cbind(victima_directe, victima_relacional)) victima_total = victima_directe_total + victima_relacional_total victima_est = scale(victima) Victimitzacio = cbind(victima_total, victima_directe[,4], rowSums(victima_directe[,1:3]), victima_relacional_total) colnames(Victimitzacio) = c("Total víctima", "Víctima física", "Víctima verbal", "Víctima relacional") Vict_sino = ifelse(victima_est > 1, 1, 0) rownames(Victimitzacio) = noms rownames(Vict_sino) = noms Victimitzacio = as.data.frame(Victimitzacio) Victimitzacio$noms = rownames(Victimitzacio)
academic = as.data.frame(cbind(mat[,38], mat[,40], mat[,39], mat[,41])) colnames(academic) = c("Bones notes", "Participa", "Males notes", "No participa") academic_est = scale(academic) academic_total = mat[,38] + mat[,40] - mat[,39] - mat[,41] academic_total_est = scale(academic_total) academic_sino = ifelse(academic_total_est < -1,1,0) academic[,3] = - academic[,3] academic[,4] = - academic[,4] academic$noms = factor(noms, levels = as.character(noms))
# estat d'ànim percebut (emocional) estat_anim = as.data.frame(cbind(mat[,28], mat[,29], mat[,30], mat[,31])) colnames(estat_anim) = c("Dissatisfacció", "Enuig", "Alegria", "Tristor") estat_anim_est = scale(estat_anim) estat_anim_total = - estat_anim[,1] - estat_anim[,2] + estat_anim[,3] - estat_anim[,4] estat_anim_total_est = scale(estat_anim_total) estat_anim_sino = ifelse(estat_anim_total_est< -1,1,0) estat_anim = -estat_anim estat_anim$Alegria = -estat_anim$Alegria estat_anim$noms = factor(noms, levels = as.character(noms))
# caràcter caracter = as.data.frame(cbind(mat[,32], mat[,33], mat[,34], mat[,35], mat[,36], mat[,37])) colnames(caracter) = c("Lideratge", "No lideratge", "Autonomia", "No autonomia", "Socialització", "No socialització") caracter_est = scale(caracter) caracter_total = - caracter[,1] - caracter[,2] + caracter[,3] - caracter[,4] + caracter[,5] - caracter[,6] caracter_total_est = scale(caracter_total) caracter_sino = ifelse(caracter_total_est< -1,1,0) caracter[,2] = -caracter[,2] caracter[,4] = -caracter[,4] caracter[,6] = -caracter[,6] caracter$noms = factor(noms, levels = as.character(noms))
estatus = cbind.data.frame(mat[,1:6],mat[,19], mat[,26], mat[,27]) estatus_est = scale(estatus)
Comportament agressiu físic, verbal o relacional cap als altres.
Prové de les pregunes:
Qui molesta als altres?
Qui insulta als altres?
Qui pega als altres?
Qui diu coses dolentes dels altres?
Qui no deixa participar?
Disrupcio = Disrupcio[,c(5,2:4,1)] names(Disrupcio)[1] = "Noms" agr.m <- melt(Disrupcio[1,1:4], id.vars = "Noms") barres = grafic_barres_individual(agr.m, max(Disrupcio[2:4]), paleta) formatge = grafic_formatge(agr.m, "disruptives", paleta)
title <- ggdraw() + draw_label(paste0(Disrupcio$Noms[1] ,"\nComportament disruptiu"), fontface='bold') pg = plot_grid(barres, formatge, scale = c(1, 0.75)) plot_grid(title, pg, ncol=1, rel_heights=c(0.1, 1)) # rel_heights values control title margins
El grup coincideix en que té un coportament de disrupció relacional cap als altres.
Grau de comportament agressiu rebut provinent dels altres.
Prové de les preguntes:
A qui molesten?
A qui insulten?
A qui peguen?
De qui diuen coses dolentes?
A qui no deixen participar?
#dis_ind = Disrupcio[1,1:4] Victimitzacio = Victimitzacio[,c(5,2:4,1)] names(Victimitzacio)[1] = "Noms" vic.m <- melt(Victimitzacio[1,1:4], id.vars = "Noms") barres = grafic_barres_individual(vic.m, max(Victimitzacio[2:4]), paleta) formatge = grafic_formatge(vic.m, "victimitzadores", paleta)
title <- ggdraw() + draw_label(paste0(Disrupcio$Noms[1] ,"\nComportament victimització"), fontface='bold') pg = plot_grid(barres, formatge, scale = c(1, 0.75)) plot_grid(title, pg, ncol=1, rel_heights=c(0.1, 1)) # rel_heights values control title margins
El grup considera que el/la r Victimitzacio$Noms[1] rep agressions relacionals (com ara ser exclosa del grup).
El comportament acadèmic bla bla
Els resultats d'aquesta àrea s'obtenen a partir de les respostes dels alumnes a les següents preguntes:
Treu bones notes
No treu bones notes
Participa a classe
No participa a classe
academic = academic[,c(5,1:4)] names(academic)[1] = "Noms" academic[,4:5] = -1*academic[,4:5] aca.m <- melt(academic[1,], id.vars = "Noms") barres = grafic_barres_individual(aca.m, max(academic[2:5]), paleta) formatge = grafic_formatge(aca.m, "acadèmiques", paleta)
title <- ggdraw() + draw_label(paste0(academic$Noms[1] ,"\nComportament acadèmic"), fontface='bold') pg = plot_grid(barres, formatge, scale = c(1, 0.75)) plot_grid(title, pg, ncol=1, rel_heights=c(0.1, 1)) # rel_heights values control title margins
fulanito està al pou bla bla
En aquest apartat mesurem factors d'estat d'ànim relacionats que ens poden donar pistes d'un entorn social no satisfactori, tan a nivell personal com escolar. Els resultats d'aquesta àrea s'obtenen a partir de les respostes dels alumnes a les següents preguntes:
Acostuma a estar content
Es queixa sovint
S'enfada amb facilitat
Sol estar trist
estat_anim = estat_anim[,c(5,3,1:2,4)] names(estat_anim)[1] = "Noms" estat_anim[,3:5] = -1*estat_anim[,3:5] ea.m <- melt(estat_anim[1,], id.vars = "Noms") barres = grafic_barres_individual(ea.m, max(estat_anim[2:5]), paleta) formatge = grafic_formatge(ea.m, "d'estat d'ànim", paleta)
title <- ggdraw() + draw_label(paste0(estat_anim$Noms[1] ,"\nEstat d'ànim"), fontface='bold') pg = plot_grid(barres, formatge, scale = c(1, 0.75)) plot_grid(title, pg, ncol=1, rel_heights=c(0.1, 1)) # rel_heights values control title margins
En aquest apartat mesurem qüestions relacionades amb el caràcter dels i les alumnes, en concret aquells relacionats amb lideratge, autonomia i socialització, ja que pensem que són els que més influècien en les relacions socials dins de l'escola. Els resultats d'aquesta àrea s'obtenen a partir de les respostes dels alumnes a les següents preguntes:
Qui lidera els altres
Qui fa el que li diuen els altres
Soluciona els problemes sol
Acostuma a demanar ajuda
Parla molt amb els altres companys de classe
No parla gaire amb els companys de classe
caracter = caracter[,c(7,1:6)] names(caracter)[1] = "Noms" caracter[,c(3,5,7)] = -1*caracter[,c(3,5,7)] car.m <- melt(caracter[1,], id.vars = "Noms") barres = grafic_barres_individual(car.m, max(caracter[2:7]), paleta) formatge = grafic_formatge(car.m, "de caràcter", paleta)
title <- ggdraw() + draw_label(paste0(caracter$Noms[1] ,"\nCaràcter percebut"), fontface='bold') pg = plot_grid(barres, formatge, scale = c(1, 0.75)) plot_grid(title, pg, ncol=1, rel_heights=c(0.1, 1)) # rel_heights values control title margins
En aquest apartat mesurem l'estatus social de cada alumne, tant directe (preguntant directament qui són els seus amics) com indirecte. Els resultats d'aquesta àrea s'obtenen a partir de les respostes dels alumnes a les següents preguntes:
Qui voldries al teu grup per jugar al pati?
Qui NO voldries al teu grup per jugar al pati?
Marca/tria/escull els teus millors amics
Marca/tria/escull els companys que et triarien com a millor amic
Els altres volen estar al seu costat
Pocs companys volen estar amb ell
estatus_bo = cbind.data.frame(noms, estatus[,c(1:6)]) names(estatus_bo)[1] = "Noms" est.m <- melt(estatus_bo[1,], id.vars = "Noms") barres = grafic_barres_individual(est.m, max(caracter[2:7]), paleta) formatge = grafic_formatge(est.m, "d'estatus", paleta)
title <- ggdraw() + draw_label(paste0(estatus_bo$Noms[1] ,"\nEstatus sociomètric"), fontface='bold') pg = plot_grid(barres, formatge, scale = c(1, 0.75)) plot_grid(title, pg, ncol=1, rel_heights=c(0.1, 1)) # rel_heights values control title margins
#dades: agr.m["Noms"] = rep("Disrupció", nrow(agr.m)) vic.m["Noms"] = rep("Victimització", nrow(vic.m) ) aca.m["Noms"] = rep("Acadèmic", nrow(aca.m)) ea.m["Noms"] = rep("Estat d'ànim", nrow(ea.m)) est.m["Noms"] = rep("Estatus sociomètric", nrow(est.m)) names(agr.m)[1] = "ambit" names(vic.m)[1] = "ambit" names(aca.m)[1] = "ambit" names(ea.m)[1] = "ambit" names(est.m)[1] = "ambit"
vic.m$value = -1*vic.m$value aca.m$value[3:4] = -1*aca.m$value[3:4] ea.m$value[-1] = -1*ea.m$value[-1] est.m$value[c(2,4,6)] = -1*est.m$value[c(2,4,6)] tot = rbind.data.frame(agr.m, vic.m, aca.m, ea.m, est.m) tot$ambit = factor(tot$ambit, levels = unique(tot$ambit)) names(tot) = c("Àmbit", "Dimensió", "Tries")
gg = ggplot(tot, aes(x = Àmbit, y = Tries, fill=Dimensió)) + geom_bar(stat='identity') + theme_bw() + labs(title = "Nom1") + ylab("") + xlab("Àmbit") + coord_flip() + theme(legend.title=element_blank()) ggplotly(gg)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.