Как добавить дополнительные компоненты в объект htest

#r #c #function #hypothesis-test

#r #c #функция #проверка гипотезы

Вопрос:

Я пытаюсь написать свою собственную функцию, очень похожую на var.test(). Я хотел бы, чтобы мои выходные данные выглядели аналогично var.test (), и, похоже, var.test() присваивает список выходных данных классу htest. Я хочу сделать что-то подобное, но добавить дополнительный компонент в список вывода, который является альфа-уровнем.

 testvar lt;- function(x1, x2, level = 0.95) {  df1 lt;- length(x1) - 1  df2 lt;- length(x2) - 1  alpha = 1 - level  s1 lt;- var(x1)  s2 lt;- var(x2)  dataname lt;- paste(deparse(substitute(x1)), "and", deparse(substitute(x2)))  if(s1 gt; s2) {  ts = s1/s2  pval = 2 * (1 - pf(ts, df1, df2))  conf = c(s1/(s2*qf(1-alpha/2, df1, df2)), s1/(s2*qf(alpha/2, df1,df2)))  }  else if(s2 gt;= s1) {  ts = s2/s1  pval = 2 * (1 - pf(ts, df2, df1))  conf = c(s2/(s1*qf(1-alpha/2, df2, df1)), s2/(s1*qf(alpha/2, df2,df1)))  }    names(ts) = "F"  attr(conf, "conf.level") lt;- level  output lt;- list(statistic = ts, p.value = pval, conf.int = conf, data.name = dataname)  attr(output, "class") lt;- "htest"  return(output) }  

Если я попытаюсь добавить переменную alpha в свой вывод, это не приведет к какой-либо разнице в выводе, возвращаемом функцией. Так, например

 output lt;- list(statistic = ts, p.value = pval, conf.int = conf, data.name = dataname, level)  

Ответ №1:

print Метод для объектов класса "htest" не выводит атрибут conf.int , но он есть:

 set.seed(2021) x lt;- rnorm(100) y lt;- rnorm(100) ht lt;- testvar(x, y) attributes(ht$conf.int) #$conf.level #[1] 0.95  

Это может быть автоматически напечатано, если объект возвращает класс подклассов "htest" и для этого пользовательского класса написан метод.
В тестовой функции перепишите инструкцию по атрибуции класса следующим образом

 attr(output, "class") lt;- c("feonyte", "htest")  

или используя другое имя класса. Затем напишите print.feonyte метод.

 print.feonyte lt;- function(x, ...){  NextMethod(x, ...)  alpha lt;- attr(x$conf.int, "conf.level")  cat("confidence level:", alpha, "nn")  invisible(NULL) }  ht  

Кроме того, возвращаемое значение не имеет method alternative и parameter членов.