当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R glm 拟合广义线性模型


R语言 glm 位于 stats 包(package)。

说明

glm 用于拟合广义线性模型,通过给出线性预测变量的符号说明和误差分布的说明来指定。

用法

glm(formula, family = gaussian, data, weights, subset,
    na.action, start = NULL, etastart, mustart, offset,
    control = list(...), model = TRUE, method = "glm.fit",
    x = FALSE, y = TRUE, singular.ok = TRUE, contrasts = NULL, ...)

glm.fit(x, y, weights = rep.int(1, nobs),
        start = NULL, etastart = NULL, mustart = NULL,
        offset = rep.int(0, nobs), family = gaussian(),
        control = list(), intercept = TRUE, singular.ok = TRUE)

## S3 method for class 'glm'
weights(object, type = c("prior", "working"), ...)

参数

formula

"formula" 类的对象(或可以强制转换为该类的对象):要拟合的模型的符号说明。型号规格的详细信息在“详细信息”下给出。

family

模型中使用的误差分布和链接函数的说明。对于glm,这可以是命名系列函数、系列函数或调用系列函数的结果的字符串。对于 glm.fit 仅支持第三个选项。 (有关族函数的详细信息,请参阅family。)

data

包含模型中变量的可选 DataFrame 、列表或环境(或由 as.data.frame 强制转换为 DataFrame 的对象)。如果在 data 中找不到,则从 environment(formula) 中获取变量,通常是调用 glm 的环境。

weights

拟合过程中使用的“先验权重”的可选向量。应该是 NULL 或数值向量。

subset

一个可选向量,指定要在拟合过程中使用的观测子集。

na.action

一个函数,指示当数据包含 NA 时应该发生什么。默认值由 optionsna.action 设置设置,如果未设置,则为 na.fail。 ‘factory-fresh’默认为na.omit。另一个可能的值是 NULL ,不执行任何操作。值 na.exclude 可能很有用。

start

线性预测器中参数的起始值。

etastart

线性预测器的起始值。

mustart

均值向量的起始值。

offset

这可用于指定在拟合期间要包含在线性预测器中的先验已知分量。这应该是 NULL 或长度等于案例数的数值向量。公式中可以包含一项或多项 offset 项,如果指定了多项,则使用它们的总和。请参阅model.offset

control

用于控制拟合过程的参数列表。对于glm.fit,它被传递给glm.control

model

一个逻辑值,指示模型框架是否应作为返回值的组成部分包含在内。

method

拟合模型所使用的方法。默认方法 "glm.fit" 使用迭代重新加权最小二乘法 (IWLS):替代方法 "model.frame" 返回模型框架并且不进行拟合。

用户提供的拟合函数可以作为函数或命名函数的字符串提供,其中函数采用与 glm.fit 相同的参数。如果指定为字符串,则会从 stats 命名空间内查找。

x, y

对于glm:指示拟合过程中使用的响应向量和模型矩阵是否应作为返回值的组成部分返回的逻辑值。

对于 glm.fitx 是维度为 n * p 的设计矩阵,y 是长度为 n 的观察向量。

singular.ok

逻辑性;如果FALSE 奇异拟合是一个错误。

contrasts

可选列表。请参阅 model.matrix.defaultcontrasts.arg

intercept

合乎逻辑的。空模型中是否应该包含截距?

object

从类 "glm" 继承的对象。

type

字符,允许部分匹配。从拟合模型对象中提取的权重类型。可以缩写。

...

对于 glm :如果未直接提供,则用于生成默认 control 参数的参数。

对于 weights :传入或传出其他方法的更多参数。

细节

典型的预测变量具有 response ~ terms 形式,其中 response 是(数字)响应向量,terms 是一系列指定 response 线性预测变量的项。对于 binomialquasibinomial 系列,响应也可以指定为 factor(当第一级表示失败且所有其他级别表示成功时)或指定为两列矩阵,其中列给出成功和失败的数量。 first + second 形式的术语规范指示 first 中的所有术语以及 second 中删除所有重复项的所有术语。

first:second 形式的规范表示通过 first 中的所有项与 second 中的所有项交互而获得的项集。规范first*second表示firstsecond的交叉。这与 first + second + first:second 相同。

