* * * * * * * * * * * * * * * * * * Memory Effects Waves 38 to 40 * * * * * * * * * * * * * * * * * * * * path definitions * * global data "Z:\team\Projekte\Memory2_TR" global paradata "Z:\team\Projekte\Memory2_TR\paradata" global out "U:\Dissertation\Memory Effects II\Stata" * * import data * * use "$data\GIP_W38_V1_1.dta", clear drop BG* CE* rndCE* expCE* ZF38116_js expZF38116 ZF38116 ZF38117 rndZH38352 rename dDatum dDatum_38 * * merge paradata * * merge 1:1 id_g using "$paradata\GIP_paradata_W38_V1_1.dta", keepusing(smartphone f002_end f003_end f004_end f005_end f006_end f007_end dauer_* f001_start QE38008_end) rename smartphone smartphone_38 drop _merge merge 1:1 id_g using "$data\GIP_W40_V1_1.dta" rename dDatum dDatum_40 tab _merge // 366 from W38 not in W40, 962 new in W40, 3928 in both waves keep if _merge == 3 drop _merge drop expZF40117 - QE40008_TXT_na merge 1:1 id_g using "$paradata\GIP_paradata_W40_V1_1.dta", keepusing(smartphone f002_start f005_start f008_start f011_start f014_start f017_start) rename smartphone smartphone_40 keep if _merge == 3 drop _merge * * merge additional data * * merge 1:1 id_g using "$data\GIP_W39_V4.dta", keepusing(id_g) drop if _merge == 2 gen inbetween_wave = . replace inbetween_wave = 1 if _merge == 3 replace inbetween_wave = 0 if _merge == 1 drop _merge merge 1:1 id_g using "$paradata\exact_age.dta" drop if _merge == 2 drop _merge * * * sort in experimental groups * * * gen group = . replace group = 1 if expZF38092 == 1 | expZF38092 == 2 | expZF38092 == 3 | expZF38092 == 4 replace group = 2 if expZF38092 == 5 | expZF38092 == 6 | expZF38092 == 7 | expZF38092 == 8 replace group = 3 if expZF38092 == 9 | expZF38092 == 10 | expZF38092 == 11 | expZF38092 == 12 label define group 1 "attitude" 2 "behavior" 3 "belief" label values group group tab group, mis drop if group == . // 12 respondents / 24 obs lost before first question gen answer_1 = . replace answer_1 = ZF38092 if expZF38092 == 1 | expZF38092 == 3 replace answer_1 = ZF38093 if expZF38092 == 2 | expZF38092 == 4 replace answer_1 = ZF38094 if expZF38092 == 5 | expZF38092 == 7 replace answer_1 = ZF38095 if expZF38092 == 6 | expZF38092 == 8 replace answer_1 = ZF38096 if expZF38092 == 9 | expZF38092 == 11 replace answer_1 = ZF38097 if expZF38092 == 10 | expZF38092 == 12 gen answer_2 = . replace answer_2 = ZF38093 if expZF38092 == 1 | expZF38092 == 3 replace answer_2 = ZF38092 if expZF38092 == 2 | expZF38092 == 4 replace answer_2 = ZF38095 if expZF38092 == 5 | expZF38092 == 7 replace answer_2 = ZF38094 if expZF38092 == 6 | expZF38092 == 8 replace answer_2 = ZF38097 if expZF38092 == 9 | expZF38092 == 11 replace answer_2 = ZF38096 if expZF38092 == 10 | expZF38092 == 12 gen memory_1 = . replace memory_1 = ZF40098 if expZF38092 == 1 | expZF38092 == 3 replace memory_1 = ZF40101 if expZF38092 == 2 | expZF38092 == 4 replace memory_1 = ZF40104 if expZF38092 == 5 | expZF38092 == 7 replace memory_1 = ZF40107 if expZF38092 == 6 | expZF38092 == 8 replace memory_1 = ZF40110 if expZF38092 == 9 | expZF38092 == 11 replace memory_1 = ZF40113 if expZF38092 == 10 | expZF38092 == 12 gen memory_2 = . replace memory_2 = ZF40101 if expZF38092 == 1 | expZF38092 == 3 replace memory_2 = ZF40098 if expZF38092 == 2 | expZF38092 == 4 replace memory_2 = ZF40107 if expZF38092 == 5 | expZF38092 == 7 replace memory_2 = ZF40104 if expZF38092 == 6 | expZF38092 == 8 replace memory_2 = ZF40113 if expZF38092 == 9 | expZF38092 == 11 replace memory_2 = ZF40110 if expZF38092 == 10 | expZF38092 == 12 gen recall_1 = . replace recall_1 = ZF40099 if expZF38092 == 1 | expZF38092 == 3 replace recall_1 = ZF40102 if expZF38092 == 2 | expZF38092 == 4 replace recall_1 = ZF40105 if expZF38092 == 5 | expZF38092 == 7 replace recall_1 = ZF40108 if expZF38092 == 6 | expZF38092 == 8 replace recall_1 = ZF40111 if expZF38092 == 9 | expZF38092 == 11 replace recall_1 = ZF40114 if expZF38092 == 10 | expZF38092 == 12 gen recall_2 = . replace recall_2 = ZF40102 if expZF38092 == 1 | expZF38092 == 3 replace recall_2 = ZF40099 if expZF38092 == 2 | expZF38092 == 4 replace recall_2 = ZF40108 if expZF38092 == 5 | expZF38092 == 7 replace recall_2 = ZF40105 if expZF38092 == 6 | expZF38092 == 8 replace recall_2 = ZF40114 if expZF38092 == 9 | expZF38092 == 11 replace recall_2 = ZF40111 if expZF38092 == 10 | expZF38092 == 12 gen certain_1 = . replace certain_1 = ZF40100 if expZF38092 == 1 | expZF38092 == 3 replace certain_1 = ZF40103 if expZF38092 == 2 | expZF38092 == 4 replace certain_1 = ZF40106 if expZF38092 == 5 | expZF38092 == 7 replace certain_1 = ZF40109 if expZF38092 == 6 | expZF38092 == 8 replace certain_1 = ZF40112 if expZF38092 == 9 | expZF38092 == 11 replace certain_1 = ZF40115 if expZF38092 == 10 | expZF38092 == 12 gen certain_2 = . replace certain_2 = ZF40103 if expZF38092 == 1 | expZF38092 == 3 replace certain_2 = ZF40100 if expZF38092 == 2 | expZF38092 == 4 replace certain_2 = ZF40109 if expZF38092 == 5 | expZF38092 == 7 replace certain_2 = ZF40106 if expZF38092 == 6 | expZF38092 == 8 replace certain_2 = ZF40115 if expZF38092 == 9 | expZF38092 == 11 replace certain_2 = ZF40112 if expZF38092 == 10 | expZF38092 == 12 tab1 answer* memory* recall* certain*, mis * "answer" = original answer * "memory" = "can you recall?" yes/no * "recall" = repeated answer (may at this point be right or wrong) * "certain" = "how certain are you?" * time of original question and follow-ups * gen double origin_time_1 = . replace origin_time_1 = f002_end if expZF38092 == 1 | expZF38092 == 3 replace origin_time_1 = f003_end if expZF38092 == 2 | expZF38092 == 4 replace origin_time_1 = f004_end if expZF38092 == 5 | expZF38092 == 7 replace origin_time_1 = f005_end if expZF38092 == 6 | expZF38092 == 8 replace origin_time_1 = f006_end if expZF38092 == 9 | expZF38092 == 11 replace origin_time_1 = f007_end if expZF38092 == 10 | expZF38092 == 12 gen double origin_time_2 = . replace origin_time_2 = f003_end if expZF38092 == 1 | expZF38092 == 3 replace origin_time_2 = f002_end if expZF38092 == 2 | expZF38092 == 4 replace origin_time_2 = f005_end if expZF38092 == 5 | expZF38092 == 7 replace origin_time_2 = f004_end if expZF38092 == 6 | expZF38092 == 8 replace origin_time_2 = f007_end if expZF38092 == 9 | expZF38092 == 11 replace origin_time_2 = f006_end if expZF38092 == 10 | expZF38092 == 12 gen double follow_time_1 = . replace follow_time_1 = f002_start if expZF38092 == 1 | expZF38092 == 3 replace follow_time_1 = f005_start if expZF38092 == 2 | expZF38092 == 4 replace follow_time_1 = f008_start if expZF38092 == 5 | expZF38092 == 7 replace follow_time_1 = f011_start if expZF38092 == 6 | expZF38092 == 8 replace follow_time_1 = f014_start if expZF38092 == 9 | expZF38092 == 11 replace follow_time_1 = f017_start if expZF38092 == 10 | expZF38092 == 12 gen double follow_time_2 = . replace follow_time_2 = f005_start if expZF38092 == 1 | expZF38092 == 3 replace follow_time_2 = f002_start if expZF38092 == 2 | expZF38092 == 4 replace follow_time_2 = f011_start if expZF38092 == 5 | expZF38092 == 7 replace follow_time_2 = f008_start if expZF38092 == 6 | expZF38092 == 8 replace follow_time_2 = f017_start if expZF38092 == 9 | expZF38092 == 11 replace follow_time_2 = f014_start if expZF38092 == 10 | expZF38092 == 12 * * rescale to days * * foreach var of varlist(follow_time_1 follow_time_2 origin_time_1 origin_time_2) { replace `var' = `var' / 1000 // scale to seconds (floor not needed because last 3 digits are always 0 anyway) replace `var' = floor(`var' / 60) // minutes replace `var' = floor(`var' / 60) // hours replace `var' = floor(`var' / 24) // days tab `var', mis } gen double distance_1 = . replace distance_1 = follow_time_1 - origin_time_1 gen double distance_2 = . replace distance_2 = follow_time_2 - origin_time_2 tab1 distance*, mis drop origin_time_* follow_time_* * * response time * * gen double response_time_1 = . replace response_time_1 = dauer_f002 if expZF38092 == 1 | expZF38092 == 3 replace response_time_1 = dauer_f003 if expZF38092 == 2 | expZF38092 == 4 replace response_time_1 = dauer_f004 if expZF38092 == 5 | expZF38092 == 7 replace response_time_1 = dauer_f005 if expZF38092 == 6 | expZF38092 == 8 replace response_time_1 = dauer_f006 if expZF38092 == 9 | expZF38092 == 11 replace response_time_1 = dauer_f007 if expZF38092 == 10 | expZF38092 == 12 gen double response_time_2 = . replace response_time_2 = dauer_f003 if expZF38092 == 1 | expZF38092 == 3 replace response_time_2 = dauer_f002 if expZF38092 == 2 | expZF38092 == 4 replace response_time_2 = dauer_f005 if expZF38092 == 5 | expZF38092 == 7 replace response_time_2 = dauer_f004 if expZF38092 == 6 | expZF38092 == 8 replace response_time_2 = dauer_f007 if expZF38092 == 9 | expZF38092 == 11 replace response_time_2 = dauer_f006 if expZF38092 == 10 | expZF38092 == 12 replace response_time_1 = response_time_1 / 1000 replace response_time_2 = response_time_2 / 1000 gen double interviewLength = (QE38008_end - f001_start) / 1000 tab interviewLength, mis * question type * gen type = . replace type = 1 if expZF38092 == 1 | expZF38092 == 2 | expZF38092 == 3 | expZF38092 == 4 replace type = 2 if expZF38092 == 5 | expZF38092 == 6 | expZF38092 == 7 | expZF38092 == 8 replace type = 3 if expZF38092 == 9 | expZF38092 == 10 | expZF38092 == 11 | expZF38092 == 12 label define type 1 "attitude" 2 "behavior" 3 "belief" label values type type tab type, mis * follow-ups in W38 * gen asked_before = . replace asked_before = 1 if expZF38092 == 1 | expZF38092 == 2 | expZF38092 == 5 | expZF38092 == 6 | expZF38092 == 9 | expZF38092 == 10 replace asked_before = 0 if expZF38092 == 3 | expZF38092 == 4 | expZF38092 == 7 | expZF38092 == 8 | expZF38092 == 11 | expZF38092 == 12 * mark nonresponse/breakoff in W38 gen follow_1a = . replace follow_1a = ZF38098 if expZF38092 == 1 replace follow_1a = ZF38101 if expZF38092 == 2 replace follow_1a = ZF38104 if expZF38092 == 5 replace follow_1a = ZF38107 if expZF38092 == 6 replace follow_1a = ZF38110 if expZF38092 == 9 replace follow_1a = ZF38113 if expZF38092 == 10 gen follow_1b = . replace follow_1b = ZF38099 if expZF38092 == 1 replace follow_1b = ZF38102 if expZF38092 == 2 replace follow_1b = ZF38105 if expZF38092 == 5 replace follow_1b = ZF38108 if expZF38092 == 6 replace follow_1b = ZF38111 if expZF38092 == 9 replace follow_1b = ZF38114 if expZF38092 == 10 gen follow_1c = . replace follow_1c = ZF38100 if expZF38092 == 1 replace follow_1c = ZF38103 if expZF38092 == 2 replace follow_1c = ZF38106 if expZF38092 == 5 replace follow_1c = ZF38109 if expZF38092 == 6 replace follow_1c = ZF38112 if expZF38092 == 9 replace follow_1c = ZF38115 if expZF38092 == 10 gen follow_2a = . replace follow_2a = ZF38101 if expZF38092 == 1 replace follow_2a = ZF38098 if expZF38092 == 2 replace follow_2a = ZF38107 if expZF38092 == 5 replace follow_2a = ZF38104 if expZF38092 == 6 replace follow_2a = ZF38113 if expZF38092 == 9 replace follow_2a = ZF38110 if expZF38092 == 10 gen follow_2b = . replace follow_2b = ZF38102 if expZF38092 == 1 replace follow_2b = ZF38099 if expZF38092 == 2 replace follow_2b = ZF38108 if expZF38092 == 5 replace follow_2b = ZF38105 if expZF38092 == 6 replace follow_2b = ZF38114 if expZF38092 == 9 replace follow_2b = ZF38111 if expZF38092 == 10 gen follow_2c = . replace follow_2c = ZF38103 if expZF38092 == 1 replace follow_2c = ZF38100 if expZF38092 == 2 replace follow_2c = ZF38109 if expZF38092 == 5 replace follow_2c = ZF38106 if expZF38092 == 6 replace follow_2c = ZF38115 if expZF38092 == 9 replace follow_2c = ZF38112 if expZF38092 == 10 gen nonresponse_1 = 1 if follow_1a == -90 | follow_1b == -90 | follow_1c == -90 gen nonresponse_2 = 1 if follow_2a == -90 | follow_2b == -90 | follow_2c == -90 gen breakoff_1 = 1 if ((follow_1a == . & answer_1 != .) | (follow_1b == . & follow_1a != .) | (follow_1c == . & follow_1b != .)) & asked_before == 1 gen breakoff_2 = 1 if ((follow_2a == . & answer_2 != .) | (follow_2b == . & follow_2a != .) | (follow_2c == . & follow_2b != .)) & asked_before == 1 gen repeat_1 = follow_1b gen repeat_2 = follow_2b * * * Sociodemographics * * * * gender * tab gender_18, mis // 1 missing gen mark_gender = 1 if gender_18 == . // mark missings gen female = . replace female = 1 if gender_18 == 2 replace female = 0 if gender_18 == 1 * education * tab educ_school_18, mis // 1 missing, 101 "other" cannot be categorized gen educ3 = . replace educ3 = 1 if educ_school_18 == 1 | educ_school_18 == 2 | educ_school_18 == 3 replace educ3 = 2 if educ_school_18 == 4 replace educ3 = 3 if educ_school_18 == 5 | educ_school_18 == 6 label define educ3 1 "low" 2 "medium" 3 "high" label values educ3 educ3 numlabel _all, add force tab educ3, mis gen mark_educ3 = 1 if educ3 == . // mark missings * with 4 levels * tab1 educ_school_18 educ_job_18, mis gen educ4 = . replace educ4 = educ3 // Recode school degrees as above replace educ4 = 4 if educ_job_18 >= 8 & educ_job_18 <= 11 // university degrees label define educ4 1 "low" 2 "medium-low" 3 "medium-high" 4 "high" label values educ4 educ4 tab educ4, mis gen mark_educ4 = 1 if educ4 == . // 65 still missing * age * tab year_of_birth_cat_18, mis gen mark_age = 1 if year_of_birth_cat_18 == -80 | year_of_birth_cat_18 == . // mark missings sum year_of_birth_cat_18, detail tab year_of_birth_cat_18, mis gen age3 = . replace age3 = 3 if year_of_birth_cat_18 <= 5 & year_of_birth_cat_18 != -80 replace age3 = 2 if year_of_birth_cat_18 == 6 | year_of_birth_cat_18 == 7 | year_of_birth_cat_18 == 8 replace age3 = 1 if year_of_birth_cat_18 >= 9 & year_of_birth_cat != . label define age3 1 "<44" 2 "44 to 58" 3 "59+" label values age3 age3 numlabel _all, add force tab age3, mis * for sensitivity analyses: continuous age, 10-year categories * tab year_of_birth, mis gen exact_age = . replace exact_age = 2018 - year_of_birth if year_of_birth != -80 & year_of_birth != . tab exact_age, mis tab year_of_birth_cat_18, mis gen age10 = . replace age10 = 1 if year_of_birth_cat_18 == 12 | year_of_birth_cat_18 == 13 | year_of_birth_cat_18 == 14 replace age10 = 2 if year_of_birth_cat_18 == 10 | year_of_birth_cat_18 == 11 replace age10 = 3 if year_of_birth_cat_18 == 8 | year_of_birth_cat_18 == 9 replace age10 = 4 if year_of_birth_cat_18 == 6 | year_of_birth_cat_18 == 7 replace age10 = 5 if year_of_birth_cat_18 == 4 | year_of_birth_cat_18 == 5 replace age10 = 6 if year_of_birth_cat_18 == 1 | year_of_birth_cat_18 == 2 | year_of_birth_cat_18 == 3 label define age10 1 "<29" 2 "29-38" 3 "39-48" 4 "49-58" 5 "59-68" 6 ">68" label values age10 age10 numlabel _all, add force tab age10, mis * panel experience * tab sample, mis gen inexperienced = . replace inexperienced = 1 if sample == 3 replace inexperienced = 0 if sample == 1 | sample == 2 tab inexperienced, mis * survey enjoyment & burden indices * foreach var of varlist(QE38001 QE38002 QE38003 QE38004 QE38005 QE38006) { tab `var', mis gen mark_`var' = 1 if `var' == . | `var' == -90 // mark missings } gen enjoyment = . replace enjoyment = QE38001 + QE38002 + QE38003 replace enjoyment = enjoyment - 3 // rescale [3,12] to [0,9] replace enjoyment = enjoyment / 9 // rescale [0,9] to [0,1] tab enjoyment, mis gen burden = . replace burden = QE38004 + QE38005 + QE38006 replace burden = burden - 3 // rescale [3,12] to [0,9] replace burden = burden / 9 // rescale [0,9] to [0,1] tab burden, mis * mark first question per respondent * gen first_1 = 1 gen first_2 = 0 * reshape: gen 2 obs per respondent * reshape long answer_ memory_ recall_ certain_ distance_ first_ nonresponse_ breakoff_ repeat_ response_time_, i(id_g) j(qnumber) rename answer_ answer rename memory_ memory rename recall_ recall rename certain_ certain rename distance_ distance rename first_ first rename nonresponse_ nonresponse rename breakoff_ breakoff rename repeat_ repeat rename response_time_ response_time tab1 answer memory recall certain, mis * count and drop incomplete observations * * Reminder: 12 respondents / 24 obs lost to breakoff before group assignment in W38 (above) * follow-ups: only asked if original question / previous follow-up was answered tab answer, mis drop if answer == -90 // 1x nonresponse to test question tab nonresponse, mis drop if nonresponse == 1 // 5x nonresponse to follow-ups in W38 tab memory, mis drop if memory == -90 // 2x nonresponse alleged recall W40 tab recall, mis drop if recall == -90 // 4x nonresponse correct recall W40 tab certain, mis drop if certain == -90 // 5x nonresponse recall certainty W40 tab answer, mis drop if answer == . // 3x breakoff without answer to test question tab breakoff, mis drop if breakoff == 1 // 22x breakoff before follow-ups W38 tab memory, mis drop if memory == . // 24x breakoff before/during follow-ups W40 tab recall, mis drop if recall == . // 2x during follow-ups W40 tab certain, mis // no more breakoff tab mark_age, mis drop if mark_age == 1 // 4x missing age tab mark_gender, mis // no missings tab mark_educ4, mis drop if mark_educ4 == 1 // 128x missing / uncategorized education tab mark_QE38001, mis drop if mark_QE38001 == 1 // 13x missing survey evaluation tab mark_QE38002, mis drop if mark_QE38002 == 1 // 6x missing survey evaluation tab mark_QE38003, mis // no missings tab mark_QE38004, mis drop if mark_QE38004 == 1 // 2x missing survey evaluation tab mark_QE38005, mis drop if mark_QE38005 == 1 // 2x missing survey evaluation tab mark_QE38006, mis // no missings * overall: * 1 + 5 + 2 + 4 + 5 = 17x nonresponse * 24 + 3 + 22 + 24 + 2 = 75x breakoff * 4 + 128 + 13 + 6 + 2 + 2 = 155x other missingness * 3928 original respondents * 2 = 7856 obs * 7856 - 17 - 75 - 155 = 7609 obs left duplicates report id_g // 7609 obs of 3809 respondents - checks out bysort id_g: gen mult = _n tab mult, mis * for sensitivity analyses: (log) response time, interview length; remove outliers * sum response_time, detail sum interviewLength, detail tab response_time tab interviewLength * testing outlier definitions * * outlier definition: Median +/- 3 * (Q50-Q25 / Q75-Q50) * response time: median = 13s, Q25 = 9s, Q75 = 19s gen response_time_o1 = response_time replace response_time_o1 = . if response_time_o1 < (13 - ((13 - 9) * 3)) replace response_time_o1 = . if response_time_o1 > (13 + ((19 - 13) * 3)) tab response_time_o1, mis // outlier: <2s or >31s, 657 missing * outlier definition: remove Q1 & Q99, then mean +/- 2SD * response time: Q1 = 5s, Q99 = 125s gen response_time_o2 = response_time replace response_time_o2 = . if response_time_o2 <= 5 | response_time_o2 > 125 sum response_time_o2, detail // mean = 16.4, SD = 12.1; mean - 2 SD < 0, only exclude large values over 40.6 (data in full seconds: >= 41s) replace response_time_o2 = . if response_time_o2 >= 41 tab response_time_o2, mis // outlier: <= 5s or >40s, 622 missing *outlier definition: excessive length over 10 min gen response_time_o3 = response_time replace response_time_o3 = . if response_time_o3 > 600 tab response_time_o3, mis // 29 missings * outlier definition: Median +/- 3 * (Q50-Q25 / Q75-Q50) * interview length: median = 732s, Q25 = 548s, Q75 = 1040s gen length_o1 = interviewLength replace length_o1 = . if length_o1 < (732 - ((732 - 548) * 3)) replace length_o1 = . if length_o1 > (732 + ((1040 - 732) * 3)) tab length_o1, mis // outlier: < 191s (3min 11s) or > 1650s (27min 30s), 828 missings * outlier definition: remove Q1 & Q99, then mean +/- 2SD * interview length: Q1 = 270s, Q99 = 343889s gen length_o2 = interviewLength replace length_o2 = . if length_o2 <= 270 | length_o2 > 343889 sum length_o2, detail // mean = 3467.4, SD = 21821.2; mean - 2 SD <0, only exclude long times over 47109s (approx. 13h) replace length_o2 = . if length_o2 > 47109 tab length_o2, mis // 277 missings * outlier definition: interview length over 2 hours (7200s) gen length_o3 = interviewLength replace length_o3 = . if length_o3 > 7200 tab length_o3, mis // 269 missings gen log_response_time = log(response_time) gen log_length = log(interviewLength) * for comparison: median individual response speed to questions instead of interview length * egen response_speed = rowmedian(dauer_f009 dauer_f010 dauer_f014 dauer_f016 dauer_f019 dauer_f019 /// dauer_f022 dauer_f023 dauer_f024 dauer_f025 dauer_f026 dauer_f027 /// dauer_f028 dauer_f029 dauer_f030 dauer_f031 dauer_f032 dauer_f033 /// dauer_f034 dauer_f035 dauer_f036 dauer_f037 dauer_f038 dauer_f039 /// dauer_f040 dauer_f041 dauer_f057 dauer_f074 dauer_f075 dauer_f076 /// dauer_f077 dauer_f078 dauer_f079 dauer_f080) replace response_speed = response_speed / 1000 // rescale to seconds sum response_speed, detail drop dauer_* * correct repetition: y/n * gen difference = . replace difference = abs(recall - answer) tab difference, mis // Problem: difference >5 not possible for all original answers replace difference = 5 if difference > 5 & difference != . label define difference 0 "0" 1 "1" 2 "2" 3 "3" 4 "4" 5 "5+" label values difference difference gen correct = . replace correct = 1 if difference == 0 replace correct = 0 if difference != 0 numlabel _all, add force * extreme answer * tab answer, mis gen extreme = . replace extreme = 1 if answer == 0 | answer == 10 replace extreme = 0 if answer > 0 & answer < 10 tab extreme, mis * device switch * gen devices = . replace devices = 1 if smartphone_38 == 0 & smartphone_40 == 0 replace devices = 2 if smartphone_38 == 1 & smartphone_40 == 1 replace devices = 3 if smartphone_38 == 1 & smartphone_40 == 0 replace devices = 3 if smartphone_38 == 0 & smartphone_40 == 1 label define devices 1 "both computer" 2 "both smartphone" 3 "device switch" label values devices devices numlabel devices, add force * correct W38 * gen correct_W38 = . replace correct_W38 = 1 if asked_before == 0 replace correct_W38 = 2 if asked_before == 1 & repeat == answer replace correct_W38 = 3 if asked_before == 1 & repeat != answer label define correct_W38 1 "no follow-ups in W38" 2 "correct in W38" 3 "incorrect in W38" label values correct_W38 correct_W38 numlabel _all, add force tab correct_W38, mis * save full dataset * drop mark_* save "$data\Memory2_prepared", replace * ================== * * Sample description * * ================== * tab mult, mis tab type if mult == 1 tab asked_before if mult == 1 tab extreme tab1 female educ4 age3 if mult == 1 tab inexperienced if mult == 1 tab devices if mult == 1 tab inbetween_wave if mult == 1 tab distance if mult == 1 * ======== * * Analyses * * ======== * tab type * * * alleged recall * * * tab memory tab type memory, row chi forvalues x = 1(1)3 { ttest memory if type != `x', by(type) } forvalues x = 1(1)3 { clttest memory if type != `x', by(type) cluster(id_g) } * * * correct recall * * * tab correct tab memory correct, row chi ttest correct, by(memory) clttest correct, by(memory) cluster(id_g) // cluster-adjusted ttest tab memory correct, cell tab type correct, row chi forvalues x = 1(1)3 { ttest correct if type != `x', by(type) } forvalues x = 1(1)3 { clttest correct if type != `x', by(type) cluster(id_g) } bysort type: tab memory correct, row chi forvalues y = 0/1 { forvalues x = 1(1)3 { ttest correct if type != `x' & memory == `y', by(type) } } forvalues y = 0/1 { forvalues x = 1(1)3 { clttest correct if type != `x' & memory == `y', by(type) cluster(id_g) } } * * * certainty * * * sum certain bysort memory: sum certain bysort type: sum certain bysort memory type: sum certain forvalues x = 1(1)3 { ttest certain if type != `x', by(type) } * * * off by how much? * * * * add weighted kappa * kapci answer recall, reps(1000) wgt(w) seed(2810) // overall kapci answer recall if memory == 1, reps(1000) wgt(w) seed(2810) // overall if claimed = yes kapci answer recall if memory == 0, reps(1000) wgt(w) seed(2810) // overall if claimed = no kapci answer recall if type == 1, reps(1000) wgt(w) seed(2810) // attitude overall kapci answer recall if type == 1 & memory == 1, reps(1000) wgt(w) seed(2810) // attitude if claimed yes kapci answer recall if type == 1 & memory == 0, reps(1000) wgt(w) seed(2810) // attitude if claimed no kapci answer recall if type == 2, reps(1000) wgt(w) seed(2810) // behavior overall kapci answer recall if type == 2 & memory == 1, reps(1000) wgt(w) seed(2810) // behavior if claimed yes kapci answer recall if type == 2 & memory == 0, reps(1000) wgt(w) seed(2810) // behavior if claimed no kapci answer recall if type == 3, reps(1000) wgt(w) seed(2810) // beliefs overall kapci answer recall if type == 3 & memory == 1, reps(1000) wgt(w) seed(2810) // beliefs if claimed yes kapci answer recall if type == 3 & memory == 0, reps(1000) wgt(w) seed(2810) // beliefs if claimed no * * * tab difference, gen(diff) tab difference memory forvalues x = 1/6 { ttest diff`x', by(memory) } forvalues x = 1/6 { clttest diff`x', by(memory) cluster(id_g) } collapse (mean) mean0 = diff1 (sd) sd0 = diff1 (count) n = diff1 /// (mean) mean1 = diff2 (sd) sd1 = diff2 /// (mean) mean2 = diff3 (sd) sd2 = diff3 /// (mean) mean3 = diff4 (sd) sd3 = diff4 /// (mean) mean4 = diff5 (sd) sd4 = diff5 /// (mean) mean5 = diff6 (sd) sd5 = diff6 /// , by(memory) expand 6 sort memory bysort memory: gen difference = _n -1 label values difference difference numlabel _all, remove gen mean = . forvalues x = 0/5 { replace mean = mean`x' if difference == `x' } gen sd = . forvalues x = 0/5 { replace sd = sd`x' if difference == `x' } gen upper = mean + invttail(n-1, 0.025) * (sd / sqrt(n)) gen lower = mean - invttail(n-1, 0.025) * (sd / sqrt(n)) drop mean0 mean1 mean2 mean3 mean4 mean5 sd0 sd1 sd2 sd3 sd4 sd5 * make percentage * replace mean = mean * 100 replace upper = upper * 100 replace lower = lower * 100 reshape wide n mean sd upper lower, i(difference) j(memory 0 1) graph drop _all twoway (connected mean0 mean1 difference, lcolor(gs8 gs4) msymbol(O O) mcolor(gs8 gs4) lpattern(solid solid)) /// (rcap upper0 lower0 difference, lcolor(gs8)) /// (rcap upper1 lower1 difference, lcolor(gs4)), /// ytitle("% of observations") xtitle("Absolute difference between original response (W38) and recollection (W40)") xlabel(0(1)5,val) ylabel(0(5)40) scheme(s1mono) /// legend(row(2) order(2 "Claimed recall: Yes" 1 "Claimed recall: No")) graph save "$out\difference", replace graph export "$out\difference.svg", replace * / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ * use "$data\Memory2_prepared", clear * * * Models * * * /* logit memory ib3.type extreme female i.age3 i.educ3 burden enjoyment inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M1 fitstat reg certain ib3.type extreme female i.age3 i.educ3 burden enjoyment inexperienced i.devices i.correct_W38 distance inbetween_wave first memory, cluster(id_g) eststo M2 fitstat logit correct ib3.type extreme female i.age3 i.educ3 burden enjoyment inexperienced i.devices i.correct_W38 distance inbetween_wave first memory certain, or cluster(id_g) eststo M3 fitstat esttab M1 M2 M3 using "$out\tabs.rtf", replace not obslast label b(%4.3f) eform(1 0 1) cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels * * * with interactions * * * logit memory ib3.type extreme ib3.type#extreme female i.age3 i.educ4 burden enjoyment inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M1a fitstat reg certain ib3.type extreme ib3.type#extreme female i.age3 i.educ4 burden enjoyment inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type, cluster(id_g) eststo M2a fitstat logit correct ib3.type extreme ib3.type#extreme female i.age3 i.educ4 burden enjoyment inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type certain, or cluster(id_g) eststo M3a fitstat esttab M1a M2a M3a using "$out\tabs.rtf", replace obslast label b(%4.3f) se(%4.3f) wide eform(1 0 1) cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels * M1a & M3a: display average marginal effects * logit memory ib3.type i.extreme ib3.type#extreme female i.age3 i.educ4 burden enjoyment i.inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, cluster(id_g) eststo margins_M1a: margins, dydx(*) post logit correct ib3.type i.extreme ib3.type#extreme female i.age3 i.educ4 burden enjoyment i.inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first i.memory memory#ib3.type certain, cluster(id_g) eststo margins_M3a: margins, dydx(*) post esttab margins_M1a margins_M3a using "$out\tabs.rtf", append obslast label b(%4.3f) se(%4.3f) wide cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels * * * coefplot * * * coefplot /// (M1a, mcolor(gs12) ciopts(color(gs12)) msymbol(d)) /// (M2a, mcolor(gs8) ciopts(color(gs8)) msymbol(o)) /// (M3a, mcolor(gs4) ciopts(color(gs4)) msymbol(s)) /// , drop(_cons) legend(label(2 "Claimed recall") label(4 "Recall certainty") label(6 "Correct recall ") cols(3) span) xline(0, lcolor(gs0)) /// coeflabels(1.type = "Attitudes" 2.type = "Behaviors" extreme = "Extreme response" 1.type#1.extreme = "Attitudes * extreme" /// 2.type#1.extreme = "Behaviors * extreme" female = "Female" 2.age3 = "Age 44 to 58 years" 3.age3 = "Age >58 years" /// 2.educ4 = "Medium-low education" 3.educ4 = "Medium-high education" 4.educ4 = "High education" burden = "Response burden" /// enjoyment = "Survey enjoyment" inexperienced = "Freshly recruited respondent" /// 1.type#1.inexperienced = "Attitudes * freshly recruited" 2.type#1.inexperienced = "Behaviors * freshly recruited" /// 2.devices = "Both waves smartphone" 3.devices = "Device switch" 2.correct_W38 = "Correct in W38" 3.correct_W38 = "Incorrect in W38" /// distance = "Days between waves" inbetween_wave = "In-between wave (W39)" first = "First question" memory = "Claimed recall" /// 1.memory#1.type = "Attitudes * claimed recall" 1.memory#2.type = "Behaviors * claimed recall" certain = "Recall certainty") /// scheme(s1mono) ysize(10) xsize(6) graph export "$out\coefplot_all.svg", replace * individual * coefplot M1a, mcolor(gs4) ciopts(color(gs4)) msymbol(o) /// drop(_cons) legend(off) xline(0, lcolor(gs0)) /// coeflabels(1.type = "Attitudes" 2.type = "Behaviors" extreme = "Extreme response" 1.type#1.extreme = "Attitudes * extreme" /// 2.type#1.extreme = "Behaviors * extreme" female = "Female" 2.age3 = "44 to 58 years" 3.age3 = ">58 years" /// 2.educ4 = "Medium-low education" 3.educ4 = "Medium-high education" 4.educ4 = "High education" burden = "Response burden" /// enjoyment = "Survey enjoyment" inexperienced = "Freshly recruited respondent" /// 1.type#1.inexperienced = "Attitudes * freshly recruited" 2.type#1.inexperienced = "Behaviors * freshly recruited" /// 2.devices = "Both waves smartphone" 3.devices = "Device switch" 2.correct_W38 = "Correct in W38" 3.correct_W38 = "Incorrect in W38" /// distance = "Days between waves" inbetween_wave = "In-between wave (W39)" first = "First question") /// scheme(s1mono) coefplot M2a, mcolor(gs4) ciopts(color(gs4)) msymbol(o) /// drop(_cons) legend(off) xline(0, lcolor(gs0)) /// coeflabels(1.type = "Attitudes" 2.type = "Behaviors" extreme = "Extreme response" 1.type#1.extreme = "Attitudes * extreme" /// 2.type#1.extreme = "Behaviors * extreme" female = "Female" 2.age3 = "44 to 58 years" 3.age3 = ">58 years" /// 2.educ4 = "Medium-low education" 3.educ4 = "Medium-high education" 4.educ4 = "High education" burden = "Response burden" /// enjoyment = "Survey enjoyment" inexperienced = "Freshly recruited respondent" /// 1.type#1.inexperienced = "Attitudes * freshly recruited" 2.type#1.inexperienced = "Behaviors * freshly recruited" /// 2.devices = "Both waves smartphone" 3.devices = "Device switch" 2.correct_W38 = "Correct in W38" 3.correct_W38 = "Incorrect in W38" /// distance = "Days between waves" inbetween_wave = "In-between wave (W39)" first = "First question" memory = "Claimed recall" /// 1.memory#1.type = "Attitudes * claimed recall" 1.memory#2.type = "Behaviors * claimed recall") /// scheme(s1mono) coefplot M3a, mcolor(gs4) ciopts(color(gs4)) msymbol(o) /// drop(_cons) legend(off) xline(0, lcolor(gs0)) /// coeflabels(1.type = "Attitudes" 2.type = "Behaviors" extreme = "Extreme response" 1.type#1.extreme = "Attitudes * extreme" /// 2.type#1.extreme = "Behaviors * extreme" female = "Female" 2.age3 = "44 to 58 years" 3.age3 = ">58 years" /// 2.educ4 = "Medium-low education" 3.educ4 = "Medium-high education" 4.educ4 = "High education" burden = "Response burden" /// enjoyment = "Survey enjoyment" inexperienced = "Freshly recruited respondent" /// 1.type#1.inexperienced = "Attitudes * freshly recruited" 2.type#1.inexperienced = "Behaviors * freshly recruited" /// 2.devices = "Both waves smartphone" 3.devices = "Device switch" 2.correct_W38 = "Correct in W38" 3.correct_W38 = "Incorrect in W38" /// distance = "Days between waves" inbetween_wave = "In-between wave (W39)" first = "First question" memory = "Claimed recall" /// 1.memory#1.type = "Attitudes * claimed recall" 1.memory#2.type = "Behaviors * claimed recall" certain = "Recall certainty") /// scheme(s1mono) */ * * * Sensitivity analyses: * * * * M3 without additional indicators to compare with M1 * logit correct ib3.type extreme ib3.type#extreme female i.age3 i.educ4 burden enjoyment inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M3b fitstat * M3 separately by alleged yes and no * logit correct ib3.type extreme ib3.type#extreme female i.age3 i.educ4 burden enjoyment inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first if memory == 1, or cluster(id_g) eststo M3c fitstat logit correct ib3.type extreme ib3.type#extreme female i.age3 i.educ4 burden enjoyment inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first if memory == 0, or cluster(id_g) eststo M3d fitstat esttab M3b M3c M3d using "$out\tabs2.rtf", replace not obslast label b(%4.3f) se(%4.3f) wide eform cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels * Models with age as continuous, 10-year categories * /* logit memory ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M11 fitstat reg certain ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type, cluster(id_g) eststo M21 fitstat logit correct ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type certain, or cluster(id_g) eststo M31 fitstat esttab M11 M21 M31 using "$out\tabs2.rtf", append obslast label b(%4.3f) se(%4.3f) wide eform(1 0 1) cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels */ logit memory ib3.type extreme ib3.type#extreme female exact_age i.educ4 burden enjoyment log_response_time log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M12 fitstat reg certain ib3.type extreme ib3.type#extreme female exact_age i.educ4 burden enjoyment log_response_time log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type, cluster(id_g) eststo M22 fitstat logit correct ib3.type extreme ib3.type#extreme female exact_age i.educ4 burden enjoyment log_response_time log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type certain, or cluster(id_g) eststo M32 fitstat esttab M12 M22 M32 using "$out\tabs2.rtf", append obslast label b(%4.3f) se(%4.3f) wide eform(1 0 1) cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels /* * Models with (log) response time / interview length instead of burden & enjoyment * logit memory ib3.type extreme ib3.type#extreme female i.age3 i.educ4 log_response_time inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M13 fitstat reg certain ib3.type extreme ib3.type#extreme female i.age3 i.educ4 log_response_time inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type, cluster(id_g) eststo M23 fitstat logit correct ib3.type extreme ib3.type#extreme female i.age3 i.educ4 log_response_time inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type certain, or cluster(id_g) eststo M33 fitstat esttab M13 M23 M33 using "$out\tabs2.rtf", append obslast label b(%4.3f) se(%4.3f) wide eform(1 0 1) cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels logit memory ib3.type extreme ib3.type#extreme female i.age3 i.educ4 log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M14 fitstat reg certain ib3.type extreme ib3.type#extreme female i.age3 i.educ4 log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type, cluster(id_g) eststo M24 fitstat logit correct ib3.type extreme ib3.type#extreme female i.age3 i.educ4 log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type certain, or cluster(id_g) eststo M34 fitstat esttab M14 M24 M34 using "$out\tabs2.rtf", append obslast label b(%4.3f) se(%4.3f) wide eform(1 0 1) cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels */ * Models with response time, interview length and burden & enjoyment * /* logit memory ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment response_time interviewLength inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M13 fitstat reg certain ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment response_time interviewLength inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type, cluster(id_g) eststo M23 fitstat logit correct ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment response_time interviewLength inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type certain, or cluster(id_g) eststo M33 fitstat esttab M13 M23 M33 using "$out\tabs2.rtf", append obslast label b(%4.3f) se(%4.3f) wide eform(1 0 1) cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels */ logit memory ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment log_response_time log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M14 fitstat reg certain ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment log_response_time log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type, cluster(id_g) eststo M24 fitstat logit correct ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment log_response_time log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type certain, or cluster(id_g) eststo M34 fitstat esttab M14 M24 M34 using "$out\tabs3.rtf", replace obslast label b(%4.3f) se(%4.3f) wide eform(1 0 1) cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels * comparison: Models with individual median response speed instead of interview length * logit memory ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment log_response_time response_speed inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M15 fitstat reg certain ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment log_response_time response_speed inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type, cluster(id_g) eststo M25 fitstat logit correct ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment log_response_time response_speed inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first memory memory#ib3.type certain, or cluster(id_g) eststo M35 fitstat esttab M15 M25 M35 using "$out\tabs4.rtf", replace obslast label b(%4.3f) se(%4.3f) wide eform(1 0 1) cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels * * * coefplot * * * coefplot /// (M14, mcolor(gs12) ciopts(color(gs12)) msymbol(d)) /// (M24, mcolor(gs8) ciopts(color(gs8)) msymbol(o)) /// (M34, mcolor(gs4) ciopts(color(gs4)) msymbol(s)) /// , drop(_cons) legend(label(2 "Claimed recall") label(4 "Recall certainty") label(6 "Correct recall ") cols(3) span) xline(0, lcolor(gs0)) /// coeflabels(1.type = "Attitudes" 2.type = "Behaviors" extreme = "Extreme response" 1.type#1.extreme = "Attitudes * extreme" /// 2.type#1.extreme = "Behaviors * extreme" female = "Female" 2.age10 = "Age 29 to 38 years" 3.age10 = "Age 39 to 48 years" 4.age10 = "Age 49 to 58 years" 5.age10 = "Age 59 to 68 years" 6.age10 = "Age >68 years" /// 2.educ4 = "Medium-low education" 3.educ4 = "Medium-high education" 4.educ4 = "High education" burden = "Response burden" /// enjoyment = "Survey enjoyment" log_response_time = "Log response time" log_length = "Log interview length" inexperienced = "Freshly recruited respondent" /// 1.type#1.inexperienced = "Attitudes * freshly recruited" 2.type#1.inexperienced = "Behaviors * freshly recruited" /// 2.devices = "Both waves smartphone" 3.devices = "Device switch" 2.correct_W38 = "Correct in W38" 3.correct_W38 = "Incorrect in W38" /// distance = "Days between waves" inbetween_wave = "In-between wave (W39)" first = "First question" memory = "Claimed recall" /// 1.memory#1.type = "Attitudes * claimed recall" 1.memory#2.type = "Behaviors * claimed recall" certain = "Recall certainty") /// scheme(s1mono) ysize(10) xsize(6) graph export "$out\coefplot_all_v2.svg", replace * M14 & M34: display average marginal effects * logit memory ib3.type i.extreme ib3.type#extreme i.female i.age10 i.educ4 burden enjoyment log_response_time log_length i.inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo margins_M14: margins, dydx(*) post logit correct ib3.type i.extreme ib3.type#extreme i.female i.age10 i.educ4 burden enjoyment log_response_time log_length i.inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first i.memory memory#ib3.type certain, or cluster(id_g) eststo margins_M34: margins, dydx(*) post esttab margins_M14 margins_M34 using "$out\tabs3.rtf", append obslast label b(%4.3f) se(%4.3f) wide cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels * for comparison: M15 & M35 display average marginal effects * logit memory ib3.type i.extreme ib3.type#extreme i.female i.age10 i.educ4 burden enjoyment log_response_time response_speed i.inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo margins_M15: margins, dydx(*) post logit correct ib3.type i.extreme ib3.type#extreme i.female i.age10 i.educ4 burden enjoyment log_response_time response_speed i.inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first i.memory memory#ib3.type certain, or cluster(id_g) eststo margins_M35: margins, dydx(*) post esttab margins_M15 margins_M35 using "$out\tabs4.rtf", append obslast label b(%4.3f) se(%4.3f) wide cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels * M3 / M34 without additional indicators to compare with M1 * logit correct ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment log_response_time log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first, or cluster(id_g) eststo M34b fitstat * M3 / M34 separately by alleged yes and no * logit correct ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment log_response_time log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first if memory == 1, or cluster(id_g) eststo M34c fitstat logit correct ib3.type extreme ib3.type#extreme female i.age10 i.educ4 burden enjoyment log_response_time log_length inexperienced ib3.type#inexperienced i.devices i.correct_W38 distance inbetween_wave first if memory == 0, or cluster(id_g) eststo M34d fitstat esttab M34b M34c M34d using "$out\tabs3.rtf", append not obslast label b(%4.3f) se(%4.3f) wide eform cons star(* 0.05 ** 0.01 *** 0.001) stardetach nobaselevels * T-test extreme vs non-extreme * tab extreme correct, row bysort type: tab extreme correct, row clttest correct, by(extreme) cluster(id_g) forvalues x = 1/3 { clttest correct if type == `x', by(extreme) cluster(id_g) }