Я хочу вычислить критическую разницу для моих парных сравнений. Для этого мне нужно понять, как корректируются значения p, поскольку я хочу, чтобы метод tukey был активным.
Мне удалось восстановить расчет T-статистики и нескорректированные значения p. Но, используя искусственный интеллект и Интернет, я не смог придумать формулу для скорректированных значений p, которая дала бы мне тот же результат, что и emmeans.
Это пример случая, который я хочу понять:
Estimate 2.5_ci 97.5_ci SE DF ci_upper ci_lower
algorithm
PriorBand+BO 2.556 2.504 2.608 0.027 12000.0 2.504 2.608
BOHB 2.625 2.573 2.677 0.027 12000.0 2.573 2.677
RS+Prior 3.223 3.171 3.275 0.027 12000.0 3.171 3.275
PiBO 3.223 3.171 3.275 0.027 12000.0 3.171 3.275
BO 3.373 3.321 3.425 0.027 12000.0 3.321 3.425
algorithm_1 algorithm_2 Estimate 2.5_ci 97.5_ci SE DF T-stat P-val Sig
7 (PriorBand+BO) BOHB -0.069 -0.172 0.033 0.038 12000.0 -1.843 0.349
Итак, моя «цель» — 0,349.
t_stat равен -1,8157894736842106, а нескорректированное значение p равно 0,06942762000543438.
AI предложил эту формулу, которая рассчитывает значение q на основе стьюдентизированного диапазона и на основе этого поправочного коэффициента:
q=studentized_range.ppf(1 - 0.05, k=k,df=df)
factor=q/np.sqrt(k)
adjusted_p=p*factor
Но результат не соответствует моей цели:
q=3.8582424830229995
factor=1.725458493143401
adjusted_p=0.11979447659710946
Спасибо! Это ответило на оба моих вопроса. Я отредактирую вопрос, чтобы он содержал ответ.
Как упомянул @Matt Haberland, аналогичный вопрос был задан здесь. Итак, чтобы вычислить значение p в моем примере, вы используете
1 - ptukey(t_stat * sqrt(2), k, df)
(в R) или
1 - scipy.stats.studentized_range.cdf(t_stat*np.sqrt(2), k=k, df=df)
(на Python)
где t_stat=abs(mean_difference/SE)
, k=5 — количество групп и df=12000.
И чтобы вычислить критическую разницу HSD (этой конкретной пары):
HSD=scipy.stats.studentized_range.ppf(1-0.05, k=k,df=df)/np.sqrt(2)*SE
Похоже, это может быть актуально: stats.stackexchange.com/questions/401856/…