Mostrando entradas con la etiqueta Matemáticas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Matemáticas. Mostrar todas las entradas

lunes, 15 de marzo de 2010

Llamar a R desde VB.NET

Hoy vamos a ver como usar la potencia del paquete matemático R desde una aplicación .NET.
Lo primero es explicar qué es R. Se trata de un lenguaje y entorno de programación de análisis estadístico (series temporales, econometría, cálculo numérico, etc..) . Además, se trata de un proyecto libre, lo que lo hace aún más goloso.
Para usar R desde código de una aplicación .NET lo primero que tenemos que hacer es instalar R y un conector, para que se pueda comunicar con la aplicación externa. Lo podemos descargar desde aqui. Así, necesitaremos descargar e instalar:

Pasamos ahora a implementar un pequeño programa que genere un vector R aleatorio y lo represente usando la librería ZedGraph. Antes necesitaremos refenciar las siguientes tres DLLs que podemos obtener a través de estos enlaces:

Finalmente, este es el código que hace lo que antes hemos comentado:




Imports STATCONNECTORCLNTLib
Imports StatConnectorCommonLib
Imports STATCONNECTORSRVLib
Imports ZedGraph

Public Class Form1

Dim sc1 As StatConnector = New STATCONNECTORSRVLib.StatConnectorClass()

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
sc1.Init("R")
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim o1 As Object
Dim n As Integer = 20

sc1.SetSymbol("n1", n)
sc1.Evaluate("x1<-rnorm(n1)")
o1 = sc1.GetSymbol("x1")

Dim serie_x, serie_y As Hashtable
Dim index As Integer
serie_x = New Hashtable
serie_y = New Hashtable
For index = 0 To UBound(o1)
serie_x(index) = index
serie_y(index) = CDbl(o1(index))
Next

crearGrafica(GRAFICA, "TEST R", "X", "Y")
addCurva(GRAFICA, "Serie", Color.Blue, 2, SymbolType.None, serie_x, serie_y)

End Sub



'Dibuja una grafica usando un control ZedGraph
Sub crearGrafica(ByVal nombreControl As ZedGraph.ZedGraphControl, _
ByVal titulo As String, _
ByVal nombre_eje_x As String, _
ByVal nombre_eje_y As String)
Dim area As RectangleF
area = nombreControl.GraphPane.Rect
nombreControl.GraphPane = New GraphPane(area, titulo, nombre_eje_x, nombre_eje_y)
nombreControl.AxisChange()
nombreControl.Refresh()
End Sub


'Añade una curva
Sub addCurva(ByVal nombreControl As ZedGraph.ZedGraphControl, _
ByVal nombre As String, _
ByVal color As Color, _
ByVal anchura As Integer, _
ByVal simbolo As SymbolType, _
ByVal serie_x As Hashtable, _
ByVal serie_y As Hashtable)

Dim i As Integer
Dim puntos = New PointPairList()
Dim puntos_tendencia = New PointPairList()

For i = 0 To serie_x.Count - 1
puntos.add(serie_x(i), serie_y(i))
Next

Dim curva As LineItem = nombreControl.GraphPane.AddCurve(nombre, puntos, color, simbolo)
curva.Line.Width = anchura
curva.Line.Style = Drawing2D.DashStyle.Solid
nombreControl.AxisChange()
nombreControl.Refresh()

End Sub


End Class

martes, 19 de enero de 2010

Simulación de Monte Carlo

La simulación de Monte Carlo es un método estadístico numérico utilizado para estimar variables aleatorias con una densidad de probabilidad conocida mediante el uso de un ordenador.

Supongamos la simulación del lanzamiento de una moneda. Sabemos que la probabilidad de que salga cara es 1/2. Utilizando la función RANDOM de un ordenador podemos simular dicho lanzamiento, asignando el segmento [0, 0.5] al suceso CARA y (0.5, 1] al suceso CRUZ.


Algo similar podríamos podríamos hacer para simular el lanzamiento de un dado.



Este método tiene muchas aplicaciones como por ejemplo en el cálculo de áreas. Básicamente se generan muchos puntos aleatorios y se cuantifica cuantos “caen” dentro del área y cuantos no.
Otra aplicación es la estimación de valores (como los dos ejemplos que hemos visto). Generalmente esta aplicación se suele utilizar en el campo de la economía.