Crear imagen a partir de datos estadísticos automáticamente

Crear imagen a partir de datos estadísticos automáticamente

Estoy buscando una manera de crear automáticamente imágenes como la siguiente:

Gráfico de carta de Bart

No hay MWE porque todo lo que tengo, por ahora, es esta imagen (creada, creo, por SPSS, pero no tengo nada que ver con esa parte). Podría simplemente agregar esta imagen a mi documento, por supuesto, pero como Estos problemas surgen con cierta frecuencia. Me gustaría probar una forma LaTeX "nativa", por así decirlo. Estoy bastante seguro de que algún paquete de gráficos está a la altura de la tarea, pero ni siquiera sé por dónde empezar a buscar.

No espero que usted haga el trabajo por mí, así que todo lo que pido, en realidad, es una indicación en la dirección correcta, una pregunta frecuente, un CÓMO, tal vez una muestra.

Respuesta1

Esta no es una respuesta completa, solo un indicador que supone que no se requiere ningún manejo automatizado de los datos.

EDITAR: según lo recomendado por Jake, usarlo \addplot tableen lugar de \addplot plot coordinatesahorra muchas molestias.

ingrese la descripción de la imagen aquí

\documentclass{book}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\definecolor{mybarcolor}{RGB}{210 207 155}
\pgfmathsetmacro{\xmin}{-.5}
\begin{axis}[ymin=0,%
    xmin=\xmin,%
    xtick={0,2,4,6},%
    xticklabels={.00,2.00,4.00,6.00},%
    axis background/.style={fill=black!10},%
    ylabel=\textbf{H\"{a}ufigkeit},%
    xlabel=$D_\mathrm{rel}$,%
]
\addplot[ybar interval,fill=mybarcolor] table {%
0   7
.5  38
1   23
1.5 8
2   8
2.5 8
3   2
3.5 1
4   2
4.5 0
5   0
5.5 1
6   1
};
\addplot[domain=\xmin:6,samples=100] {18*exp(-.5*(x-1.5)^2)};
\end{axis}
\end{tikzpicture}
\end{document}

Respuesta2

Aquí hay un ejemplo ligeramente modificado del manual de Asíntota. No sólo crea una imagen a partir de datos estadísticos automáticamente, sino que también demuestra cómo generar los datos en primer lugar. Procese el siguiente hist.asyarchivo con asy -f pdf hist.asy.

import graph;
import stats;
size(400,200,IgnoreAspect);

real lineWidth=2pt;
pen histFillPen=rgb(217/255, 206/255, 143/255)+opacity(0.7);
pen histLinePen=black;
pen linePen=red+lineWidth; 
pen bgPen=rgb(241/255, 240/255, 238/255); 

int n=10000;
real[] a=new real[n];
for(int i=0; i < n; ++i) a[i]=Gaussrand();

path g=graph(Gaussian,min(a),max(a));

pair gMin=min(g);
pair gMax=max(g)+(0,0.05);

filldraw(box(gMin,gMax),bgPen,black);

draw(g,linePen);

// Optionally calculate "optimal" number of bins a la Shimazaki and Shinomoto.
int N=bins(a);
histogram(a,min(a),max(a),N,normalize=true,low=0,fillpen=histFillPen,drawpen=histLinePen,bars=true);

xaxis("$x$",BottomTop,RightTicks);
yaxis("$dP/dx$",LeftRight,RightTicks(trailingzero));

ingrese la descripción de la imagen aquí

Respuesta3

Si está dispuesto a utilizar otra herramienta para crear el diagrama en formato PDF e incluirlo en su TeX, definitivamente le sugeriré gnuplot. Es bastante potente y prácticamente puedes graficar cualquier cosa que desees con él. Para la creación automatizada del gráfico, deberá incluir el comando gnuplot en su secuencia o archivo Makefile de LaTeX. También puede parametrizar el archivo de datos si desea generar múltiples gráficos similares a partir de múltiples archivos de datos.

Respuesta4

MWE

Creo que crear un documento LateX con imágenes (y resultados de texto) generados automáticamente a partir de datos estadísticos es un trabajo paraRcontejerotejer.

En resumen, puede crear un documento LateX normal que tenga la extensión .Rnw en lugar de .tex(archivo no web) con "fragmentos" insertados de código R. Luego, Sweave in R exporta esto como un .texarchivo verdadero, donde los fragmentos de R se modifican mediante código LateX con los resultados (imágenes, tablas o texto) generados por estos fragmentos de R. Luego puede compilar el .texarchivo pdflatexcomo de costumbre.

Por ejemplo, un test.Rnwarchivo mínimo con un fragmento R mínimo podría ser:

\documentclass{article}
\begin{document}
<<>>=
2+3
@
\end{document}

El archivo anterior con una .texextensión y compilado pdflatex se producirá simplemente:

<<>>= 2+3 @

Pero convertido con R CMD Sweave test.Rnwusted obtendrá esto test.tex:

\documentclass{article}
\usepackage{Sweave}
\begin{document}
\begin{Schunk}
\begin{Sinput}
> 2+3
\end{Sinput}
\begin{Soutput}
[1] 5
\end{Soutput}
\end{Schunk}

Eso compilado (con pdflatex test.tex) producirá:

> 2+3

[15

Bueno, no es muy impresionante, solo muestra una suma simple como se ve en una consola R. Pero R es un programa estadístico fantástico, y el resultado de un fragmento de R podría ser un \includegraphics{}gráfico bonito o una tabla flotante LaTeX completa ( \begin{table} ...), con o sin mostrar la entrada. Incluso los resultados que son números simples se pueden insertar en el texto con \Sexpr(ejemplo: \Sexpr{2+3}}. Así, por ejemplo, para generar informes estadísticos periódicos LaTeX, modificando únicamente los datos originales manejados por R (un .csvarchivo simple, por ejemplo) con dos comandos o simples script puede obtener gráficos actualizados automáticamente, pero también tablas actualizadas y resultados actualizados en texto plano sin editar el código LaTeX cada vez y sin abrir R. ¿Eso ya es bastante impresionante?

La captura de pantalla anterior se generó con este hist.Rnwarchivo más elaborado:

% File: hist.Rnw
%
% Usage:  
%
% R CMD Sweave hist.Rnw 
% pdflatex hist.tex

\documentclass{article}
\usepackage[utf8]{inputenc} 
\usepackage{lipsum} 
\begin{document}

\lipsum[1] % dummy text

\begin{figure}[h]   
\centering

% R Chunk 
<<Histogran,echo=F,fig=T>>=

# Some random data
foo <- rnorm(1000, mean=1, sd=1)

# The histogram 
hist(foo, prob=TRUE, border="tan4", ylab="Häufigkeit",
xlab="D_rel",col=rainbow(25,start=.4,end=.35), main="")

# To have also the ugly background area (optional): 
rect(par("usr")[1], par("usr")[3], par("usr")[2], par("usr")[4], 
col =  "lightgrey") 

hist(foo, prob=TRUE, border="tan4", ylab="Häufigkeit",
xlab="D_rel",col=rainbow(40,start=.1,end=.4), main="",  add=T) 

# Density plot
curve(dnorm(x, mean=mean(foo), sd=sd(foo)), 
lwd=2, col="darkred", add=T)

@ % end of R chunk

\caption{This is a histogram of foo population with
mean=\Sexpr{round(mean(foo),2)} and sd=\Sexpr{round(sd(foo),2)}. 
On the other hand,  significance of Shapiro-Wilk test of normality is
p=\Sexpr{signif(shapiro.test(foo)$p.value,2)}, so this is a normal
population as sure as 2+2=\Sexpr{2+2}, as everybody knows (except some 
processors with floating point bugs). }


\end{figure}

\lipsum[3] % more dummy text

\end{document}

información relacionada