169 похожих чатов

Вопрос по difference-in-difference. did впервые применяю, программирования в седьмом классе

не было.
задача: оценить влияние тритмента (скидки) на переменную count. скидка действовала с 2020-11-02 по 2022-12-30, но только в 5:15-7:15 и 8:45-9:15 (это загнал в переменную time_action).
group1 — группа, на которую применялся тритмент, group2 — группа для сравнения (на ней тритмента не было); это загнал в переменную treated.
основная гипотеза в том, что скидка способствовала повышению count в период 5:15-7:45 и 8:45-9:15.

данные, код и саммари модели прикладываю

library(data.table)
library(tidyverse)


did_df <- fread('did_tkl.csv')


did_df <- mutate(did_df,
time_action = ifelse(did_df$date >= "2020-11-02" &
(did_df$time < '07:15:00' | did_df$time %in% c('08:45:00', '09:00:00')
), 1, 0),
treated = ifelse(group == "group1", 1, 0)
)

did_df_model <- lm(count ~ time_action + treated + time_action:treated, data = did_df)
summary(did_df_model)

Call:
lm(formula = count ~ time_action + treated + time_action:treated,
data = did_df)

Residuals:
Min 1Q Median 3Q Max
-13428 -4121 -782 3931 32527

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8726.38 39.12 223.07 <2e-16 ***
time_action -3797.87 86.84 -43.73 <2e-16 ***
treated 4702.67 55.31 85.02 <2e-16 ***
time_action:treated -2421.87 122.83 -19.72 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 5871 on 56523 degrees of freedom
Multiple R-squared: 0.2021, Adjusted R-squared: 0.202
F-statistic: 4772 on 3 and 56523 DF, p-value: < 2.2e-16

вопросы:
как интерпретировать полученные в модели результаты? адекватная ли модель получилась? как можно улучшить ее?

насколько я понял по саммари, p-value значимый (это хорошо), time_action:treated отрицательный - это значит, что во время скидки count уменьшается, R-квадрат очень низкий (это плохо, т.к. модель объясняет только 20% наблюдений). или все не так понял?
делал по тутору отсюда. буду благодарен за ссылки на полезный материал по теме.

18 ответов

64 просмотра

Такс а зачем дид если вы знаете когда эффект произошел и его не надо эстимейтить

У меня такая картинка получается. Но тут топором и паяльником. @all ! Может кто более сведущий в таких штуках подскажет?

Семён 🐍- Автор вопроса
Ілія Малекі
Такс а зачем дид если вы знаете когда эффект произ...

т.е. дид не подходит к моей задаче? про сравнение булевой переменной не понял

Семён 🐍- Автор вопроса
Семён 🐍
а что на картинке происходит?

https://acclab.github.io/robust-statistical-visualization.html

я честно говоря не понял постановки. Есть периоды скидок. Клиенты которые приходили вне периодов - на них скидка не повлияла. Есть контрольные и тестовые группы. Вопросы - Вопрос на который надо ответить - "приводит ли скидка к увеличению количества клиентов?" - В чем идея рассматривать весь период, а не только окна, когда было воздействие?

Семён 🐍
а что на картинке происходит?

По мне, так это просто сравнение двух несвязанных групп. Выкинул мусор и побутсрапил. Объяснение в виде картинки доходчиво для менеджера любого ранга и в этом плюс решения. library(tidyverse) library(hms) library(dabestr) did_df <- here::here("data", "stat_test", "did_tkl.csv") %>% read_csv() df <- did_df %>% filter(date >= as.Date("2020-11-02")) %>% filter(time < hms("07:15:00") | time %in% c(hms("08:45:00"), hms("09:00:00"))) %>% mutate(group = if_else(group == "group1", "Treated", "Control")) two.group.unpaired <- df %>% dabest(group, count, idx = c("Control", "Treated"), paired = FALSE) two.group.unpaired.meandiff <- mean_diff(two.group.unpaired) two.group.unpaired.meandiff plot(two.group.unpaired.meandiff)

Семён 🐍- Автор вопроса
Ivan Struzhkov
я честно говоря не понял постановки. Есть периоды...

возможно, рассматривать весь период не имеет смысла. просто мне кажется, что некоторые клиенты будут приходить в то время, когда скидки нет, но из-за плохой информированности или других факторов будут думать, что она есть

Семён 🐍
возможно, рассматривать весь период не имеет смысл...

так это вопрос разведочного анализа. Приходят ли клиенты, сколько их таких, влияет ли это на модель

Семён 🐍
возможно, рассматривать весь период не имеет смысл...

Постройте такую же линейную регрессию, но на самой серии, а не на диде, и докиньте туда t, чтобы вычесть линейный тренд на всякий пожарный

Семён 🐍- Автор вопроса
Ilya Shutov
По мне, так это просто сравнение двух несвязанных ...

это не для менеджера, а для диплома, и комиссии (и самому себе, конечно) нужно как-то объяснить эту картинку ещё)

Придумать разные теории для объяснения даже противоположных результатов — легко. За кадром осталось 99% мотивации покупателей. Главное понимать, что хочешь доказать. Напустить мутности и недоговоренности. И изрядно справить картинками. Это исследование — не математика и не физика. Это "журналистика" для выбивания бюджетов / отчетов о правильности финансирования.

Hi, not at the computer. This is what I would do

Vitalijs
Не согласен =(

Я только мнение высказал. На действия покупателей я смотрел долго и много. Экзерсизы всякие бывают, мотивация иногда за кадром остается.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта