Заменить выбросы средними случаев, имеющих схожие характеристики
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | *(Вопрос) Получен по электронной почте 09.05.2002. У меня есть база по временам реакции в тестах на визуальные сравнения. Разумеется, данные сильно отрицательно скошены, так как испытуемые в течение 2 часов отвечали на вопросы, требующие в среднем 2-3 секунды на ответ. Похоже, что в некоторых случаях они утомлялись или отвлекались, или усаживались поудобнее в креслах, в результате чего ответ занимал более 20 секунд. В некоторых случаях реакция, наоборот, составляла менее 100 миллисекунд (дети в школе, конечно, шустрые, но не настолько). В любом случае, как мне заменить такие "выборосы" на среднее время реакции, НО основанное не на среднем времени реакции всех испытуемых, а на среднем времени реакции этого испытуемого при похожих условиях. Я поясню это на небольшом примере. Вот пример данных.... ID sides change RT 1 4 7 750 1 4 10 1000 1 5 7 850 1 4 10 22000 2 4 7 14750 2 4 10 1000 2 5 7 50 2 4 10 900 ... ID = код испытуемого sides = число сторон фигуры для визуального сравнения change = процент изменения фигуры RT = задержка (время реакции) выбросы = RT > 600 & RT < 10000 Т.е. надо определить выброс, определить респондента, определить, какого типа этот вопрос (по значениям переменных sides и change). Определить при этих условиях среднее время реакции и заменить им выброс. *(Ответ) Автор: Ray, 09.05.2002. DATA LIST LIST /ID sides change RT. BEGIN DATA 1 4 7 750 1 4 10 1000 1 5 7 850 1 4 10 22000 2 4 7 14750 2 4 10 1000 2 5 7 50 2 4 10 900 END DATA. LIST. SORT CASES BY id sides change. SAVE OUTFILE='c:\\temp\\original data.sav'. SELECT IF RANGE(RT,600,10000). AGGREGATE /OUTFILE='C:\\temp\\aggr.sav' /BREAK=id sides change /mean_rt = MEAN(rt). MATCH FILES /FILE='c:\\temp\\original data.sav' /TABLE='C:\\temp\\aggr.sav' /BY=id sides change. COMPUTE newrt=rt. IF ~RANGE(RT,600,10000) newrt=mean_rt. EXECUTE. * Обратите внимание, что в 2 случаях значения остались пустыми, т.к. нет таких же вопросов для этих испытуемых, чтобы посчитать среднее. Вы можете оставить там старое значение, либо заменить их на общее среднее. В общем, много способов есть. * Возможно также (хотя это и более сложно) попробовать заменить выборосы значениями из тех наблюдений, которые в некотором смысле 'похожи'. Например, см. синтаксис номер 12 на стр. http://www.spsstools.net/SampleSyntax.htm#RandomSampling. |