#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
членов.