公式中的项将重新排序,以便主效应排在第一位,然后是交互作用、所有二阶、所有三阶等等:为了避免这种情况,请传递 terms 对象作为公式。

NULL weights可用于表示不同的观测值具有不同的离散度(weights中的值与离散度成反比);或者等效地,当 weights 的元素是正整数 时,每个响应 unit-weight 观测值的平均值。对于二项式 GLM,当响应是成功比例时,先验权重用于给出试验次数:它们很少用于泊松 GLM。

glm.fit 是主力函数:通常不直接调用它,但在已经计算出响应向量、设计矩阵和族的情况下可以更有效。

如果指定了多个 etastartstartmustart ,则将使用列表中的第一个。通常建议为 quasi 系列以及具有异常链接(例如 gaussian("log") )的系列提供起始值。

所有 weightssubsetoffsetetastartmustart 的计算方式与 formula 中的变量相同,即首先在 data 中,然后在 formula 环境中。

有关二项式 GLM 的“出现数字 0 或 1 的拟合概率”的警告消息的背景,请参阅 Venables 和 Ripley(2002 年,第 197-8 页)。

glm 返回继承自 "glm" 的类的对象,而 "glm" 又继承自类 "lm" 。请参阅本节后面的内容。如果使用非标准method,该对象也将从该函数返回的类(如果有)继承。

函数summary(即summary.glm)可用于获取或打印结果摘要,函数anova(即anova.glm)可用于生成方差分析表。

通用访问器函数 coefficientseffectsfitted.valuesresiduals 可用于提取 glm 返回值的各种有用特征。

weights 提取一个权重向量,一个权重向量对应拟合中的每种情况(在子集化和 na.action 之后)。

"glm" 类的对象是至少包含以下组件的列表:

coefficients

命名的系数向量

residuals

工作残差,即 IWLS 拟合的最终迭代中的残差。由于忽略了权重为零的情况,因此它们的工作残差为 NA

fitted.values

拟合平均值,通过链接函数的反函数变换线性预测变量获得。

rank

拟合线性模型的数值等级。

family

使用的family 对象。

linear.predictors

链接尺度上的线性拟合。

deviance

最大为一个常数,减去最大对数似然的两倍。在合理的情况下,选择常数以使饱和模型的偏差为零。

aic

Akaike 的信息准则的一个版本,减去两倍的最大对数似然加上两倍的参数数量,通过系列的 aic 组件计算。对于二项式和泊松族,色散固定为 1,参数的数量就是系数的数量。对于高斯、伽玛和逆高斯族,色散是根据残余偏差来估计的,参数的数量是系数的数量加一。对于高斯族,使用色散的 MLE,因此这是 AIC 的有效值,但对于 Gamma 和逆高斯族则不是。对于由 quasi-likelihood 安装的系列,该值为 NA

null.deviance

空模型的偏差,与 deviance 相当。空模型将包括偏移量和截距(如果模型中有截距)。请注意,如果链接函数依赖于数据而不是通过拟合平均值,则这将是不正确的:指定零偏移以强制正确计算。

iter

使用的 IWLS 迭代次数。

weights

工作权重,即 IWLS 拟合的最终迭代中的权重。

prior.weights

最初提供的权重,如果没有,则为 1 的向量。

df.residual

剩余自由度。

df.null

零模型的剩余自由度。

y

如果请求(默认),则使用y向量。 (即使对于二项式模型来说,它也是一个向量。)

x

如果需要,模型矩阵。

model

如果需要(默认),模型框架。

converged

合乎逻辑的。 IWLS算法是否被判断为收敛了?

boundary

合乎逻辑的。拟合值是否在可达到值的边界上?

call

匹配的调用。

formula

提供的公式。

terms

使用的terms 对象。

data

data argument

offset

使用的偏移向量。

control

使用的 control 参数的值。

method

使用的拟合函数的名称(当作为 character 字符串提供给 glm() 时)或拟合函数 function (当作为该字符串提供时)。

contrasts

(如果相关)使用的对比。

xlevels

(如果相关)拟合中使用的因子水平的记录。

na.action

(如果相关)model.frame 返回的有关 NA 的特殊处理的信息。

此外,非空拟合将具有与最终加权线性拟合相关的组件 qrReffects

