Взвешивание с использованием функции прогнозирования - PullRequest
0 голосов
/ 19 апреля 2019

Я использовал функцию «предсказать», чтобы найти линию соответствия для линейной модели (лм), которую я создал.Поскольку lm был построен только на 2 точках данных и должен иметь положительный наклон, я заставил его пройти через начало координат (0,0).Я также взвешивал функцию по количеству наблюдений, лежащих в основе каждой точки данных.

Вопрос 1: (РЕШЕНО - см. Комментарий @Gregor) Почему предсказанная линия лежит гораздо ближе ко моей второй точке данных (B), чем к моей первой точке данных (A), когда B имеет меньше базовых наблюдений?Я что-то не так кодировал, когда взвешивал модель?

Вопрос 2: Построение графика GLM (link = logit) сейчас, но как я могу заставить это сделать 0,0?Я попытался добавить formula = y~0+x в нескольких местах, но ни одно из них не работает.

M <- data.frame("rate" = c(0.4643,0.2143), "conc" = c(300,6000), "nr_dead" = c(13,3), "nr_surv" = c(15,11), "region" = c("A","B"))
M$tot_obsv <- (M$nr_dead+M$nr_surv)
M_conc <- M$conc
M_rate <- M$rate
M_tot_obsv <- M$tot_obsv
#**linear model of data, force 0,0 intercept, weighted by nr. of observations of each data point.**
M_lm <- lm(data = M, rate~0+conc, weights = tot_obsv)
#**plot line using "predict" function**
x_conc <-c(600, 6700)
y_rate <- predict(M_lm, list(conc = x_conc), weights = tot_obsv, type = 'response') 
plot(x = M$conc, y = M$rate, pch = 16, ylim = c(0, 0.5), xlim = c(0,7000), xlab = "conc", ylab = "death rate")
lines(x_conc, y_rate, col = "red", lwd = 2)

#**EDIT 1:**

M_glm <- glm(cbind(nr_dead, nr_surv) ~ (0+conc), data = M, family = "binomial")

#*plot using 'predict' function*
binomial_smooth <- function(formula = (y ~ 0+x),...) {
    geom_smooth(method = "glm", method.args = list(family = "binomial"), formula = (y ~ 0+x), ...)
}
tibble(x_conc = c(seq(300, 7000, 1), M$conc), y_rate = predict.glm(M_glm, list(conc = x_conc), type = "response")) %>% left_join(M, by = c('x_conc' = 'conc')) %>% 
ggplot(aes(x = x_conc, y = y_rate)) + xlab("concentration") + ylab("death rate") +
geom_point(aes(y = rate, size = tot_obsv)) + binomial_smooth(formula = (y ~ 0+x)) + theme_bw() 
...