當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。