Я работаю над симуляцией, которая способна воспроизводить работу людей по когнитивной задаче. Задача состоит в том, чтобы предоставить оценку времени, когда какой-либо объект отображается на экране.Использование искаженного распределения для имитации «ошибки» участника в когнитивной задаче
Какие данные у меня есть, средняя ошибка их ответов, стандартное отклонение их ошибки, асимметрия данных и процентная погрешность их оценок.
Способ, которым я имитирую их работу, заключается в случайном обеспечении симулятора значением «времени», которое соответствует истинному количеству времени, которое объект останется на экране в эксперименте.
Как я имитирую их производительность, умножая это истинное значение времени на образец из распределения, состоящего из их средней ошибки и стандартного отклонения этой ошибки. Это эффективно воспроизводит их «оценку».
Вот код, который у меня сейчас работает, почти 100%, что мне нужно, но есть улов.
import random
import numpy
import csv
A = [2502,4376,6255] #the two pools of time (in miliseconds) duration an object will actually remain on the screen
B = [3753,6572,9374]
def time_and_number(pnum, dots, trials):
data = list(csv.reader(open('workingdurationavgdata.csv', 'rb'))) #gutted helper function that pulls the relevant data from a CSV but these values could be anything.
ratio_avg = float(data[pnum-1][dots-1]) #mean error
ratio_std = float(data[pnum-1][dots+3]) #standard deviation of error
ideal_ratio = float(data[pnum-1][dots+7]) #the partipant's 'true' percent error of their estimates gathered experimentally this is used as a comparison to see if the simulation is accurately reproducing performance
estlist = [] #list of generated 'estimates'
errorlist = [] #list of errors
for i in range(trials): #This randomly chooses between which time pool (above) will be chosen to submit a random entry from it
poolchoice = numpy.random.randint(1,2)
if poolchoice == 1:
pool = A
elif poolchoice == 2:
pool = B
time = random.choice(pool) #gives the simulator a random time from the selected pool
estimate = time * numpy.random.normal(ratio_avg, ratio_std) #'errors' the true value by multiplying it by a value from a distribution that was generated using mean and standard deviation
percent_error = (abs((estimate - time))/time) * 100 #percent error of this estimate
estlist.append(estimate) #creating a list of our estimates
errorlist.append(percent_error) #creating a list of percent errors
estimateavg = sum(estlist)/float(len(estlist)) #average estimate
erroravg = sum(errorlist)/float(len(errorlist)) #average error
return erroravg/ideal_ratio #comparing our average error to the one found experimentally as close to 1 as possible is the goal
Что это такое - использование нормального распределения для создания имитируемых оценок эффективности участника на основе их ошибки.
Проблема в том, что это нормальное распределение, предоставляемое numpy, является слишком негибким. Данные, которые у нас есть, не будут соответствовать, и поэтому мы будем ожидать систематической переоценки ошибки.
Что мне нужно, это сопоставимая функция для этого, но там, где я могу более гибко предоставлять параметры, такие как асимметрия, чтобы лучше подходить к данным.
В принципе мне нужна функция или способ сделать функцию, которая может принимать в:
средних, стандартное отклонение и значение наклона, и образец значения из этого распределения следует умножить на некоторое время стоимость. Это моделирует человека, делающего оценку. ИЛИ: лучшее теоретическое распределение для этого точно, но которое по-прежнему будет полагаться на среднее и стандартное отклонение в качестве параметров.
Поскольку вы не имеете доступа к данным, я могу предоставить несколько номеров образцов, если вы хотите запустить это самостоятельно, чтобы увидеть, что он делает:
ratio_avg = 0.838986407552044
ratio_std = 0.226132603313837
ideal_ratio = 24.814422079321
Я был бы рад предоставить более подробное разъяснение, если это необходимо, спасибо всем, кто считает помощь.
Вы признаете, что существуют миллиарды распределений, имеющие одинаковое среднее значение, stddev и перекос? У вас есть только три момента расчета вашего распределения, и недостаточно информации для восстановления дистрибутива –
и что вы делаете с образцами из нормалей, когда есть большие негативы? –
Да, я знаю, что этих моментов недостаточно для определения значимого распределения, мне просто интересно, были ли люди знакомы с лучшими, но простыми вариантами, чем обычный, который я использовал. Это не имеет смысла физически, но я принимаю отрицательные оценки времени от симулятора, от тестирования я обнаружил, что отрицательные оценки очень необычны, и проблема будет лучше объясняться с систематической слабостью распределения, чем те небольшие отклонения. После того, как у меня будет более представительное распространение, я могу видеть, насколько я хотел бы иметь дело с негативными отчетами. – Bonbon