Ésta no es una respuesta exacta a esta pregunta, pero desde que llegué aquí basado en una búsqueda, me gustaría responder a la cuestión relacionada de cómo crear (no encajar) una Función lineal por partes que pretende representar la media (o mediana, o alguna otra función) de los datos de intervalo en un diagrama de dispersión.
En primer lugar, una alternativa relacionada pero más sofisticada que usa la regresión, que aparentemente tiene some MATLAB code listed on the wikipedia page, es Multivariate adaptive regression splines.
La solución aquí es simplemente el cálculo de la media en intervalos superpuestos para obtener puntos
function [x, y] = intervalAggregate(Xdata, Ydata, aggFun, intStep, intOverlap)
% intOverlap in [0, 1); 0 for no overlap of intervals, etc.
% intStep this is the size of the interval being aggregated.
minX = min(Xdata);
maxX = max(Xdata);
minY = min(Ydata);
maxY = max(Ydata);
intInc = intOverlap*intStep; %How far we advance each iteraction.
if intOverlap <= 0
intInc = intStep;
end
nInt = ceil((maxX-minX)/intInc); %Number of aggregations
parfor i = 1:nInt
xStart = minX + (i-1)*intInc;
xEnd = xStart + intStep;
intervalIndices = find((Xdata >= xStart) & (Xdata <= xEnd));
x(i) = aggFun(Xdata(intervalIndices));
y(i) = aggFun(Ydata(intervalIndices));
end
Por ejemplo, para calcular la media sobre algunos X emparejado y datos Y tuve práctico con intervalos de longitud 0.1, que tiene más o menos un tercio de solapamiento cada uno (imagen ver dispersión) otro con:

[x, y] = intervalAggregate (XDAT, Ydat, @mean, 0,1, 0,333)
x =
las columnas 1 a 8
0.0552 0.0868 0.1170 0.1475 0.1844 0.2173 0.2498 0.2834
columnas 9 a través de 15
0.3182 0.3561 0.3875 0.4178 0.4494 0.4671 0.4822
y =
las columnas 1 a 8
0.9992 0.9983 0.9971 0.9955 0.9927 0.9905 0.9876 0.9846
columnas 9 a través de 15
0.9803 0.9750 0.9707 0.9653 0.9598 0.9560 0.9537
Vemos que cuando x aumenta, y tiende a disminuir levemente y A partir de ahí, es bastante fácil dibujar segmentos de línea y/o realizar algún otro tipo de suavizado.
(Nótese que no consiguió vectorizar esta solución;. Una versión mucho más rápido podría asumirse si se ordena datos extendidos)
muchas gracias por las explicaciones. Lo siento por mi fondo superficial para la interpolación lineal y Matlab. Creo que lo que hiciste es genial. Sin embargo, tengo dificultades para modificar mis códigos en consecuencia. Mi información original, y, es un vector de fila 1 * 73 cuya distribución se parece a la gráfica normal en la solución de cjh. ¿Puede señalar cómo puede modificar sus códigos para mostrar el resultado final en un diagrama del eje log-log (No el log (log (x)) cálculo)? Muchas gracias de nuevo, – Cassie