如何在r中编写以下公式?

问题描述

我需要在R中编写以下公式。STAT公式是oneway.test函数的复制效果

STAT formula

其中样本方差是

Sample variance

enter image description here

变量为:m-样本数量n-样本大小,向量sample_means-每个样本的平均值,向量sample_vars-每个样本的样本方差

我正在尝试使用以下代码,但是当我将其与aov进行比较时,它没有给出正确的结果:

my_anova <- function(m,n,sample_means,sample_vars) {
 
overall_mean <- mean(sample_means)

sample_vars <- sum((sample_means - overall_mean)^2)/(m-1)

STAT <- (n*sample_vars)/(sum(sample_vars/m))
  
  PVAL <- pf(STAT,m - 1,m*(n - 1),lower.tail = FALSE)
    
    }

解决方法

不太确定您从哪里获得了上述公式,但是从我的搜集中,您希望获得单因素方差分析的F统计量和p值。 n应该是自由度,而不是样本量。尝试使用此table

enter image description here

因此,底线是SSF应该始终是预测均值和总体均值之间的残差之和,而SSE是预测均值和实际值之间的残差之和。然后,您除以相应的自由度。如下所示:

my_aov <- function(sample_values,sample_means,n){
  
  overall_mean = mean(sample_values)
  SSF = sum((sample_means - overall_mean)^2)
  SSE = sum((sample_values - sample_means)^2)

  DoF = c(n,length(sample_values)-1-n)

  Mean_Square = c(SSF/DoF[1],SSE/DoF[2])
  
  FSTAT = c(Mean_Square[1]/Mean_Square[2],NA)
  
  PVAL <- pf(FSTAT,DoF[1],DoF[2],lower.tail = FALSE)

  cbind(Sum_of_Squares= c(SSF,SSE),DoF,Mean_Square,FSTAT,PVAL)

}

使用示例:

values = iris$Sepal.Length
Species_values = tapply(iris$Sepal.Length,iris$Species,mean)
predicted_values = Species_values[as.character(iris$Species)]
# since there are 3 groups,degree of freedom is 3-1
n = length(unique(iris$Species)) - 1

my_aov(values,predicted_values,n)

    Sum_of_Squares DoF Mean_Square    FSTAT         PVAL
[1,]       63.21213   2  31.6060667 119.2645 1.669669e-31
[2,]       38.95620 147   0.2650082       NA           NA

比较:

summary(aov(Sepal.Length ~ Species,data=iris))
             Df Sum Sq Mean Sq F value Pr(>F)    
Species       2  63.21  31.606   119.3 <2e-16 ***
Residuals   147  38.96   0.265                   
---