2011-11-02 56 views
2

我寫函數輸出ANOVA作爲輸出建設ANOVA狀物體

我不明白如何從以下信息輸出ANOVA對象:

# degrees of freedom 
    repdf = 1 
    trtdf = 22 
    totaldf = 23 
# sum of square  
    ssrep = 10.3 
    sstrt = 14567.2 
    sstotal = 14577.2 

是方差分析對象數據框或列表或者有其他特殊節目類別?

編輯:基於從本

下面的建議
Source <- c("replication", "Treatments", "Total") 
Df <- c(repdf, trtdf, totaldf) 
"Sum Sq" <- c(ssrep, sstrt, sstotal) 
anovadf <- data.frame(Source, Df, "Sum Sq") 
class(anovadf) <- c("anova","data.frame") 

不給我應該是什麼str中的方差分析對象的怎麼樣?任何進一步的幫助

> str(anovadf) 
Classes ‘anova’ and 'data.frame':  3 obs. of 3 variables: 
$ Source : Factor w/ 3 levels "Error","replication",..: 2 3 1 
$ Df  : num 1 22 23 
$ X.Sum.Sq.: Factor w/ 1 level "Sum Sq": 1 1 1 

回答

4

創建anova對象,保存它,然後對結果使用str()。從example("lm")創建的lm.D9對象:

> str(anova(lm.D9)) 
Classes ‘anova’ and 'data.frame': 2 obs. of 5 variables: 
$ Df  : int 1 18 
$ Sum Sq : num 0.688 8.729 
$ Mean Sq: num 0.688 0.485 
$ F value: num 1.42 NA 
$ Pr(>F) : num 0.249 NA 
- attr(*, "heading")= chr "Analysis of Variance Table\n" "Response: weight" 

所以這是一個數據幀的特殊情況。構建數據框a以匹配示例,然後嘗試分配類:class(a) <- c("anova","data.frame")

特別是:

Df <- c(repdf, trtdf, totaldf) 
ssq <- c(ssrep, sstrt, sstotal) 

anovadf <- data.frame(Df, `Sum Sq`=ssq, `Mean Sq`=ssq/Df, check.names=FALSE) 
rownames(anovadf) <- c("replication","treatments","total") 
class(anovadf) <- c("anova","data.frame") 

anovadf 
      Df Sum Sq Mean Sq 
replication 1 10.3 10.30 
treatments 22 14567.2 662.15 
total  23 14577.2 633.79 

你必須要一點點小心列名 - 他們必須通過反引號來保護,你必須使用check.names=FALSE,因爲他們是不合法的變量名(它們包含空格)。你可以添加F統計量和P值 - 我沒有,因爲我不確定什麼是合適的誤差項。

+0

請參閱我的編輯... – jon