¿Cómo dibujar la imagen tikz de la imagen de regresión de crestas?

¿Cómo dibujar la imagen tikz de la imagen de regresión de crestas?

Estoy intentando recrear la siguiente imagen:ingrese la descripción de la imagen aquí

Desafortunadamente, esto se dibujó en Python, por lo que realmente no puedo usarlo. Entonces pensé que debería recrearlo con Tikz.

Mi intento de crear la imagen de la izquierda:

\usetikzlibrary{arrows}
\usetikzlibrary{decorations.markings}
\begin{tikzpicture}
\coordinate (Origin) at (0,0);
\coordinate (OLSEstimates) at (2,8);
\coordinate (Intersect) at (2.55,4.3);
%0.5 scaled
\draw[rotate=45] (OLSEstimates) ellipse (1.275 and 3);
%0.75 scaled
\draw[rotate=45] (OLSEstimates) ellipse (1.9125 and 4.5);
%original boundary
\draw[rotate=45] (OLSEstimates) ellipse (2.56 and 6);
\draw [<->,thick] (0,10) node (yaxis) [above] {$y$}
        |- (10,0) node (xaxis) [right] {$x$};
\draw (0,0) circle (5);
%draw line to intersection
\draw[draw=black,-triangle 90] (Origin) -- (Intersect);
\end{tikzpicture}

El problema ahora es que, aunque parece que mi círculo está golpeando la elipse, se ha hecho dolorosamente ajustando manualmente las coordenadas (por lo que probablemente esté mal). En segundo lugar, el punto de intersección entre la elipse y el círculo también se realizó con el mismo método, por lo que probablemente esté un poco desviado.

Ahora vi algo loco, que Tikz podía calcular las coordenadas de las intersecciones de dos líneas, así que me preguntaba si se podría aplicar algún tipo de técnica aquí.

Una pequeña nota al margen: sería perfecto si pudiera incluso escalar automáticamente la elipse al "tamaño" correcto para cruzarla exactamente en un punto, pero supongo que esto es imposible (nunca he visto a alguien hacer eso).

¡Gracias!

Respuesta1

Modificó el código para colocar las elipses concéntricas y el punto. También es posible la misma idea al anclar las elipses al nodo cuadrado.

En cambio, la orientación de las elipses se puede cambiar anclándolas con respecto al nodo de origen (pero no entendí esa parte) al que creo que debería apuntar la ecuación de la cresta.

\documentclass[tikz]{standalone}
\usetikzlibrary{shapes.geometric,calc}
\begin{document}
\begin{tikzpicture}[>=latex]
\clip (-1,-1) rectangle (6,6);
\draw[->,thick] (-1,0) --++(6,0);
\draw[->,thick] (0,-1) --++(0,6);
% Given 
\def\myradius{2.5cm} % CHANGE THESE
\def\mypoint{(3,2)}
% computed 
\node[circle,draw,minimum height=2*\myradius] (o) at (0,0) {};
% here we take the point and compute the distance to the circle node 
% and also the angle of the point wrt to origin. Then we rotate ellipses and adjust the size
\path let \p1=\mypoint,\n1 = {veclen(\x1,\y1)-\myradius},\n2={atan2(\y1,\x1)} in 
\foreach \x in {1,0.75,0.5}{
node[ellipse,draw,
     minimum height=2*\n1*\x,
     minimum width=3.5*\n1*\x,
     rotate=\n2-90] (a) at \mypoint {}
};
\draw[->] (o.center) -- (a.center) 
node[above,inner sep=1pt,rounded corners,fill=white,draw] {$\theta_{\text{Normal Equation}}$};
\draw[->] (o.center) -- (o.80) 
node[above,inner sep=1pt,rounded corners,fill=white,draw] {$\theta_{\text{RidgeEquation}}$};
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Puedes probar algo como esto, pero debería haber métodos más eficientes:

\usetikzlibrary{intersections,calc}
\usetikzlibrary{arrows}
\usetikzlibrary{decorations.markings}
\begin{tikzpicture}
\draw [<->,thick] (0,10) node (yaxis) [above] {$y$}
    |- (10,0) node (xaxis) [right] {$x$};

\coordinate (Origin) at (0,0);
\coordinate (OLSEstimates) at (2,8);
\coordinate (Intersect) at (0,5.1); % Initial guess, must be inside the ellipse
%original boundary
\draw[rotate=45, name path=ellipse] (OLSEstimates) ellipse (2.56 and 6);
%scaled boundaries
\foreach \scale in {0.75,0.5} {
    \draw[rotate=45] (OLSEstimates) ellipse (\scale*2.56 and \scale*6);
}
%Compute intersection point iteratively
\foreach \j in {1,...,3} {
    \path[name path=circle-\j, overlay] let \p1 = ($(Origin)-(Intersect)$) in (Origin) circle ({veclen(\x1,\y1)});
    \draw[name intersections={of=ellipse and circle-\j,by={a,b}, total=\t}] let \p1 = ($0.5*(a)+0.5*(b)$) in (\x1,\y1) coordinate (Intersect);
}
\draw let \p1 = ($(Origin)-(Intersect)$) in (Origin) circle ({veclen(\x1,\y1)});
%draw line to intersection
\draw[draw=black,-triangle 90] (Origin) -- (Intersect);
\end{tikzpicture}

Queremos encontrar un círculo tal que tenga un solo punto de intersección con la elipse. En este código, se calcula de forma iterativa tomando el centro de los dos puntos de intersección entre un círculo y la elipse, y haciendo que el siguiente círculo cruce este punto.

¡El código funciona, pero es extremadamente lento!

En cuanto a dibujar los puntos suspensivos, puse el \drawcomando en un foreachbucle, es bastante sencillo como puedes ver.

información relacionada