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)

Introducció

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)

Informes individuals

Disrupció

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.

Victimització

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).

Acadèmic

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

Estat d'ànim percebut

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

Caràcter

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

Estatus sociomètric

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

Resum

#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)  


Projecte-Orbita/sociogrames documentation built on Aug. 19, 2020, 12:03 a.m.