如何在给定数据点下使用R中的广义线性建模进行预测

时间:2019-03-27 14:30:13

标签: r glm

我试图预测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 个答案:

答案 0 :(得分:1)

问题出在glm调用而不是predict调用。如果在公式中传递数据,则将无法为模型提供新数据进行预测,因为变量将被称为my_data $ Year等。 模型对象,而不是Year and Gender。

如果将呼叫更改为:

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

然后对新数据进行预测