У меня возник вопрос об исключении / фильтрации точек данных. В настоящее время я закодировал логистическую регрессию, которая генерирует границу решения, которая превращается в функцию, в которой я могу обрабатывать подмножества моего фрейма данных.
Мне было интересно, если бы я построил все прогнозируемые кривые на основе этих результатов, можно ли еще больше отфильтровать эти границы решений на основе их созданного графика / кривой. Или, если можно установить требования, чтобы кривая «соответствовала» и отслеживала соответствующие данные во фрейме данных ...
## glm that generates a midpoint/decision boundary, wrapped into a function
get_midpoint = function(data){
glm.1 = glm(coderesponse~stimulus, family = binomial(link="logit"), data=data, na.action = na.exclude)
rtn = -glm.1$coefficients[1]/glm.1$coefficients[2]
rtn
}
## a mini dummy dataframe
subject <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
stimulus = c(1, 5, 50, 35, 23, 2, 4, 22, 15, 6, 20, 40, 45, 10, 37, 43, 48, 7, 19, 21, 29, 49, 26, 11, 36, 30, 39, 41, 16, 37, 1, 5, 50, 35, 23, 2, 4, 22, 15, 6, 20, 40, 45, 10, 37, 43, 48, 7, 19, 21, 29, 49, 26, 11, 36, 30, 39, 41, 16, 37)
stim <- c('bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm', 'bd', 'nd', 'nm')
block <- c('mouth', 'mouth', 'mouth', 'nose', 'nose', 'nose', 'mouth', 'mouth', 'mouth', 'nose', 'nose', 'nose', 'mouth', 'mouth', 'mouth', 'nose', 'nose', 'nose', 'mouth', 'mouth', 'mouth', 'nose', 'nose', 'nose', 'mouth', 'mouth', 'mouth', 'nose', 'nose', 'nose', 'mouth', 'mouth', 'mouth', 'nose', 'nose', 'nose', 'mouth', 'mouth', 'mouth', 'nose', 'nose', 'nose', 'mouth', 'mouth', 'mouth', 'nose', 'nose', 'nose', 'mouth', 'mouth', 'mouth', 'nose', 'nose', 'nose', 'mouth', 'mouth', 'mouth', 'nose', 'nose', 'nose')
coderesponse <- c(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0)
df = data.frame(subject, stimulus, stim, block, coderesponse)
## running the function over defined subgroups of ~80 rows each [for the real data]
## but for the dummy dataframe, only ~5 rows
df = df %>%
nest(data=-c(subject, stim, block)) %>%
mutate(midpoint=map_dbl(data, get_midpoint)) %>%
unnest()
## basic code that plots and creates a curve based on a single glm result
## QUESTION: want to be able to run this over the same subgroups as above to create curves for every midpoint generated and then possibly filter based on the curve?
plot(df$stimulus,df$coderesponse,xlab="stimulus",ylab="Probability of d responses")
curve(predict(glm.1,data.frame(stimulus=x),type="response"),add=TRUE)
Я новичок и запутался в этой части R, поэтому спасибо за любую помощь или понимание!
object 'glm.1' not found
ошибку в последней строке. Я вижу модель, встроенную вget_midpoint()
fx, используемую в вашемmutate
, но вы нигде не возвращаете модельglm.1
. - person Steven   schedule 02.12.2020plot
&curve
) применим только к одному выходу из моделиglm.1
. Я пытаюсь понять, как изменить его для вывода графика и кривых в соответствии со значениями, сгенерированными функциейget_midpoint()
, с которой у меня все еще возникают проблемы. edit: Можно ли построить все значения glm.1 из подгрупп данных с помощью ggplot или для этого требуется какая-то функция? - person LizJu   schedule 02.12.2020coderesponse~stimulus
какglm
, сгруппировать поsubject
, а затем нанести данные и каждую модель на один и тот же рисунок. Если это так, то легко.ggplot()
может построить для вас модели. Если это что-то еще, мне не хватает ключевого компонента для моего понимания. - person Steven   schedule 02.12.2020