Как прогнозировать с использованием обобщенного линейного моделирования в R с заданной точкой данных - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь предсказать на 2018 год, где набор данных обучается с использованием Poisson GLM

У меня есть следующие данные

        Year        Gender    Total_Apprentices
    1   2012        Female            278290
    2   2012          Male            230330
    3   2013        Female            231645
    4   2013          Male            205521
    5   2014        Female            264554
    6   2014          Male            233830
    7   2015        Female            268593
    8   2015          Male            239739
    9   2016        Female            264350
    10  2016          Male            230532
    11  2017        Female            184237
    12  2017          Male            191524

Это код, который я написал

    library("xlsx")
    library("tidyverse")

    setwd("folder location") 
    getwd()
    # Loading

    # xlsx files using xlsx library

    f_path <- "filename.xlsx"

    my_data <- read.xlsx(f_path, 1, header=TRUE)
    plot(my_data)

    model1 <- glm(my_data$Total ~ my_data$Year+my_data$Gender,my_data, family= poisson)


    summary(model1)

    pois.pred <- predict(model1, type="response")

    my_data
    pois.pred

Как мне поступить с прогнозом на 2018 год

Я пробовал приведенный ниже код, но не работает

    n_data=data.frame(Year=2018,Gender="Male")
    predict(model1, newdata=n_data, type="response")

Я получаю точно такой же вывод, какэтот код

 pois.pred <- predict(model1, type="response")

, который в основном предсказывает моё наблюдаемое значение с 2012 по 2017 год, и появляется сообщение

Предупреждение: у 'newdata' есть 1 строка, но у найденных переменных есть 12 строк

1 Ответ

1 голос
/ 27 марта 2019

Проблема в вызове glm, а не в вызове predict. Если вы передадите данные в формулу, вы не сможете дать модели новые данные для прогнозирования, потому что переменные будут вызваны my_data $ Year и т. д. в объект модели, а не год и пол.

Если вы измените вызов на:

glm(Total_Apprentices ~ Year+Gender, 
    data = my_data, family= poisson)

Тогда прогноз на новые данные сработает

...