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;

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");