将 predict.glm 与用户定义的函数一起使用
Using predict.glm with a user defined function
我最近装了一个glm模型。我目前正在尝试更改其中一个参数(例如截距,同时保持其他参数不变)以查看它如何影响预测。我想到了两种方法,但都失败了:
手动更改 glm 模型(我做不到)
要么
自己编写一个函数并将其作为 glm class
我想将我的 "user-defined" 模型与 predict.glm() 一起使用,看看这对预测有何影响。
下面给出了一个类似于我的模型的例子:
> fit <- glm(formula = am ~ wt+cyl , family = binomial, data = mtcars)
> fit
Call: glm(formula = am ~ wt + cyl, family = binomial, data = mtcars)
Coefficients:
(Intercept) wt cyl
15.749 -7.864 1.322
Degrees of Freedom: 31 Total (i.e. Null); 29 Residual
Null Deviance: 43.23
Residual Deviance: 14.73 AIC: 20.73
有没有办法手动编辑 "fit" 模型并将其作为 glm 用于预测?
我不是核心统计学家,所以我希望这一切都有意义。
谢谢
您可以手动更改 fit
中的系数并使用 predict
函数。
# Fit the model:
fit <- glm(formula = am ~ wt+cyl , family = binomial, data = mtcars)
# Look at the first few predictions:
head(predict(fit, mtcars))
Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive
3.0761275 1.0708076 2.7918672 -1.6029523
Hornet Sportabout Valiant
-0.7288921 -3.5296322
# Change the intercept to 10 for example:
fit$coefficients[1] <- 10
# Look at the first few predictions again (notice they are different):
print(head(predict(fit, mtcars)))
head(predict(fit, mtcars))
Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive
-2.673299 -4.678619 -2.957559 -7.352378
Hornet Sportabout Valiant
-6.478318 -9.279058
当您使用 glm 函数时,您正在创建 "glm" class 的实例并将其命名为 "fit"。
> fit <- glm(formula = am ~ wt+cyl , family = binomial, data = mtcars)
> class(fit)
[1] "glm" "lm"
如果您想访问该实例的任何参数,您可以在名称末尾使用“$”符号来访问许多不同的参数。 "coefficients" 只是 glm class.
的众多参数之一
> fit$coefficients
(Intercept) wt cyl
15.74943 -7.86400 1.32173
如果要访问和更改任何参数,可以使用赋值“<-”符号为参数赋新值。
> fit$coefficients[1]
(Intercept)
15.74943
> fit$coefficients[1]<-15.75
> fit$coefficients
(Intercept) wt cyl
15.75000 -7.86400 1.32173
如果您想使用调整后的 glm 函数来预测一个值,那么您可以在新拟合上使用相同的预测函数。
从统计学上讲,AIC 和残差等准确度度量是在生成模型的同时计算的。像这样手动编辑函数意味着所有这些值都没有更新并且不准确。
我最近装了一个glm模型。我目前正在尝试更改其中一个参数(例如截距,同时保持其他参数不变)以查看它如何影响预测。我想到了两种方法,但都失败了:
手动更改 glm 模型(我做不到) 要么 自己编写一个函数并将其作为 glm class
我想将我的 "user-defined" 模型与 predict.glm() 一起使用,看看这对预测有何影响。 下面给出了一个类似于我的模型的例子:
> fit <- glm(formula = am ~ wt+cyl , family = binomial, data = mtcars)
> fit
Call: glm(formula = am ~ wt + cyl, family = binomial, data = mtcars)
Coefficients:
(Intercept) wt cyl
15.749 -7.864 1.322
Degrees of Freedom: 31 Total (i.e. Null); 29 Residual
Null Deviance: 43.23
Residual Deviance: 14.73 AIC: 20.73
有没有办法手动编辑 "fit" 模型并将其作为 glm 用于预测? 我不是核心统计学家,所以我希望这一切都有意义。 谢谢
您可以手动更改 fit
中的系数并使用 predict
函数。
# Fit the model:
fit <- glm(formula = am ~ wt+cyl , family = binomial, data = mtcars)
# Look at the first few predictions:
head(predict(fit, mtcars))
Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive
3.0761275 1.0708076 2.7918672 -1.6029523
Hornet Sportabout Valiant
-0.7288921 -3.5296322
# Change the intercept to 10 for example:
fit$coefficients[1] <- 10
# Look at the first few predictions again (notice they are different):
print(head(predict(fit, mtcars)))
head(predict(fit, mtcars))
Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive
-2.673299 -4.678619 -2.957559 -7.352378
Hornet Sportabout Valiant
-6.478318 -9.279058
当您使用 glm 函数时,您正在创建 "glm" class 的实例并将其命名为 "fit"。
> fit <- glm(formula = am ~ wt+cyl , family = binomial, data = mtcars)
> class(fit)
[1] "glm" "lm"
如果您想访问该实例的任何参数,您可以在名称末尾使用“$”符号来访问许多不同的参数。 "coefficients" 只是 glm class.
的众多参数之一> fit$coefficients
(Intercept) wt cyl
15.74943 -7.86400 1.32173
如果要访问和更改任何参数,可以使用赋值“<-”符号为参数赋新值。
> fit$coefficients[1]
(Intercept)
15.74943
> fit$coefficients[1]<-15.75
> fit$coefficients
(Intercept) wt cyl
15.75000 -7.86400 1.32173
如果您想使用调整后的 glm 函数来预测一个值,那么您可以在新拟合上使用相同的预测函数。
从统计学上讲,AIC 和残差等准确度度量是在生成模型的同时计算的。像这样手动编辑函数意味着所有这些值都没有更新并且不准确。