This independent analysis is based on data collected from participants who enrolled the 6-week course “Planning for the Digital Learning Transition in K-12 Schools” in September 2013. This course was designed and implemented by the Friday Institute at the North Carolina State University and aimed to help the design and implementation process of the K-12 digital learning initiates (Kellogg, Booth & Oliver, 2014).
Data source. The data sources include 1) the csv file with all participants’ attributes, such as ID, role, experience and location; 2) the csv file with all participants’ discussion data within the course online forum.
Guided questions. In this independent analysis, I am interested in seeing how participants from the instructional technology background engaged in the discussion as they may involve in the planning and implementation process of digital learning initiates. Hence, this analysis is guided by two questions:
which participant role (instructionaltech vs. other) had more more influence on the disucssion?
what are the interactive patterns existing among the participant roles (instructionaltech and. other) in this course?
Data analysis. This section contains five sub-section. Each sub-section provides a description and the matched code blocks to present the details of each step of the analysis.
library(tidygraph)
##
## Attaching package: 'tidygraph'
## The following object is masked from 'package:stats':
##
## filter
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5 ✓ purrr 0.3.4
## ✓ tibble 3.1.6 ✓ dplyr 1.0.8
## ✓ tidyr 1.2.0 ✓ stringr 1.4.0
## ✓ readr 2.1.2 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks tidygraph::filter(), stats::filter()
## x dplyr::lag() masks stats::lag()
library(ggplot2)
library(ggraph)
library(igraph)
##
## Attaching package: 'igraph'
## The following objects are masked from 'package:dplyr':
##
## as_data_frame, groups, union
## The following objects are masked from 'package:purrr':
##
## compose, simplify
## The following object is masked from 'package:tidyr':
##
## crossing
## The following object is masked from 'package:tibble':
##
## as_data_frame
## The following object is masked from 'package:tidygraph':
##
## groups
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
library(readr)
#the edge list
dlt2_ties <- read_csv("data/dlt2-edges.csv")
## Rows: 2584 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (6): Timestamp, Title, Category, Parent, Description, DiscussionID
## dbl (3): Sender, Reciever, CommentID
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
dlt2_edges <- dlt2_ties %>%
group_by(Sender,Reciever) %>%
summarise(weight=n()) %>%
ungroup()
## `summarise()` has grouped output by 'Sender'. You can override using the
## `.groups` argument.
#the node list
dlt2_actors <- read_csv("data/dlt2-nodes.csv")
## Rows: 492 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): role, grades, location, region, country, group, gender
## dbl (6): uid, facilitator, experience2, experience, expert, connect
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
dlt2_nodes <- dlt2_actors %>% mutate(
role2 = case_when(role == "instructionaltech" ~ "instructionaltech",
role != "instructionaltech" ~"other"))
#network object
dlt2_network <- tbl_graph(edges = dlt2_edges,
nodes = dlt2_nodes,
node_key = "uid",
directed = TRUE)
#size
dlt2_network #492 nodes and 2080 edges
## # A tbl_graph: 492 nodes and 2080 edges
## #
## # A directed multigraph with 69 components
## #
## # Node Data: 492 × 14 (active)
## uid facilitator role experience2 experience grades location region country
## <dbl> <dbl> <chr> <dbl> <dbl> <chr> <chr> <chr> <chr>
## 1 1 0 curr… 2 17 gener… IN Midwe… US
## 2 2 0 other 1 3 prima… NC South US
## 3 3 0 inst… 2 20 gener… US South US
## 4 4 0 inst… 2 12 middle TX South US
## 5 5 0 other 1 0 gener… CAN Inter… CA
## 6 6 0 inst… 1 7 gener… CAN Inter… CA
## # … with 486 more rows, and 5 more variables: group <chr>, gender <chr>,
## # expert <dbl>, connect <dbl>, role2 <chr>
## #
## # Edge Data: 2,080 × 3
## from to weight
## <int> <int> <int>
## 1 3 302 1
## 2 6 94 1
## 3 6 244 1
## # … with 2,077 more rows
#component
components(dlt2_network, mode = c("strong")) #245 distict components.
## $membership
## [1] 245 244 154 241 153 154 154 216 152 154 154 230 242 154 151 150 154 154
## [19] 154 154 149 154 154 154 148 154 147 154 154 154 146 154 154 154 243 145
## [37] 143 154 142 154 154 195 154 154 141 154 140 154 239 169 154 154 154 167
## [55] 224 139 138 137 154 154 166 154 154 136 135 134 133 154 154 154 219 154
## [73] 132 154 128 127 154 126 125 208 124 154 154 154 123 122 121 154 120 154
## [91] 119 194 154 154 154 172 213 154 118 154 227 211 193 117 116 154 154 115
## [109] 171 154 154 154 114 154 113 165 154 214 154 112 110 154 234 154 154 154
## [127] 154 154 154 154 164 154 154 154 154 109 154 108 107 106 105 154 238 104
## [145] 103 102 154 154 154 154 101 154 100 99 154 220 154 154 98 154 154 202
## [163] 97 96 95 93 154 92 154 154 154 91 190 154 90 154 154 154 188 154
## [181] 154 89 154 131 154 154 154 154 154 154 88 154 87 86 154 154 154 154
## [199] 163 154 85 225 154 84 162 187 154 154 199 83 161 154 154 154 82 154
## [217] 154 154 81 240 232 80 154 154 79 154 154 78 154 77 160 76 154 75
## [235] 154 154 159 74 154 186 154 94 73 154 154 154 72 71 70 184 154 69
## [253] 95 68 154 185 154 67 66 154 65 64 154 154 154 154 154 154 229 154
## [271] 154 154 154 154 63 62 154 61 204 154 154 60 154 154 154 59 221 154
## [289] 58 57 183 154 233 56 55 154 54 154 53 228 154 154 154 154 52 217
## [307] 129 201 154 154 158 51 50 182 49 154 154 154 130 48 154 154 181 215
## [325] 47 154 46 154 154 45 154 154 154 180 154 154 154 157 44 154 154 154
## [343] 231 154 154 43 154 154 42 203 154 41 156 40 237 236 154 154 191 39
## [361] 154 154 38 37 36 196 154 35 154 189 154 154 154 154 154 168 34 154
## [379] 154 154 154 154 154 154 33 222 154 154 209 32 192 31 30 154 29 154
## [397] 212 154 200 28 154 27 154 26 154 25 154 24 154 155 154 154 154 111
## [415] 23 198 154 22 154 154 154 154 154 170 21 154 179 154 154 154 154 20
## [433] 154 226 178 154 154 19 18 154 210 17 16 15 154 14 154 177 207 13
## [451] 218 12 154 176 154 11 154 154 154 154 144 197 154 10 223 154 9 8
## [469] 7 205 154 6 5 154 235 4 154 175 154 154 154 3 154 154 154 154
## [487] 2 1 206 174 154 173
##
## $csize
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [19] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [37] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [55] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [73] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [91] 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1
## [109] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [127] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [145] 1 1 1 1 1 1 1 1 1 247 1 1 1 1 1 1 1 1
## [163] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [181] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [199] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [217] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [235] 1 1 1 1 1 1 1 1 1 1 1
##
## $no
## [1] 245
#only directed ties
dlt2_network <- dlt2_network %>%
activate(nodes) %>%
mutate(strong_component = group_components(type = "strong"))
as_tibble(dlt2_network)
## # A tibble: 492 × 15
## uid facilitator role experience2 experience grades location region country
## <dbl> <dbl> <chr> <dbl> <dbl> <chr> <chr> <chr> <chr>
## 1 1 0 curr… 2 17 gener… IN Midwe… US
## 2 2 0 other 1 3 prima… NC South US
## 3 3 0 inst… 2 20 gener… US South US
## 4 4 0 inst… 2 12 middle TX South US
## 5 5 0 other 1 0 gener… CAN Inter… CA
## 6 6 0 inst… 1 7 gener… CAN Inter… CA
## 7 7 0 oper… 1 6 gener… RI North… US
## 8 8 0 curr… 2 12 middle ME North… US
## 9 9 0 other 2 11 gener… VA South US
## 10 10 0 inst… 3 21 gener… WV South US
## # … with 482 more rows, and 6 more variables: group <chr>, gender <chr>,
## # expert <dbl>, connect <dbl>, role2 <chr>, strong_component <int>
dlt2_network %>%
as_tibble() %>%
group_by(strong_component) %>%
summarise(count = n()) %>%
arrange(desc(count))
## # A tibble: 245 × 2
## strong_component count
## <int> <int>
## 1 1 247
## 2 2 2
## 3 3 1
## 4 4 1
## 5 5 1
## 6 6 1
## 7 7 1
## 8 8 1
## 9 9 1
## 10 10 1
## # … with 235 more rows
#this network has a strong component with 247 members and the most of the remaining components are isolated nodes.
#size
dlt2_network <- dlt2_network |>
activate(nodes) |>
mutate(size = local_size())
dlt2_network |>
as_tibble() |>
arrange(desc(size)) |>
select(uid, role, size) #libmedia and instructionaltech has 74 and 54 size
## # A tibble: 492 × 3
## uid role size
## <dbl> <chr> <dbl>
## 1 302 otheredprof 224
## 2 158 otheredprof 165
## 3 23 libmedia 74
## 4 183 instructionaltech 54
## 5 361 curriculum 47
## 6 292 consultant 45
## 7 267 instructionaltech 42
## 8 229 instructionaltech 39
## 9 388 curriculum 39
## 10 26 instructionaltech 37
## # … with 482 more rows
#closeness and betweenness
dlt2_network <- dlt2_network |>
activate(nodes) |>
mutate(close_ness = centrality_closeness(),
between_ness = centrality_betweenness())
## Warning in closeness(graph = graph, vids = V(graph), mode = mode, weights =
## weights, : At centrality.c:2874 :closeness centrality is not well-defined for
## disconnected graphs
dlt2_network |>
as_tibble() |>
arrange(desc(between_ness)) |>
select(uid, role, between_ness,facilitator) #libmedia and instructionaltech has higher between-ness
## # A tibble: 492 × 4
## uid role between_ness facilitator
## <dbl> <chr> <dbl> <dbl>
## 1 302 otheredprof 49891. 1
## 2 158 otheredprof 31591. 1
## 3 23 libmedia 6929. 0
## 4 183 instructionaltech 5147. 0
## 5 361 curriculum 4745. 0
## 6 292 consultant 3642. 0
## 7 388 curriculum 3531. 0
## 8 125 instructionaltech 3342. 0
## 9 157 curriculum 3157. 0
## 10 303 other 3089. 0
## # … with 482 more rows
dlt2_network |>
as_tibble() |>
filter(facilitator == 0) %>%
group_by(role2) %>%
summarise(mean = mean(between_ness),
count = n())
## # A tibble: 2 × 3
## role2 mean count
## <chr> <dbl> <int>
## 1 instructionaltech 333. 134
## 2 other 262. 356Data visualization. The graph is to show how the discussion pattern changed as the weight of each directed tie increased. As shown in the graph, participants from both roles (instructionaltech and other) engaged in at least one conversation. However, we could see that participants were more likely to continue the interaction with others who were in the same role.
graph <- dlt2_network |>
activate(nodes) |>
filter(facilitator == 0 & strong_component == 1)
p <- ggraph(graph) +
geom_edge_link(aes(alpha = weight)) +
geom_node_point(aes(color = role2)) +
geom_node_text(aes(label = role2), repel=TRUE)+
facet_edges(~weight)
## Using `stress` as default layout
Conclusion. In summary, I looked at the two aspects of the network data collected from the course online discussions in September 2013. The dataset contained more nodes but less edges compared with the first cohort. Similar with the first cohort, the course facilitators had the largest size and betweenness. Besides, the discussion patterns between the “instructionaltech” and other roles showed that overall, the “instructionaltech” group had a higher betweenness which mean that their options/posts might lead to more discussions among participants. Moreover, as we saw in the graph, most of the interactions were happened between the two roles but as the weight increased, we saw participants were more likely to continue the discussions with the ones that had the same role. I assume that maybe similar experience between participants promote more frequent interactions. For next steps, I am interested in exploring what kinds of discussion topics had more/less discussions among participants.
References.
Kellogg, S., Booth, S., & Oliver, K. (2014). A social network perspective on peer supported learning in MOOCs for educators. International Review of Research in Open and Distributed Learning, 15(5), 263-289.