# Accessibility calculation with sDNA

We would like to use sDNA to calculate accessibility measures, in addition to the other measures sDNA outputs.

I've been going over the documentation a fair bit, but cannot find whether one of the outputs equals an accessibility measure like

${A_i} = \sum\limits_{j = 1}^n {{d_j}f( {c_{ij}})}$

Where the accessibility A of location i is the sum of the destinations j with destination weight d, accessible from i multiplied by the costs of reaching destination j from origin i. The cost function is often referred to as the impedance function or distance decay function.

In its simplest form, the cost function

$f( {c_{ij}})$

Would equate to a rectangular function like

$f({c_{ij}}) = \left\{ {\begin{array}{*{20}{c}} {1{\enspace \textrm{ if }\enspace}{c_{ij}} \le C}\\ {0{\enspace \textrm{ if }\enspace}{c_{ij}} > C} \end{array}} \right.$

Of course, other cost functions are imaginable. For instance, a commonly used distance decay function is the exponential function.

Using the example network below, where every link is 100 meters and the link weight is depicted as a label, the accessibility within 100 meters from A is 30 (6 links accessible with weight 5), the accessibility from B is 50 (1 link accessible with weight 50) and from C is 40 (2 links accessible with weight 20) .

Which sDNA measure would equate such an accessibility measure?

sDNA's network quantity measure - links, length and weight are all cumulative opportunity in a rectangular cost function. The threshold for the function is defined by the radii you choose, e.g. Weight R1000 is all weight within 1km (assuming your spatial units are metres). If you choose multiple radii then all rectangular functions extend from 0 to the respective radius, unless you choose ‘banded radii’ in which case each has a minimum of the next smallest radius.

NQPD is a gravity model - cumulative opportunity weighted by inverse distance (you can choose the exponent of both opportunity and distance using nqpda and nqpdd in advanced config).

Other functions of distance aren't implemented yet (beyond changing the definition of distance itself, but that has to sum linearly over links and junctions at present). However you can approximate any function by computing links/length/weight for multiple radii and then combining them with coefficients of your choice, or fitting coefficients with regression.

Update

Firstly you need to choose Polyline weighting to make sDNA work as you want. I appreciate this is somewhat counter intuitive but as a network analysis tool, sDNA defaults to considering individual links as the fundamental unit of analysis. Several of the weights on your network - the ones on the corners of the grids - are attached to split links, not links. These split links are joined by pseudonodes i.e. where only 2 polylines join at that point, not 3 or more (excepting special cases with loop links in diagram above). The weights you provided are interpreted as being 'per link' thus are divided by two, though they are still attached at the center of the relevant polyline, not the center of the link. Change "Weighting" from "link" to "polyline" and all should work as you expect.

Secondly (examining the shape file you sent me) link A is not exactly 100m but the shape length field shows 100.156701. Possibly there is something going on with the projection you are using, I am not sure. Either way for some links, a 100m radius 'misses' the central point of their neighbours which is what discrete space mode considers when including or discarding the link from analysis. Setting radius of 101m fixes this for me, though looking at the results you report below it seems your ArcGIS install is handling this correctly in the first place so it's not an issue for you.

• Thanks ! I gather that to calculate a cumulative opportunity measure I would need to set the following in the advanced config: weight=weight;outputsums. If I do this, the sum of weights are different than I expect . Link C in the image has a weight of 20 within 100 meters instead of 40; link B a weight of 25 within 100 meters instead of 50. How is the sum of the weight calculated? – Michael Nov 8 '18 at 13:42
• outputsums is not necessary (it is intended for outputting sum of angular distance etc rather than mean, which is not a cumulative opportunity measure). weight=weight is necessary only if you are using sDNA from script or command line, otherwise you can select weight in the configuration dialog. As to the calculation - are you using continuous space or discrete? If continuous space then only half of your weighted links falls within 100m which explains the results you are getting. – Sideshow Bob Nov 8 '18 at 13:57
• Thanks. I am not using continuous space (e.g. the option is not ticked). Concerning the setting of the weight: if I don't use the advanced config dialog in ArcGIS, which dialog should I use? Setting either destination weight or origin weight gives me an error message concerning the license. – Michael Nov 9 '18 at 1:43
• sDNA allows weighting origins/destinations with the same field - select the same field for both and all will run fine. If you want different O/D weights then sDNA+ license is needed – Sideshow Bob Nov 9 '18 at 16:28
• See updated answer – Sideshow Bob Nov 13 '18 at 12:20