Skip to content

Commit

Permalink
fixed accum errors
Browse files Browse the repository at this point in the history
  • Loading branch information
snotskie committed Apr 21, 2023
1 parent dca9bec commit 060684b
Show file tree
Hide file tree
Showing 9 changed files with 188 additions and 170 deletions.
File renamed without changes.
11 changes: 11 additions & 0 deletions data/toy.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Group,Convo,Unit,Line,A,B,C
Red,1,X,1,0,0,1
Red,1,Y,2,1,0,0
Blue,1,Z,3,0,1,1
Blue,1,W,4,0,0,0
Red,1,X,5,0,0,1
Red,2,X,1,1,0,0
Red,2,Y,2,1,0,0
Blue,2,Z,3,0,1,1
Blue,2,W,4,0,0,0
Red,2,X,5,1,0,0
File renamed without changes.
70 changes: 36 additions & 34 deletions src/enadevtools.jl
Original file line number Diff line number Diff line change
Expand Up @@ -189,60 +189,62 @@ end

# Helpers

function computeNetworkDensities(model, rows=!)
function computeNetworkDensities(model, rows=!; normalize=false)

# sum densities for each edge
edgeNames = model.edges.edge
edgeDensities = sum(eachcol(model.accum[rows, edgeNames]))
edgeIDs = model.edges.edgeID
edgeDensities = Dict(
edgeID => sum(model.accum[rows, edgeID])
for edgeID in edgeIDs
)

# find the density of each code row dot, by "splitting" the density of each line between its two codes
nodeNames = model.nodes.node
nodeDensities = zeros(length(nodeNames))
for (k, edge) in enumerate(eachrow(model.edges))
i, j = edge.i, edge.j
nodeDensities[i] += edgeDensities[k]
nodeDensities[j] += edgeDensities[k]
end

# normalize each
s = maximum(edgeDensities)
if s != 0
edgeDensities /= s
end
nodeIDs = model.nodes.nodeID
nodeDensities = Dict(
nodeID => 0.0
for nodeID in nodeIDs
)

s = maximum(nodeDensities)
if s != 0
nodeDensities /= s
for edge in eachrow(model.edges)
nodeDensities[edge.ground] += edgeDensities[edge.edgeID]
nodeDensities[edge.response] += edgeDensities[edge.edgeID]
end

edgeDensityDict = Dict(
edge => density
for (edge, density) in zip(edgeNames, edgeDensities)
)
# optionally normalize each
if normalize
s = maximum(values(edgeDensities))
if s != 0
for edgeID in edgeIDs
edgeDensities[edge] /= s
end
end

nodeDensityDict = Dict(
node => density
for (node, density) in zip(nodeNames, nodeDensities)
)
s = maximum(values(nodeDensities))
if s != 0
for nodeID in nodeIDs
nodeDensities[node] /= s
end
end
end

return edgeDensityDict, nodeDensityDict
return edgeDensities, nodeDensities
end

function addPointsToModelFromDim(model, dim)
edgeNames = model.edges.edge
edgeIDs = model.edges.edgeID
unitIDs = model.accum.unitID
nodeNames = model.nodes.node
points = Matrix{Float64}(model.accum[!, edgeNames]) * Vector{Float64}(dim[edgeNames])
nodeIDs = model.nodes.nodeID
points = Matrix{Float64}(model.accum[!, edgeIDs]) * Vector{Float64}(dim[edgeIDs])
df = similar(model.points, 1)
df[1, unitIDs] = points
append!(model.points, df)
pointsHat = Matrix{Float64}(model.accumHat[!, edgeNames]) * Vector{Float64}(dim[edgeNames])
pointsHat = Matrix{Float64}(model.accumHat[!, edgeIDs]) * Vector{Float64}(dim[edgeIDs])
df = similar(model.pointsHat, 1)
df[1, unitIDs] = pointsHat
append!(model.pointsHat, df)
pointsNodes = Matrix{Float64}(model.nodes[!, edgeNames]) * Vector{Float64}(dim[edgeNames])
pointsNodes = Matrix{Float64}(model.nodes[!, edgeIDs]) * Vector{Float64}(dim[edgeIDs])
df = similar(model.pointsNodes, 1)
df[1, nodeNames] = pointsNodes
df[1, nodeIDs] = pointsNodes
append!(model.pointsNodes, df)
end

Expand Down
Loading

0 comments on commit 060684b

Please sign in to comment.