R Type Providerで回帰分析

F#上でRを使って回帰するにはどうしたらええんじゃい?ってのを簡易メモ。
実行前に#rつかってRProvider & RDotNetにリファレンス張る必要がある。

流れとしては

  1. リファレンス張って〜
  2. 回帰(R.lm)して〜
  3. 結果(R.summary)表示

って感じ。最後のsummaryの結果は

R.``[[``(hogehoge, 4).AsNumericMatrix()

としてRDotNETの行列オブジェクトとして戻せばいいかな?

> open RProvider;;
> open RProvider.``base``;;
> open RProvider.stats;;
> open RProvider.datasets;;
> let result = R.lm("Sepal.Length~Sepal.Width+Petal.Length", R.iris);;

val result : RDotNet.SymbolicExpression
> R.summary(result) |> R.print;;

Call:
stats::lm(formula = fsr_20456_1, data = fsr_20456_2)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.96159 -0.23489  0.00077  0.21453  0.78557 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)   2.24914    0.24797    9.07 7.04e-16 ***
Sepal.Width   0.59552    0.06933    8.59 1.16e-14 ***
Petal.Length  0.47192    0.01712   27.57  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.3333 on 147 degrees of freedom
Multiple R-squared:  0.8402,	Adjusted R-squared:  0.838 
F-statistic: 386.4 on 2 and 147 DF,  p-value: < 2.2e-16

val it : RDotNet.SymbolicExpression =
  RDotNet.SymbolicExpression {Engine = RDotNet.REngine;
                              IsClosed = false;
                              IsInvalid = false;
                              IsProtected = true;
                              Type = List;}
>