T-тест в R програмирането: Един пример и сдвоен пример
⚡ Умно обобщение
T-тестът в R сравнява средни стойности, използвайки функцията t.test(), обхващайки една извадка спрямо фиксирана цел, две независими групи и сдвоени повтарящи се измервания. Това ръководство изпълнява всеки вариант, отчита правилно p-стойността и проверява основните предположения.

Какво е статистическо заключение?
Статистическият извод е изкуството да се генерират заключения относно разпределението на данните. Специалистът по данни често се сблъсква с въпроси, на които може да се отговори само научно. Следователно, статистическият извод е стратегия за проверка дали дадена хипотеза е вярна, т.е. дали е потвърдена от данните.
Често срещана стратегия за оценка на хипотеза е t-тестът, който показва дали две средни стойности са равни. Той е известен още като Студентски тест. T-тест може да се изчисли за:
- Единичен вектор спрямо фиксирана стойност (t-тест за една извадка)
- Два вектора от две отделни групи (независим двуизборков t-тест)
- Два вектора, измерени върху едни и същи субекти (сдвоен t-тест)
Всеки t-тест приема, че данните са произволно избрани и че стойностите (или, за сдвоен тест, разликите) идват от приблизително нормално разпределена популация. Независимата версия с две извадки допълнително приема, че двете групи са независими една от друга, а класическата форма приема, че техните дисперсии са равни.
Какво е T-тест в R програмирането?
Основната идея зад T-теста е да се използва статистика за оценка на две противоположни хипотези:
- H0: нулевата хипотеза, че средната стойност на генералната съвкупност е равна на тестваната стойност
- H1алтернативната хипотеза, че средната стойност на популацията се различава от тази стойност
T-тестът е предназначен за малки размери на извадките, където нормалното приближение е ненадеждно. Той изисква данните да са приблизително нормално разпределени.
Синтаксис на T-тест в R
Основният синтаксис за t.test() в R е:
t.test(x, y = NULL, mu = 0, var.equal = FALSE) arguments: - x : A vector to compute the one-sample t-test - y: A second vector to compute the two sample t-test - mu: Mean of the population under the null hypothesis - var.equal: Specify whether the variances of the two vectors are equal. By default, set to `FALSE` - paired: Set to `TRUE` when the two vectors are repeated measures on the same subjects
Преди да изпълните каквото и да е, съобразете оформлението на данните си с правилния вариант на теста.
Видове T-тестове в R
Изборът на грешен вариант е най-често срещаната грешка при t-теста, така че започнете, като съпоставите оформлението на данните си с правилното извикване.
| Тип | Използвайте го, когато | R повикване |
|---|---|---|
| Една проба | Една група, сравнена с известна целева стойност | t.test(x, mu = стойност) |
| Независима двупробна (Welch) | Две отделни групи, евентуално неравномерни вариации | t.test(x, y) |
| Независими две извадки (обединени) | Две отделни групи с еднаква дисперсия | t.test(x, y, var.equal = TRUE) |
| В комбина | Същите субекти са измерени два пъти | t.test(x, y, сдвоени = TRUE) |
| Едностранен | Интересува те само разликата в едната посока | t.test(x, mu = стойност, алтернатива = „по-голяма“) |
След три групи, t-тестът вече не е подходящ. Преминете към ANOVA тест, което поддържа общия процент на грешки на 5 процента, вместо да го завишава при многократни двойни сравнения.
Един примерен T-тест в R
T-тестът за една извадка или тестът на Стюдънт сравнява средната стойност на вектор с теоретична средна стойност, . Формулата, използвана за изчисляване на t-теста, е:
Тук
се отнася до средната стойност
до теоретичната средна
- s е стандартното отклонение
- n броя на наблюденията.
За да оцените статистическата значимост на t-теста, трябва да изчислите р-стойност, Най- р-стойност варира от 0 до 1 и се интерпретира, както следва:
- p-стойност по-ниска от 0.05 означава, че можете да отхвърлите нулевата хипотеза. Обърнете внимание, че отхвърлянето на H0 не е същото като доказването на H1, а само означава, че данните са малко вероятни при H0.
- P-стойност по-висока от 0.05 показва, че нямате достатъчно доказателства, за да отхвърлите нулевата хипотеза.
Можете да конструирате p-стойността, като разгледате съответната абсолютна стойност на t-теста в разпределението на Стюдънт със степен на свобода, равна на
Например, с 5 наблюдения сравнявате вашата t-стойност с разпределението на Стюдънт с 4 степени на свобода при 95% ниво на доверие. За да се отхвърли нулевата хипотеза в двустранен тест, абсолютната t-стойност трябва да надвишава 2.776.
Вижте таблицата по-долу:
Един примерен пример за T-тест в R
Да предположим, че сте компания, произвеждаща бисквитки. Всяка бисквитка трябва да съдържа 10 грама захар. Бисквитките се произвеждат от машина, която добавя захарта в купа, преди всичко да се смеси. Вярвате, че машината не добавя 10 грама захар за всяка бисквитка. Ако предположението ви е вярно, машината трябва да бъде поправена. Запаметихте нивото на захар от тридесет бисквитки.
Забележка: Можете да създадете произволен вектор с функцията rnorm(). Тази функция генерира нормално разпределени стойности. Основният синтаксис е:
rnorm(n, mean, sd) arguments - n: Number of observations to generate - mean: The mean of the distribution. Optional - sd: The standard deviation of the distribution. Optional
Можете да създадете разпределение с 30 наблюдения със средна стойност от 9.99 и стандартно отклонение от 0.04.
set.seed(123) sugar_cookie <- rnorm(30, mean = 9.99, sd = 0.04) head(sugar_cookie)
Изход:
## [1] 9.967581 9.980793 10.052348 9.992820 9.995172 10.058603
Можете да използвате t-тест за една проба, за да проверите дали нивото на захарта е различно от рецептата. Можете да начертаете тест за хипотеза:
- H0: Средното ниво на захар е равно на 10
- H1: Средното ниво на захар е различно от 10
Използвате ниво на значимост от 0.05.
# H0 : mu = 10 t.test(sugar_cookie, mu = 10)
Ето резултата:
P-стойността на t-теста за една проба е 0.1079, над прага от 0.05. 95-процентният доверителен интервал за средната стойност е от 9.973 до 10.002 грама и съдържа целевата стойност от 10. Следователно не можете да отхвърлите H0: няма достатъчно доказателства, че машината се отклонява от рецептата.
Независим двупробен t-тест в R
Независимият t-тест с две извадки е най-често използваният вариант и се прилага винаги, когато двата набора от измервания идват от различни субекти: два цеха, две машини, две лечебни рамена.
Да предположим, че една фабрика управлява две производствени линии и искате да знаете дали те пълнят буркани с еднакво тегло.
set.seed(123) line_a <- rnorm(25, mean = 500, sd = 8) line_b <- rnorm(25, mean = 505, sd = 8) # Welch test, the safe default t.test(line_a, line_b) # Pooled test, only when the variances are equal t.test(line_a, line_b, var.equal = TRUE)
Прочетете резултата в четири стъпки.
- t е стандартизираният размер на разликата между двете средни стойности. Знакът му отразява само реда, в който сте предали векторите.
- df е броят степени на свобода. Уелч дава дробна стойност; обединеният тест дава цяло число, равно на n1 + n2 – 2.
- р-стойност е вероятността да се види толкова голяма разлика, ако истинските средни стойности бяха идентични.
- Доверителен интервал ограничава истинската разлика. Когато съдържа нула, разликата не е значителна на това ниво.
Ако данните ви се намират в един кадър от данни с една колона със стойности и една колона с фактори, използвайте интерфейса за формули, който е по-лесен за четене и избягва разделянето на данните ръчно:
t.test(weight ~ line, data = jars)
Коя версия да използвам. Оставете var.equal със стойност по подразбиране FALSE, освен ако не сте тествали и потвърдили равни дисперсии. Корекцията на Уелч не струва почти нищо в мощност, когато дисперсиите съвпадат, и ви защитава, когато не съвпадат.
Сдвоен T-тест в R
Сдвоеният t-тест, наричан още t-тест за зависима извадка, се прилага, когато една и съща група се измерва два пъти. Типични приложения са:
- A / B Тестване: Сравнете два варианта
- Проучвания случай-контролапреди и след лечение на същите теми
Пример за сдвоен T-тест в R
Компания за напитки се интересува от ефективността на програмата за отстъпки върху продажбите. Компанията реши да следи ежедневните разпродажби на един от магазините си, където се популяризира програмата. В края на програмата компанията иска да знае дали има статистическа разлика между средните продажби на магазина преди и след програмата.
- фирмата tracследихме продажбите всеки ден преди началото на програмата. Това е първият ни вектор.
- Програмата се промотира за една седмица и продажбите се записват всеки ден. Това е нашият втори вектор.
- Ще извършите t-теста, за да прецените ефективността на програмата. Това се нарича сдвоен t-тест, защото стойностите на двата вектора идват от едно и също разпределение (т.е. от един и същ магазин).
Проверката на хипотезата е:
- H0: Няма разлика в средната стойност
- H1: Двете средства са различни
Не забравяйте, че класическият t-тест приема неизвестна, но еднаква дисперсия и в двете групи. Реалните данни рядко удовлетворяват точно това и игнорирането на разликата може да изкриви резултата.
Решението е t-тестът на Уелч, който смекчава предположението за еднаква дисперсия. R го прилага по подразбиране, защото var.equal е FALSE, освен ако не кажете друго. В този набор от данни и двата вектора са генерирани с едно и също стандартно отклонение, така че можете спокойно да зададете var.equal = TRUE.
Създавате два произволни вектора от разпределение на Гаус с по-висока средна стойност за продажбите след програмата.
set.seed(123) # sales before the program sales_before <- rnorm(7, mean = 50000, sd = 50) # sales after the program.This has higher mean sales_after <- rnorm(7, mean = 50075, sd = 50) # draw the distribution t.test(sales_before, sales_after,var.equal = TRUE)
P-стойността е 0.04606, точно под прага от 0.05, така че отхвърляте H0 и заключавате, че двете средни стойности се различават значително. Програмата за отстъпки изглежда е увеличила продажбите.
⚠️ Важно: горното извикване сравнява двата вектора като независим проби. Тъй като и двете серии са измервания в един и същ цех, статистически коректното извикване добавя сдвоени = TRUE:
t.test(sales_before, sales_after, paired = TRUE)
Сдвоената форма тества средната стойност на дневните разлики, вместо разликата на две средни стойности. Тя премахва вариацията на ниво магазин, споделена между двата вектора, и следователно има по-голяма статистическа мощност.
Как да проверим допусканията на T-теста в R
P-стойността на t-теста е значима само когато са верни нейните допускания. Всяко от тях може да бъде проверено директно.
1. Нормалност. Тестовете с една проба и две проби приемат, че стойностите са приблизително нормални; тестът с двойки приема, че различия са. Проверете QQ графика и потвърдете с теста на Шапиро-Уилк:
qqnorm(sugar_cookie); qqline(sugar_cookie)
shapiro.test(sugar_cookie)
# for a paired design, test the differences
shapiro.test(sales_after - sales_before)
P-стойност на Шапиро-Уилк над 0.05 означава, че нормалността не може да бъде отхвърлена. При повече от около 30 наблюдения на група, централната гранична теорема прави t-теста устойчив до умерено асиметрия така или иначе.
2. Равна дисперсия. Само обединеният тест с две извадки се нуждае от това. Тествайте го с F-тест:
var.test(line_a, line_b)
p-стойност над 0.05 подкрепя равни дисперсии, което оправдава var.equal = TRUE.
3. Независимост. Това следва от дизайна на изследването и не може да бъде тествано впоследствие. Ако един и същ субект допринася и за двата вектора, независимият тест е просто грешен инструмент и ви е необходимо „сдвоено“ = TRUE.
Когато едно предположение се провали. За явно ненормални данни с малки извадки, използвайте алтернативите, базирани на ранг: wilcox.test(x, y) замества t-теста с две извадки, а wilcox.test(x, y, paired = TRUE) замества сдвоената версия. Нито един от тях не изисква нормалност, въпреки че и двата имат малка разлика в мощността, когато данните всъщност са нормални.
T-тест в R: Ключови изводи и справка за тестове
- Статистическото заключение е изкуството да се генерират заключения относно разпределението на данните.
- Т-тестът принадлежи към семейството на инференциални статистики. Обикновено се използва, за да се установи дали има статистическа разлика между средните стойности на две групи.
- Еднопробният t-тест, или тестът на Стюдънт, сравнява средната стойност на вектор с теоретична средна стойност.
- Сдвоеният t-тест или t-тестът за зависима извадка се прилага, когато една и съща група се измерва два пъти.
Таблицата по-долу обобщава всеки от гореспоменатите тестове:
| тест | Хипотеза за проверка | р-стойност | Code | Незадължителен аргумент |
|---|---|---|---|---|
| t-тест за една проба | Средната стойност на вектор е различна от теоретичната средна стойност | 0.05 |
t.test(x, mu = mean)
|
|
| t-тест на сдвоена проба | Средната стойност А е различна от средната стойност B за едни и същи субекти | 0.05 |
t.test(A, B, paired = TRUE) |
var.equal = TRUE
|
Ако сте склонни да приемете равни дисперсии в независим тест с две извадки, задайте var.equal = TRUE. Оставете го на подразбиращата се стойност FALSE, за да изпълните по-безопасната корекция на Уелч.




