自編函式做t檢驗

緊到長不胖發表於2020-11-11
# 完整的檢驗作業

# 題目要求:
# 比較兩個總體均值差異顯著性檢驗的函式
# 要求函式輸入引數只有兩個,1.data 2.alph=0.05
# 輸出結果:樣本均值,樣本方差,合併方差,檢驗統計量,t分佈臨界值,結論

# 檢驗函式編寫

# 法1 自寫函式t.test檢驗函式
# 這裡傳入資料的列名為a,b
t_test_fun = function(data,alph=0.05){
  # 列資料作為計算物件
  a = data$a
  b = data$b
  # 1.計算基本量
  # 1.1向量a,b長度
  n1 = length(a)
  n2 = length(b)
  # 1.2計算a,b均值
  a_bar = mean(a)
  b_bar = mean(b)
  message('a組均值:',a_bar,'\n')
  message('b組均值:',b_bar,'\n')
  # 計算a,b方差
  var1 = var(a)
  var2 = var(b)
  message('a組方差:',var1,'\n')
  message('b組方差:',var2,'\n')
  # 求合併方差(方差齊性)
  concat_vars = (var1*(n1-1)+var2*(n2-1))/(n1+n2-2)
  message('聯合方差為:',concat_vars,'\n')  
  # 計算t統計量
  t_statistic = (a_bar-b_bar)/sqrt(concat_vars*(1/n1+1/n2))
  message('t統計量為:',t_statistic,'\n')
  # 計算自由度
  v = (n1+n2-2)
  message('自由度為:',v,'\n')
  #t分佈臨界值
  t_value = qt(alph,v)
  if (abs(t_statistic) > abs(t_value)){
    print('拒絕原假設,兩組資料之間存在顯著性差異')
  }else{
    print('接受原假設,兩組資料之間不存在顯著性差異')
  }
}

# 產生隨機數
set.seed(0) 
A = round(runif(100,20,40))
B = round(runif(100,20,40))
data1 = data.frame(a = A,b = B)
t_test_fun(data1,alph = 0.05)

# 法2 驗證
t.test(data1$a,data1$b,alternative = 'two.sided',
       conf.level = 0.95)

相關文章