"glm" 的对象通常属于类 c("glm", "lm") ,即从类 "lm" 继承,并且类 "lm" 的 well-designed 方法将在 IWLS 的最终迭代中应用于加权线性模型。但是,需要小心,因为类 "glm" 的提取器函数(例如 residualsweights)不仅仅会挑选出具有相同名称的拟合组件。

如果通过给出两列响应来指定 binomial glm 模型,则 prior.weights 返回的权重是案例总数(由提供的案例权重分解),结果的分量 y 为成功的比例。

拟合函数

参数 method 有两个目的。一种是允许在不拟合的情况下重新创建模型框架。另一种是允许默认拟合函数 glm.fit 替换为采用相同参数并使用不同拟合算法的函数。如果 glm.fit 作为字符串提供,它将用于从 stats 命名空间开始搜索该名称的函数。

拟合器返回的对象的类(如果有)将添加到 glm 返回的类之前。

例子

## Dobson (1990) Page 93: Randomized Controlled Trial :
counts <- c(18,17,15,20,10,20,25,13,12)
outcome <- gl(3,1,9)
treatment <- gl(3,3)
data.frame(treatment, outcome, counts) # showing data
glm.D93 <- glm(counts ~ outcome + treatment, family = poisson())
anova(glm.D93)
summary(glm.D93)
## Computing AIC [in many ways]:
(A0 <- AIC(glm.D93))
(ll <- logLik(glm.D93))
A1 <- -2*c(ll) + 2*attr(ll, "df")
A2 <- glm.D93$family$aic(counts, mu=fitted(glm.D93), wt=1) +
        2 * length(coef(glm.D93))
stopifnot(exprs = {
  all.equal(A0, A1)
  all.equal(A1, A2)
  all.equal(A1, glm.D93$aic)
})


## an example with offsets from Venables & Ripley (2002, p.189)
utils::data(anorexia, package = "MASS")

anorex.1 <- glm(Postwt ~ Prewt + Treat + offset(Prewt),
                family = gaussian, data = anorexia)
summary(anorex.1)


# A Gamma example, from McCullagh & Nelder (1989, pp. 300-2)
clotting <- data.frame(
    u = c(5,10,15,20,30,40,60,80,100),
    lot1 = c(118,58,42,35,27,25,21,19,18),
    lot2 = c(69,35,26,21,18,16,13,12,12))
summary(glm(lot1 ~ log(u), data = clotting, family = Gamma))
summary(glm(lot2 ~ log(u), data = clotting, family = Gamma))
## Aliased ("S"ingular) -> 1 NA coefficient
(fS <- glm(lot2 ~ log(u) + log(u^2), data = clotting, family = Gamma))
tools::assertError(update(fS, singular.ok=FALSE), verbose=interactive())
## -> .. "singular fit encountered"

## Not run: 
## for an example of the use of a terms object as a formula
demo(glm.vr)

## End(Not run)

作者

The original R implementation of glm was written by Simon Davies working for Ross Ihaka at the University of Auckland, but has since been extensively re-written by members of the R Core team.

The design was inspired by the S function of the same name described in Hastie & Pregibon (1992).

参考

Dobson, A. J. (1990) An Introduction to Generalized Linear Models. London: Chapman and Hall.

Hastie, T. J. and Pregibon, D. (1992) Generalized linear models. Chapter 6 of Statistical Models in S eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.

McCullagh P. and Nelder, J. A. (1989) Generalized Linear Models. London: Chapman and Hall.

Venables, W. N. and Ripley, B. D. (2002) Modern Applied Statistics with S. New York: Springer.

也可以看看

anova.glmsummary.glm 等用于 glm 方法,以及泛型函数 anovasummaryeffectsfitted.valuesresiduals

lm 用于非广义线性模型(SAS 将其称为 GLM,用于 ‘general’ 线性模型)。

loglinloglm(包 MASS )用于将对数线性模型(二项式和泊松 GLM 属于)拟合到列联表。

biglm 包中的 bigglm 是一种将 GLM 拟合到大型数据集(尤其是具有许多情况的数据集)的替代方法。

esophinfertpredict.glm 有拟合二项式 glms 的示例。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Fitting Generalized Linear Models。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。