[R][VB.NET] VB.NET から R を使用して回帰分析を計算してみる

2014年12月7日

 VB.NET は行列計算と同様、標準の回帰分析ライブラリを持っていないので、その対策として R を使用する例。

 重回帰でも「c3 <- lm(y ~ x + x2 + x3);」といった感じで変数を並べればよいだけなので自作に比べるとかなりお手軽です。  また今回の場合、多項式の係数だけが欲しい場合を想定したので R のコードの最後に「c1$coefficients;」を書き、係数が戻り値として戻るようにしています。

 以下コード例。

Imports RDotNet.SymbolicExpressionExtension

Module Module1

    Sub Main()

        ' Rのインストールフォルダに PATH を通す (通っていればなくてもよい)
        Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH") & ";C:Program FilesRR-3.0.2bini386")

        ' ---------------
        ' 初期化
        ' ---------------
        Dim r = RDotNet.REngine.CreateInstance("RDotNet")
        r.Initialize()

        ' ---------------
        ' データの入力
        ' ---------------
        Dim yData = New RDotNet.NumericVector(r, {5, 8, 7, 8, 9, 11, 9, 11, 13, 12})
        r.SetSymbol("y", yData)

        Dim xData = New RDotNet.NumericVector(r, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10})
        r.SetSymbol("x", xData)

        ' ---------------
        ' 計算
        ' ---------------
        ' 単回帰( y = a・x + b)
        Dim c1 = r.Evaluate("c1 <- lm(y ~ x); " &
                            "c1$coefficients;")

        ' 重回帰( y = a・x^3 + b・x^2 + c・x + d )
        Dim c3 = r.Evaluate("x2 = x ^ 2; " &
                            "x3 = x ^ 3; " &
                            "c3 <- lm(y ~ x + x2 + x3); " &
                            "c3$coefficients;")

        ' ---------------
        ' 結果の取得
        ' ---------------
        Dim c1Data = c1.AsNumeric
        Dim c3Data = c3.AsNumeric

        ' ---------------
        ' 結果の表示
        ' ---------------
        Console.WriteLine("y = {0:0.00}x {1:+ 0.00;- 0.00;+0}",
                             c1Data(1), c1Data(0))
        Console.WriteLine("y = {0:0.00}x^3 {1:+ 0.00;- 0.00;0}x^2 {2:+ 0.00;- 0.00;0}x {3:+ 0.00;- 0.00;0}",
                             c3Data(3), c3Data(2), c3Data(1), c3Data(0))

        ' ---------------
        ' 終了
        ' ---------------
        r.Close()
        r.Dispose()
    End Sub

End Module

 結果。

y = 0.75x + 5.20
y = 0.01x^3 - 0.11x^2 + 1.38x + 4.30
続行するには何かキーを押してください . . .





カテゴリー: Program, R, VB.NET

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org