2017-06-13 30 views
1

所以我有這2個變量:如何在Spark Scala中執行ANOVA?

x: 1 0 1 1 0 1 1 0 ... 

y: 4 3 12 9 2 7 23 ... 

以前我可以在R使用此代碼進行方差分析:

stats <- anova(lm(as.matrix(y) ~ as.factor(x))) 

,它會給這個結果:

> anova(lm(as.matrix(y) ~ as.factor(x))) 
Analysis of Variance Table 

Response: as.matrix(y) 
       Df Sum Sq Mean Sq F value Pr(>F) 
as.factor(x) 1 2020 2019.99 5.1431 0.02426 * 
Residuals  231 90727 392.76     
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

現在我想用Scala代碼將這段代碼翻譯成Spark。這個怎麼做?

我已經嘗試this API,但我很困惑,因爲在該API中只有1個變量作爲輸入,但anovaR使用2個輸入。

我也發現this API,但它似乎是另一個的前身。我很困惑在哪裏把xy作爲輸入。通常我們在API中有依賴於&的獨立變量,我們可以在其中放入輸入,但我似乎無法在這裏找到它。

我的Spark版本是2.1.1。

回答

1

R您需要提供y〜x的映射,其中y是連續的,x是分類變量。這是在你所引用的Spark代碼相同的:

val catTuple = spark.sql("select color, price from cars").toDF(colnames: _*).as[CatTuple] 

這裏color是絕對的和price是連續可變的。

在你的第二個例子(奇怪的數據結構!)中,你需要提供一個Iterable[RDD[Double]],這意味着你的數據中的每個類別都應該放在一個單獨的RDD中。

+0

謝謝你!真的解釋!我很好奇,你知道爲什麼在'R'中我們需要先做線性迴歸? (如在代碼'lm(as.matrix(y)〜as.factor(x))') –

+1

如果你這樣做,你正在查看擬合迴歸模型的ANOVA表。一些更多細節在這裏:http://stat.ethz.ch/R-manual/R-patched/library/stats/html/anova.lm.html和這裏:https://stats.stackexchange.com/questions/115304 /解釋輸出從 - ANOVA-時-使用-LM-作爲輸入 – jamborta