Tangent point coordinates when the curve is a set of points
Assuming the curve is convex and $(0, b)$ is "outside" the curve, you can use the convex hull of the point and data.
b = -0.01;
bp = {0., b};
c = ConvexHullMesh[Join[{bp}, data]]["Coordinates"];
p = Position[c, bp][[1, 1]];
l = Cases[MeshCells[ConvexHullMesh[Join[{bp}, data]], 1], (* lines containing bp *)
Line[i : {___, p, ___}] :> i];
m = First@Ratios@First@Differences@c[[#]] & /@ l; (* slopes of those lines *)
(* tp = line segment with greatest slope containing the point bp *)
tp = InfiniteLine[ c[[ l~Part~Last@Ordering[m] ]] ]
(* InfiniteLine[{{0.0270945, 0.0108}, {0., -0.01}}] *)
Show[
ListLinePlot[data, PlotRange -> {{0, 0.1}, {0, 0.05}}, PlotStyle -> Red],
Graphics[{Point[bp], tp}],
PlotRange -> All
]
ClearAll[slope, opt]
slope[rf_] := Divide @@ Reverse[rf - #] &;
opt[dt_, rf_] := dt[[First @ Ordering[slope[rf] /@ dt, -1]]];
rfp = {0., -.01};
opt[data, rfp]
{0.0270945, 0.0108}
Row[Show[ListLinePlot[data,
Epilog -> {Red, PointSize[Large], Point[{rfp, opt[data, rfp]}] },
ImageSize -> Medium],
Plot[rf[[-1]] + x slope [rf][opt[data, rfp]] , {x, 0, 0.2},
PlotStyle -> Green],
PlotRange -> #] & /@ {{-0.02, .07}, {{0, .07}, {-0.02, .03}}},
Spacer[10]]
You could also use the simpler but slower:
opt[dt_, rf_] := Last @ SortBy[dt, slope[rf]];