glm

语法

glm(ds, yColName, xColNames, [family], [link], [tolerance=1e-6], [maxIter=100])

参数

ds 是数据源,通常由 sqlDS 函数生成。

yColName 是字符串,表示数据源中作为因变量的列名。

xColNames 是字符串标量或向量,表示数据源中作为自变量的列名。

family 是字符串标量,表示指数族分布的类型。它的取值可以是 guassian, poisson, gamma, inverseGuassian, binomial。

link 是字符串标量,表示 link 函数的类型。对于不同取值的 family, link 的默认值如下表所示。

tolerance 是浮点数,表示迭代中止的边界差值。如果相邻两次迭代的对数似然函数值的差值小于 tolerance,则停止迭代。默认值为0.000001。

maxIter 是正整数,表示最大的迭代次数。默认值为100。

family 参数对 link 参数、因变量的限制如下:

family 的取值 link 可选值 默认的 link 取值 因变量的取值
gaussian identity, inverse, log identity DOUBLE 类型
poisson log, sqrt, identity log 非负整数
gamma inverse, identity, log inverse 大于等于0
inverseGaussian nverseOfSquare, inverse, identity, log inverseOfSquare 大于等于0
binomial logit, probit logit 0或1

详情

训练广义线性模型。返回结果是一个字典,包含以下 key:coefficients, link, tolerance, family, xColNames, tolerance, modelName, residualDeviance, iterations 和 dispersion。其中,coefficients 是一张表,包括计算得到的自变量系数值、每个系数的标准误差、t 值、p 值;modelName 为 "Generalized Linear Model";iterations 是实际迭代次数;dispersion 是模型的规范系数。

例子

下面的例子使用模拟数据训练一个广义线性模型:

x1 = rand(100.0, 100)
x2 = rand(100.0, 100)
b0 = 6
b1 = 1
b2 = -2
err = norm(0, 10, 100)
y = b0 + b1 * x1 + b2 * x2 + err
t = table(x1, x2, y)
model = glm(sqlDS(<select * from t>), `y, `x1`x2, `gaussian, `identity);
model;

// output
coefficients->

beta     stdError tstat      pvalue
-------- -------- ---------- --------
1.027483 0.032631 31.487543  0
-1.99913 0.03517  -56.842186 0
5.260677 2.513633 2.092858   0.038972

link->identity
tolerance->1.0E-6
family->gaussian
xColNames->["x1","x2"]
modelName->Generalized Linear Model
residualDeviance->8873.158697
iterations->5
dispersion->91.475863

把模型用于预测:

predict(model, t);

把模型保存到磁盘:

saveModel(model, "C:/DolphinDB/Data/GLMModel.txt");

把模型加载到内存中:

loadModel("C:/DolphinDB/Data/GLMModel.txt");