• sommer包拟合直接和间接遗传效应

    直接遗传效应(direct genetic effects,DGE):个体的表现型直接受基因型影响。

    间接遗传效应(indirect genetic effects,IGE):个体的表现除了受本身基因的影响,还间接受到相邻个体(社会伙伴)的基因影响。它属于一种环境影响。间接遗传效应的存在改变了基因型-表型的关系,在非直观的条件下改变进化的进程。

    使用CIMMYT小麦项目组提供的数据。数据有2个block,98个个体。该数据用于计算邻接材料对焦点材料的效应。

    表型数据:

         block   focal neighbour trait
    3878    b2 id_4568   id_1995   506
    2038    b2 id_9637   id_9637   390
    3994    b2 id_1720   id_4571   251
    1642    b2  id_755   id_1771   438
    1505    b2 id_6115   id_4568   486
    1813    b2 id_1536    id_784   421
    1459    b2 id_6115   id_5764   632
    3345    b2 id_7489   id_4669   212
    1680    b2  id_755   id_4960   569
    1293    b2 id_4669   id_3613   652
    2063    b2  id_845    id_845   629
    2051    b2 id_4960   id_4960   490
    1412    b2 id_5229   id_5746   891
    1760    b2 id_1995   id_9779   182
    3526    b2 id_8509   id_6115   455
    2014    b2 id_6180   id_6180   702
    1138    b2 id_5963   id_2734   351
    3282    b2 id_1436   id_5963   500
    2026    b2 id_5042   id_5042   332
    1492    b2 id_6115   id_1802   587

    基因型数据:

                 id_5440      id_4568     id_5890     id_1309     id_4640      id_4007
    id_5440  1.956696361 -0.061769158 -0.01634397 -0.06447941 -0.04040527 -0.004130619
    id_4568 -0.061769158  2.002057918  0.02756001 -0.06931443  0.01471098  0.008653623
    id_5890 -0.016343974  0.027560012  1.94589038  0.10144781  0.02089325  0.006026260
    id_1309 -0.064479410 -0.069314435  0.10144781  1.95258925 -0.01528626  0.016297550
    id_4640 -0.040405271  0.014710976  0.02089325 -0.01528626  1.92236611 -0.016776517
    id_4007 -0.004130619  0.008653623  0.00602626  0.01629755 -0.01677652  1.953613106

    (1)直接遗传效应

    表现型只由focal决定。

    library(sommer)
    data(DT_ige)
    DT <- DT_ige
    ## Direct genetic effects model
    modDGE <- mmer(trait ~ block,   # 固定效应为block
    random = ~ focal,   # 随机效应为focal
    rcov = ~ units,
    data = DT, verbose=FALSE)
    summary(modDGE)$varcomp
    
                       VarComp VarCompSE    Zratio Constraint
    focal.trait-trait 19894.45 3118.3474  6.379806   Positive
    units.trait-trait 10134.22  477.9483 21.203584   Positive

    (2)间接遗传效应

    表现型由focal和neighbour共同决定。这里使用DGE的方式计算focal和neighbour的方差组分。

    data(DT_ige)
    DT <- DT_ige
    ## Indirect genetic effects model
    modDGE <- mmer(trait ~ block,
    random = ~ focal + neighbour,
    rcov = ~ units,
    data = DT, verbose=FALSE)
    summary(modDGE)$varcomp
    
                            VarComp VarCompSE    Zratio Constraint
    focal.trait-trait     20550.511 3148.6833  6.526700   Positive
    neighbour.trait-trait  2926.704  607.4191  4.818261   Positive
    units.trait-trait      7301.084  363.8236 20.067649   Positive

    此外,还可以用IGE的方式计算间接遗传效应。gvs()用来计算基因型的协方差矩阵。

    data(DT_ige)
    DT <- DT_ige
    ### Indirect genetic effects model
    modIGE <- mmer(trait ~ block,
                   random = ~ gvs(focal, neighbour),
                   rcov = ~ units,
                   data = DT, verbose=FALSE)
    summary(modIGE)$varcomp
    
                                      VarComp VarCompSE    Zratio Constraint
    focal:focal.trait-trait         21014.516 3212.3586  6.541772   Positive
    focal:neighbour.trait-trait     -7469.401 1246.1105 -5.994173   Unconstr
    neighbour:neighbour.trait-trait  2964.707  576.9991  5.138149   Positive
    units.trait-trait                7297.715  357.8869 20.391120   Positive

    另外,可以通过gvs()的Gu参数提供方差协方差矩阵列表,这里Af=An都是个体的加性效应矩阵。

    data(DT_ige)
    DT <- DT_ige
    Af <- A_ige
    An <- A_ige
    ### Indirect genetic effects model
    modIGE <- mmer(trait ~ block,
                   random = ~ gvs(focal, neighbour, Gu=list(Af,An)),
                   rcov = ~ units,
                   data = DT, verbose=FALSE)
    summary(modIGE)$varcomp
    
                                      VarComp VarCompSE    Zratio Constraint
    focal:focal.trait-trait         27806.797 4162.7014  6.679988   Positive
    focal:neighbour.trait-trait     -9901.351 1532.8048 -6.459630   Unconstr
    neighbour:neighbour.trait-trait  3638.534  611.4065  5.951089   Positive
    units.trait-trait                7409.998  359.9827 20.584320   Positive

  • sommer包计算双列杂交的遗传力

    遗传力又叫遗传率,分为广义遗传力(board heritability)和狭义遗传力(narrow sense heritability)。广义遗传力一般用H2表示,分子是所有的遗传方差,分母是总方差(包括遗传方差、环境方差和误差方差)。相应的,狭义遗传力用h2表示,分子是加性效应的遗传方差,分母是总方差。

    (1)完全双列杂交设计

    模型为:

    y = Xβ + Zu1 + Zu2 + ZuS + ε

    这里,X是固定效应的发生率矩阵,β是固定效应向量,Z是随机效应的发生率矩阵,u1和u2分别是杂种优势群GCA1和GCA2的随机效应向量,uS是SCA的随机效应向量,ε是残差向量。GCA和SCA的BLUP可以用于预测杂交。

    计算代码为:

    library(sommer)   # 加载sommer包,第一次安装请先运行install.packages("sommer")
    data(DT_cornhybrids)   # 加载数据集
    DT <- DT_cornhybrids   # 杂交数据矩阵赋值给DT变量
    DTi <- DTi_cornhybrids   # 亲本信息矩阵赋值给DTi变量,计算遗传力的时候用不到
    GT <- GT_cornhybrids   # 数值化的基因型矩阵赋值给GT变量,计算遗传力时用不到
    modFD <- mmer(Yield~Location,   # 用地点做固定效应
                  random=~GCA1+GCA2+SCA,   # GCA1、GCA2和SCA做随机效应
                  rcov=~units,   # 
                  data=DT, verbose = FALSE)   # 数据集使用DT,不显示迭代过程
    (suma <- summary(modFD)$varcomp)   # 获得方差组分并显示
    Vgca <- sum(suma[1:2,1])   # 两个GCA方差的和
    Vsca <- suma[3,1]   # SCA方差的
    Ve <- suma[4,1]   # 环境方差的
    Va = 4*Vgca   # 4个环境×GCA方差 ???为什么不直接用GCA而要×4?
    Vd = 4*Vsca   # 4个环境×SCA方差 ???为什么不直接用SCA?
    Vg <- Va + Vd   # 遗传方差=加性方差+显性方差
    (H2 <- Vg / (Vg + (Ve)) )   # 广义遗传力=遗传方差/总方差,Ve外面的括号是多余的
    (h2 <- Va / (Vg + (Ve)) )   # 狭义遗传力=加性方差/总方差
    

    本例中,使用来自2个杂种优势群的40个自交系,每个杂种优势群有20个自交系。因此,共有20×20=400个可能的组合。该模拟数据在4个地点鉴定了100个系的表型数据,每个地点只有1次重复,共计4×100=400条数据。

    下面是杂交数据DT的前100行(1600×6):

    head(GT,100)
    
        Location GCA1   GCA2         SCA    Yield PlantHeight
    1          1 A258 AS5707 A258:AS5707       NA          NA
    2          1 A258     B2     A258:B2       NA          NA
    3          1 A258    B99    A258:B99       NA          NA
    4          1 A258   LH51   A258:LH51       NA          NA
    5          1 A258   Mo44   A258:Mo44       NA          NA
    6          1 A258  NC320  A258:NC320       NA          NA
    7          1 A258  Oh40B  A258:Oh40B 129.0082    1.632108
    8          1 A258 W117Ht A258:W117Ht 139.5254    1.613334
    9          1 A258 W182BN A258:W182BN 122.8658    1.688060
    10         1 A258  W611S  A258:W611S       NA          NA
    11         1 A258   A641   A258:A641 166.6094    2.010321
    12         1 A258    B10    A258:B10 159.3310    1.947324
    13         1 A258   B119   A258:B119       NA          NA
    14         1 A258   B14A   A258:B14A       NA          NA
    15         1 A258  CM174  A258:CM174       NA          NA
    16         1 A258    H91    A258:H91       NA          NA
    17         1 A258    N7A    A258:N7A       NA          NA
    18         1 A258  PHG86  A258:PHG86       NA          NA
    19         1 A258   R226   A258:R226       NA          NA
    20         1 A258  W610S  A258:W610S 147.6366    1.564184
    21         1 B118 AS5707 B118:AS5707       NA          NA
    22         1 B118     B2     B118:B2 126.9928    2.027177
    23         1 B118    B99    B118:B99       NA          NA
    24         1 B118   LH51   B118:LH51       NA          NA
    25         1 B118   Mo44   B118:Mo44 135.6515    1.862859
    26         1 B118  NC320  B118:NC320       NA          NA
    27         1 B118  Oh40B  B118:Oh40B       NA          NA
    28         1 B118 W117Ht B118:W117Ht       NA          NA
    29         1 B118 W182BN B118:W182BN       NA          NA
    30         1 B118  W611S  B118:W611S 130.1698    1.629009
    31         1 B118   A641   B118:A641 156.6514    2.130744
    32         1 B118    B10    B118:B10       NA          NA
    33         1 B118   B119   B118:B119       NA          NA
    34         1 B118   B14A   B118:B14A       NA          NA
    35         1 B118  CM174  B118:CM174       NA          NA
    36         1 B118    H91    B118:H91       NA          NA
    37         1 B118    N7A    B118:N7A 145.3416    1.525327
    38         1 B118  PHG86  B118:PHG86       NA          NA
    39         1 B118   R226   B118:R226       NA          NA
    40         1 B118  W610S  B118:W610S 165.0516    1.603079
    41         1  B97 AS5707  B97:AS5707 119.5537    2.031154
    42         1  B97     B2      B97:B2       NA          NA
    43         1  B97    B99     B97:B99       NA          NA
    44         1  B97   LH51    B97:LH51 121.0262    1.728354
    45         1  B97   Mo44    B97:Mo44 141.8828    2.007985
    46         1  B97  NC320   B97:NC320       NA          NA
    47         1  B97  Oh40B   B97:Oh40B 121.4198    1.555613
    48         1  B97 W117Ht  B97:W117Ht 141.3195    1.525166
    49         1  B97 W182BN  B97:W182BN 129.2736    1.558707
    50         1  B97  W611S   B97:W611S       NA          NA
    51         1  B97   A641    B97:A641       NA          NA
    52         1  B97    B10     B97:B10       NA          NA
    53         1  B97   B119    B97:B119       NA          NA
    54         1  B97   B14A    B97:B14A 146.8906    1.884599
    55         1  B97  CM174   B97:CM174       NA          NA
    56         1  B97    H91     B97:H91       NA          NA
    57         1  B97    N7A     B97:N7A       NA          NA
    58         1  B97  PHG86   B97:PHG86       NA          NA
    59         1  B97   R226    B97:R226       NA          NA
    60         1  B97  W610S   B97:W610S       NA          NA
    61         1 C102 AS5707 C102:AS5707       NA          NA
    62         1 C102     B2     C102:B2 134.6043    1.918804
    63         1 C102    B99    C102:B99       NA          NA
    64         1 C102   LH51   C102:LH51 148.6455    2.105199
    65         1 C102   Mo44   C102:Mo44       NA          NA
    66         1 C102  NC320  C102:NC320       NA          NA
    67         1 C102  Oh40B  C102:Oh40B       NA          NA
    68         1 C102 W117Ht C102:W117Ht       NA          NA
    69         1 C102 W182BN C102:W182BN       NA          NA
    70         1 C102  W611S  C102:W611S       NA          NA
    71         1 C102   A641   C102:A641       NA          NA
    72         1 C102    B10    C102:B10       NA          NA
    73         1 C102   B119   C102:B119       NA          NA
    74         1 C102   B14A   C102:B14A       NA          NA
    75         1 C102  CM174  C102:CM174       NA          NA
    76         1 C102    H91    C102:H91       NA          NA
    77         1 C102    N7A    C102:N7A       NA          NA
    78         1 C102  PHG86  C102:PHG86       NA          NA
    79         1 C102   R226   C102:R226 136.8265    1.684973
    80         1 C102  W610S  C102:W610S       NA          NA
    81         1 LH61 AS5707 LH61:AS5707       NA          NA
    82         1 LH61     B2     LH61:B2       NA          NA
    83         1 LH61    B99    LH61:B99       NA          NA
    84         1 LH61   LH51   LH61:LH51       NA          NA
    85         1 LH61   Mo44   LH61:Mo44       NA          NA
    86         1 LH61  NC320  LH61:NC320       NA          NA
    87         1 LH61  Oh40B  LH61:Oh40B       NA          NA
    88         1 LH61 W117Ht LH61:W117Ht 126.6400    1.607918
    89         1 LH61 W182BN LH61:W182BN       NA          NA
    90         1 LH61  W611S  LH61:W611S       NA          NA
    91         1 LH61   A641   LH61:A641       NA          NA
    92         1 LH61    B10    LH61:B10       NA          NA
    93         1 LH61   B119   LH61:B119       NA          NA
    94         1 LH61   B14A   LH61:B14A       NA          NA
    95         1 LH61  CM174  LH61:CM174       NA          NA
    96         1 LH61    H91    LH61:H91       NA          NA
    97         1 LH61    N7A    LH61:N7A       NA          NA
    98         1 LH61  PHG86  LH61:PHG86 138.8772    1.652411
    99         1 LH61   R226   LH61:R226       NA          NA
    100        1 LH61  W610S  LH61:W610S       NA          NA

    下面是亲本信息数据DTi(40×4):

    DTi
    
       Genotype Group     Yield PlantHeight
    1      A258   NSS  88.20679   0.9272210
    2      A634   SSS  93.31265   1.0226329
    3      A641   SSS 109.00473   1.0095320
    4      A680   SSS  98.81964   1.1096407
    5    AS5707   NSS  80.65517   1.3279382
    6       B10   SSS  95.84411   1.3262020
    7      B105   SSS 100.65840   1.1560672
    8      B118   NSS 111.36915   1.4949915
    9      B119   SSS  86.68451   0.9925757
    10     B121   SSS 104.95121   0.6704880
    11     B14A   SSS 114.69768   1.0709695
    12       B2   NSS 108.69982   1.1506838
    13      B84   SSS  92.18648   1.2417499
    14      B97   NSS  84.54403   1.2251734
    15      B99   NSS  88.14189   1.3141365
    16     C102   NSS  99.86213   1.3150211
    17    CM174   SSS 107.16554   1.0458131
    18    H105W   SSS  94.94959   0.9217209
    19      H91   SSS 105.75978   0.8894477
    20     LH51   NSS  81.85276   1.2395905
    21     LH61   NSS 109.39862   0.9673939
    22      LP5   SSS 103.10739   0.9972820
    23     Mo44   NSS 108.44876   0.8871609
    24      N7A   SSS 103.19176   1.4401722
    25    NC262   NSS  99.52945   0.7187014
    26    NC320   NSS 104.42666   1.2892791
    27    NC344   NSS  96.68368   0.8644697
    28    Oh40B   NSS 102.63953   0.9376076
    29     Pa91   NSS 124.03104   1.1982550
    30    PHG71   SSS  83.70858   1.1174897
    31    PHG86   SSS  90.85945   1.2136497
    32    PHW17   SSS 104.01616   1.1334628
    33     R226   SSS  95.31983   1.3587364
    34    Tzi25   SSS  91.65843   1.0268473
    35   W117Ht   NSS 116.60487   0.9949743
    36    W153R   NSS 113.74265   1.5680403
    37   W182BN   NSS  89.71262   1.4102404
    38      W23   NSS  93.20116   1.2686134
    39    W610S   SSS 106.17348   0.9484871
    40    W611S   NSS  92.02427   1.1937574

    基因型矩阵前6行和前6列(40×40):

    GT[1:6,1:6]
    
                  A258       A634        A641        A680      AS5707         B10
    A258    2.23285528 -0.3504778 -0.04756856 -0.32239362 -0.07776163 -0.01257374
    A634   -0.35047780  1.4529169  0.45203869 -0.02293680 -0.43538636  0.19984929
    A641   -0.04756856  0.4520387  1.96940221 -0.09896791 -0.28059417  0.02019641
    A680   -0.32239362 -0.0229368 -0.09896791  1.65221984 -0.33095920  0.12259252
    AS5707 -0.07776163 -0.4353864 -0.28059417 -0.33095920  2.36536453 -0.18705982
    B10    -0.01257374  0.1998493  0.02019641  0.12259252 -0.18705982  1.78689265
    modFD <- mmer(Yield~Location,
                  random=~GCA1+GCA2+SCA,
                  rcov=~units,
                  data=DT, verbose = FALSE)
    (suma <- summary(modFD)$varcomp)
    
                         VarComp VarCompSE     Zratio Constraint
    GCA1.Yield-Yield    0.000000  16.50337  0.0000000   Positive
    GCA2.Yield-Yield    7.412226  18.94200  0.3913116   Positive
    SCA.Yield-Yield   187.560303  41.59428  4.5092817   Positive
    units.Yield-Yield 221.142463  18.14716 12.1860656   Positive
    Vgca <- sum(suma[1,1])
    Vsca <- suma[2,1]
    Ve <- suma[3,1]
    Va = 2*Vgca
    Vd = 2*Vsca
    Vg <- Va + Vd
    (H2 <- Vg / (Vg + Ve) )
    (h2 <- Va / (Vg + (Ve)) )
    
    > (H2 <- Vg / (Vg + Ve) )
    [1] 0.7790856
    > (h2 <- Va / (Vg + (Ve)) )
    [1] 0.02961832

    由于该数据主要模拟显性效应,因此,加性方差非常小,导致了h2很小。

    (2)不考虑自交的半双列杂交

    本例中有7个亲本,共有7×(7-1)/2=21个杂交组合。实验设计是2个重复的完全随机设计(completely randomized disign,CRD)。双亲的GCA和SCA的方差组分可以被估计,

    模型为:

    y = Xβ + Zug + Zus + ε

    代码为:

    data("DT_halfdiallel")   # 加载数据集
    DT <- DT_halfdiallel   # 将数据集赋值给DT变量
    DT$femalef <- as.factor(DT$female)   # 增加femalef列,作为因子
    DT$malef <- as.factor(DT$male)   # 增加malef列,作为因子
    DT$genof <- as.factor(DT$geno)   # 增加genof列,作为因子
    #### model using overlay
    modh <- mmer(sugar~1,   # 斜率为固定效应,预测糖
                 random=~vs(overlay(femalef,malef))   # 亲本的设计矩阵+基因型向量为随机效应
                 + genof,
                 data=DT, verbose = FALSE)   # 数据集是DT,不显示迭代
    (suma <- summary(modh)$varcomp)
    summary(modh)$varcomp
    Vgca <- sum(suma[1,1])
    Vsca <- suma[2,1]
    Ve <- suma[3,1]
    Va = 2*Vgca
    Vd = 2*Vsca
    Vg <- Va + Vd
    (H2 <- Vg / (Vg + Ve) )
    (h2 <- Va / (Vg + (Ve)) )
    
                           VarComp VarCompSE   Zratio Constraint
    u:femalef.sugar-sugar 5.507899 3.5741151 1.541052   Positive
    genof.sugar-sugar     1.815784 1.3629575 1.332238   Positive
    units.sugar-sugar     3.117538 0.9626094 3.238632   Positive

    这里,vs()是构造方差协方差矩阵的主函数,里面包含了overlay()辅助函数。overlay()函数的作用是构造综合考虑两个变量的发生率矩阵,对于每个因子(本例中共7个),无论是父本还是母本,只要出现即为1,否则为0。

    本例中发生率矩阵如下:

    overlay(DT$femalef,DT$malef)
    
       1 2 3 4 5 6 7
    1  1 1 0 0 0 0 0
    2  1 1 0 0 0 0 0
    3  1 0 1 0 0 0 0
    4  1 0 1 0 0 0 0
    5  1 0 0 1 0 0 0
    6  1 0 0 1 0 0 0
    7  1 0 0 0 1 0 0
    8  1 0 0 0 1 0 0
    9  1 0 0 0 0 1 0
    10 1 0 0 0 0 1 0
    11 1 0 0 0 0 0 1
    12 1 0 0 0 0 0 1
    13 0 1 1 0 0 0 0
    14 0 1 1 0 0 0 0
    15 0 1 0 1 0 0 0
    16 0 1 0 1 0 0 0
    17 0 1 0 0 1 0 0
    18 0 1 0 0 1 0 0
    19 0 1 0 0 0 1 0
    20 0 1 0 0 0 1 0
    21 0 1 0 0 0 0 1
    22 0 1 0 0 0 0 1
    23 0 0 1 1 0 0 0
    24 0 0 1 1 0 0 0
    25 0 0 1 0 1 0 0
    26 0 0 1 0 1 0 0
    27 0 0 1 0 0 1 0
    28 0 0 1 0 0 1 0
    29 0 0 1 0 0 0 1
    30 0 0 1 0 0 0 1
    31 0 0 0 1 1 0 0
    32 0 0 0 1 1 0 0
    33 0 0 0 1 0 1 0
    34 0 0 0 1 0 1 0
    35 0 0 0 1 0 0 1
    36 0 0 0 1 0 0 1
    37 0 0 0 0 1 1 0
    38 0 0 0 0 1 1 0
    39 0 0 0 0 1 0 1
    40 0 0 0 0 1 0 1
    41 0 0 0 0 0 1 1
    42 0 0 0 0 0 1 1
    attr(,"variables")
    [1] "DT$femalef" "DT$malef"  

  • 图解双列杂交(diallel design)

    双列杂交是玉米生产上经常应用的组配实验设计,用来获取最好的单交组合。

    双列杂交设计有4种:

    (1)完全双列杂交(full diallel)

    	A1	A2	A3
    A1	A1A1	A1A2	A1A3
    A2	A2A1	A2A2	A2A3
    A3	A3A1	A3A2	A3A3
    

    一组数据两两组合,没有例外的情况就是完全双列杂交。其组合数为n^2,如本例n=3,则共有9个组合。

    在玉米育种中,本身和本身杂交相当于自交,所以这种方式在玉米上不常用。

    (2)不考虑自交的完全双列杂交(full diallel without parents)

    	A1	A2	A3
    A1		A1A2	A1A3
    A2	A2A1		A2A3
    A3	A3A1	A3A2	
    

    这种情况去掉了自交(对角线)的情况。组合数为n(n-1),本例子中为3*(3-1)=6。由于正反交的效果几乎一致,因此这种方法也不常见。

    (3)半双列杂交(half diallel)

    	A1	A2	A3
    A1	A1A1	A1A2	A1A3
    A2		A2A2	A2A3
    A3			A3A3
    

    由于这种组合的矩阵,左下三角和右上三角是对称的,因此只保留一个。组合数公式为:n(n+1)/2。本例3*(3+1)/2=6。该方式解决了正反交的问题。但是,却没有考虑自交问题,在玉米育种上也不常见。

    (4)不考虑自交的半双列杂交(half diallel without parents)

    	A1	A2	A3
    A1		A1A2	A1A3
    A2			A2A3
    A3			
    

    这种方式既考虑到了,重复的组合,又去掉了自交。组合数公式为:n(n-1)/2。本例中为3*(3-1)/2=3。这种组配方案是玉米育种中比较常见的方案。

    (5)不同杂种优势群的双列杂交

    实际上,还有第5种情况,即考虑到不同杂种优势群的双列杂交。组合公式为:n×m,n和m分别为两个杂种优势群中个体的数量。本例子中,3×3=9种组合。这种情况没有自交,因此也不必考虑。这种组配设计也可以叫做Line by Tester设计,材料少时,两种组配设计一致,但是通常情况下,Tester的数量不会很多。

    	B1	B2	B3
    A1	A1B1	A1B2	A1B3
    A2	A2B1	A2B2	A2B3
    A3	A3B1	A3B2	A3B3
    
  • sommer包的预测函数

    (1)预测的背景

    在混合线性模型中,y是n×1的观测值向量,混合线性模型可以写成:

    这里τ是固定效应的t×1的向量;X是n×t的设计矩阵,它将观测值与固定效应联系起来;u是q×1的随机效应向量;Z是n×q的矩阵,它联系观测值与随机效应;e是n×1的残差误差向量。W和β分别表示组合的设计矩阵和效应向量,它假设:

    G和R是随机效应和残差的协方差矩阵,函数的参数是γ和φ。协方差矩阵的数据应该写作:

    var(y)=σ2(ZGZ’+R)

    协方差的参数γ和φ 用有限的最大似然或最大似然估计。

    已知D、 γ和φ 的线性组合的BLUP,然后有:

    这里

    是混合模型公式的解:

    这些也可以写作:

    这里的τbar是τ最佳线性无偏估计(BLUE),ubar是u的最佳线性无偏预测(BLUP),这些用协方差var(βbar-β)=C-1。考虑到,为了更加清晰,使用能形成置信区间预测误差方差(Prediction error variance,PEV或var(βbar-β),而不是通常感兴趣的方差估计者var(βbar)。对于线性组合Dβbar,PEV是DC-1DT。因为方差参数是未知的,因此,我们用它们的REML估计替换掉未知方差参数,并使用经验值。

    sommer包中的预测函数用混合模型公式和线性组合D矩阵构建C-1矩阵用于预测。对于均值,它使用线性组合的D矩阵乘以需要固定和随机效应的向量Xτbar+Zubar或Dβbar,这里D矩阵是来自X和/或Z矩阵的固定和/或随机效应的线性组合。

    注意,由于这里打不出来βbar,因此用βbar代替。τbar和ubar同理。

    (2)预测均值

    sommer用predict()函数计算mmer函数中固定和随机效应的均值和标准差。使用yatesoats数据集你和固定和随机效应。

    data(DT_yatesoats)
    DT <- DT_yatesoats
    m3 <- mmer(fixed=Y ~ V + N + V:N,
               random = ~ B + B:MP,
               rcov=~units,
               data = DT, verbose=FALSE)
    summary(m3)$varcomp
    
               VarComp VarCompSE   Zratio Constraint
    B.Y-Y     214.4477 168.62790 1.271722   Positive
    B:MP.Y-Y  106.0508  67.83280 1.563415   Positive
    units.Y-Y 177.0883  37.34293 4.742217   Positive

    现在,该模型可以和分类参数一起使用,获得分类的均值。例如,模型包括了固定公式项”V“用于品种,”N“用于指定氮肥处理,”V:N“表示品种和氮肥互作。分类参数可以用于指定需要的均值。下面的例子,氮肥处理的均值:

    p0 <- predict.mmer(object=m3, classify = "N")
    
    iteration    LogLik     wall    cpu(sec)   restrained
        1      -0.745921   16:3:8      0           0
        2      -0.745921   16:3:8      0           0
        3      -0.745921   16:3:8      0           0
        4      -0.745921   16:3:8      0           0
    p0$pvals
    
      trait   N predicted.value standard.error
    1     Y   0        79.38889       9.006796
    2     Y 0.2        98.88889       9.006796
    3     Y 0.4       114.22222       9.006796
    4     Y 0.6       123.38889       9.006796

    结束语

    记住,sommer使用直接反演算法(direct inversion,DI),对于大数据集来说可能非常慢。该包主要针p>n的情况(随机效应比观测值多)且模型使用密集的协方差结构。例如,适用于协方差结构密集且重复较少的实验。也适用于随机效应较多的基因组问题。对于重复很多的情况,如200个个体,10次重复,有2000条记录时,asreml的速度要高于sommer。

  • 为什么单单清明节用“公历”,其他传统节日用“农历”?

    导语:出了国才体会到,作为一个中国人,对我国传统文化的了解实在太匮乏。一个简单的问题可能都答不上来。


    中华文明上下五千年,文化底蕴深厚,传统节日颇多,比如春节(农历正月初一)、端午佳节(农历五月初五)、中秋节(农历五月初五)等,都由农历确定日期。此外,我国还庆祝一些外来节,比如妇女节、劳动节、儿童节,这些节日使用公历。但是,有一个特别重要的传统节日使用了公历,那就是扫墓祭祖的节日——清明节(公历4月5日前后)。

    • 为什么清明节不使用农历呢?难道清明节也是外来节吗?

    要论证清明节是不是外来节,可以按照统计学的假设检验来判断。假设清明节是外来节,若庆祝清明节的记载晚于公历传入我国的时间,则很可能假设成立;反之,备择假设为清明节不是外来节,只要证明清明节的出现早于或远早于公历在我国实行的时间即可。关键在于查找公历传入中国的年份是否早于清明节。

    据查,“我国数千年的封建皇朝时代,采用单一历制夏历(俗称“农历”)。孙中山领导辛亥革命胜利后,即于1912年1月2日发布《临时大总统改历改元通电》:中华民国改用阳历,以黄帝纪元四千六百九年十一月十三日,为中华民国元年元旦。经由各省代表团议决,由本总统颁行。”(章潜五, 2006;黄永武 ,1986)。若是清明节晚于1912年1月2日,则很有可能是一个外来节日,反之则可确定其非外来节。

    接下来,只要找到清明节早于民国时期的例子,即可推翻原假设。

    我国各朝各代都有关于清明的记载,以扫墓为主的清明节到宋代才正式形成(高洪兴,2005)。西汉时期的《淮南子·天文训》中也发现了对清明的记载,且其描述的时间与现在清明节的时间相吻合(黄涛 ,2004)。据此,清明节的发生日期远早于公历传入我国,推翻原假设,备择假设成立,清明节不是外来节。

    • 那么,为什么清明节使用公历呢?

    原来,清明节除了是节日,也是二十四节气之一,它是目前唯一一个既是节气又是节日的日子。现在我们所说的二十四节气,实际是将一整个归回年分成了24等分,每一份为一个节气,经过冬至、春分、夏至、秋分再到冬至的过程,循环往复。因为节气取决于地球与太阳的相对位置,每年的节气固定在公历上确定日期的前后,例如清明节可能出现在公历4月的4、5、6日,5日居多。因此,这好像给了我们一个错觉,清明使用的是公历,殊不知,古代并未引入公历,当然也无法利用公历推算节气的日期,但节气早已经存在了。准确的说法是,我国二十四节气的日期恰巧与公历相吻合。

    • 没有公历,古人如何确定二十四节气的具体日期?用阴历能推算吗?

    公历又名太阳历(Solar calendar或Gregorian calendar)是根据地球围绕太阳公转制定的历法。农历中的阴历(Lunar calendar)也叫太阴历,根据月亮的圆缺制定。月亮绕行地球一周(塑望月),完成一个圆缺周期。每个塑望月29或30天,12个周期约354或355天,为了匹配阴历和阳历,让四季尽量保持在固定的月份,需要添加闰月来补充时间差。

    阳历决定着温度、气候,对农业生产尤为重要;阴历则需要通过增加闰月,调整与阳历的匹配度,才能推算出节气。为什么古人会用这样麻烦的历法呢?

    我的推测有三点:第一,月亮比太阳更容易观察。晴朗的夜空即可观察月亮的变化,而太阳很难直接观察。第二,月亮的圆缺变化明显,太阳需要根据其在天空中的位置(黄道)才能确定历法。第三,地月位置与潮汐相关,古人多居于河流、湖泊、沿海等地区,阴历有助于捕鱼。

    前面说了,节气对于农业生产的意义重大,没有公历的情况下,如何获得节气信息从而指导农耕呢?1972年在山东临沂的考古发现,我国西汉初年就已使用节气注历(沈志忠,2001)。换句话说,我国使用的并非单纯的阴历,而是以阴历为基础,加注节气的阴阳历。这种方式可以同时获得对农耕和渔业的指导,还延续了先祖流传下来的阴历历法。

    既然古人直接直视太阳观察不现实,节气应该如何确定呢?

    以下几个方法可以确定节气的日期。

    一、圭表测日法。

    图像来自网络

    圭表可以测定正午太阳高度角的变化。圭是短尺子,南北放置,表是约一人高垂直于地面的竿子(伊世同,1984),圭表就是用尺子和竿子组成的历法推算工具。夏至,太阳高度角最大,投影最短;冬至,太阳高度角最小,投影最长;春分和秋分的长度则正好位于夏至和冬至之间。

    其实,利用一个杆子和一条绳子就可以制作一个类似圭表的历法推算工具。先将竿子垂直立于地面,记录一年内每天正午太阳投影的端点,一年后,将所有端点用线连接起来,可以得到一个类似矩形(四边是弧形)闭合图形。用绳子量取每个边的长度,根据绳子的对折可以获得刻度,标注在地面上,此时,可以通过太阳投影到地面上相应位置判断节气。

    二、星象法。

    民间有根据星象确定时令的说法,但是没有找到正式发表的论文证据。星象法可以通过星座或北斗星判断节气。

    假设整个宇宙在膨胀,距离非常遥远的星系对地球来说相对静止,可推测出地球绕太阳一周,对应的星象完成一个变化周期,理论上可以说得通。但有文章说,一些星座对应时有偏差。

    民间有“斗柄指东,天下皆春;斗柄指南,天下皆夏;斗柄指西,天下皆秋;斗柄指北,天下皆冬”的说法,利用北斗七星斗柄所指方向判别时令。按照上述说法,一回归年,斗柄旋转一周。同理,将一周分为24等分,即可判别节气。

    据我推断,由于天空中很难找到相对准确的参照物,准确判断指向的方位十分困难,这是北斗星法没有广泛使用并留下完整证据的原因。

    另外,提一下,我看了一篇文章,那篇文章的作者认为阴历十二个月(十二地支)和北斗星象吻合,说明利用十二地支表月份并非偶然。我认为他的文章是站不住脚的。这里有个很简单的道理,假设星象位置不变或相对于地球近似于静止,那么地球的位置和自转将决定星象的位置,地区的位置取决于绕太阳公转,一个回归年(绕太阳一周)是一个周期,地球自转属于地球本身的性质,都不取决于月亮或受月亮影响很小,十二地支若表示阴历月,一年354天,第二年相同月份的星象位置必然改变。实际上,十二地支表示的是太阳历的月。

    三、干支历推算。

    干支历是以回归年为单位的我国特有阳历历法(张培瑜,黄洪峰,1994),该历法每月有29、30、31、32天,短的季度88、89天,而长的季度有93、94天,和公历很难共存。另一种说法是,干支历也叫中国阳历、中华阳历、节气历,说是基于天干地支,每年有12个月(十二地支),以节作为每月首日,气为月中,立春为年首。但未找到完整的文献描述。

    干支历以回归年为单位,看似合情合理,实则不然。干支,是天干地支的简称,表示树干和枝叶的意思,也有天地阴阳的思想。十天干(甲乙丙丁戊己庚辛壬癸)与十二地支(子丑寅卯辰巳午未申酉戌亥)两两组合,共有60种组合,称六十甲子,甲和子分别是天干和地支的第一位。天干地支纪年,60年一个循环,至今仍然沿用。若用来记月,12地支每个代表一个月,那么每个月的天数应该由六十甲子决定,两个月排完一轮,一年12个月,刚好排完6组,360天,并不是365天。一旦按照365天计算,甲子必不够用,天干地支紊乱。因此,我认为,干支历应该为360天为一年,需要调整或者有精度问题,但其作为一种太阳历,可以作为确定二十四节气的依据。

    我国还有一些历法,如太初历、三统历等,都是根据太阳周期制定的,这类历法也可以作为推算二十四节气的依据。不过,在我看来,这些历法也都是通过圭表法或星象法制定的,归根结底还是前两种方法。

    因此,清明节并非使用公历,而是刚好和公历的时间相吻合。古人可以采取一些手段,比如借助圭表,观天,或者利用太阳历法来确定节气的具体日期。我国的农历是阴阳混合历,阴历是月历,用以推算潮汐;阳历以二十四节形式表现,用来指导农耕。

    本文借助一个有趣的话题传达一个思维过程,其中融入了假设检验的朴素思想,不完全契合,权当作为理解假设检验原理的例子。中国文化源远流长,有瑰宝、有糟粕,慨叹古人智慧的同时,吸取古人的智慧,去粗取精,传承那些依然有生命力的思想,敬畏那些已经逝去的过往。

    参考文献

    [1] 章潜五. 我国“改用阳历”临近百年的思考[J]. 西安电子科技大学学报(社会科学版), 2006(06):111-114+140.

    [2] 黄永武. 敦煌宝藏(册109)M]台北:新文丰出版公司,1986:578- – 581.

    [3] 高洪兴. 中国鬼节与阴阳五行:从清明节和中元节说起[J]. 复旦学报(社会科学版), 2005(04):132-140.

    [4] 黄涛. 清明节的源流,内涵及其在现代社会的变迁[J]. 民间文化论坛, 2004(5):16-22.

    [5] 沈志忠. 二十四节气形成年代考[J]. 东南文化, 2001(01):53-56.

    [6] 伊世同. 元代圭表复原探索[J]. 自然科学史研究, 1984(02):128-137.

    [7] 张培瑜,黄洪峰. 中历及二十四节气时刻计算[J]. 广西科学, 1994, 1(3):62-65.


    题外话,在章潜五的文章中,袁世凯复辟后,由内务大臣将阴历元旦从过大年改为春节,沿用至今。

    在选择参考文献时,尤其是方法的引用,应尽量选择原始出处,避免间接引用。道理很简单,如同《王牌对王牌》中的传声筒,传着传着,就意思就变了。当然,文科文献找到原始出处可能比较困难,理科会容易得多。

  • R语言计算方差协方差矩阵

    方差协方差矩阵,多组变量组成的以方差和协方差数值得到的矩阵。要获得方差-协方差矩阵,需要先知道什么是方差。

    方差:是衡量随机变量或一组数据时离散程度的度量,即(样本中的每个值减去均值)平方和/自由度。

    例如,有一组数据,用R手动计算其方差。

    a <- c(2, 2, 1, 5, 4, 1, 2, 5, 2, 2)

    sum((a-mean(a))^2)/(length(a)-1) #手动计算方差

    var(a) #函数计算方差

    可以对比一下,函数计算的方差与手动计算的方差是否一致。

    协方差:是用于衡量两个随机变量的联合变化程度。而方差是协方差的一种特殊情况,即变量与自身的协方差。

    如果我们又有一组数据,用R计算一下协方差。

    b <- c(2, 2, 1, 4, 4, 3, 5, 1, 3, 5)

    sum((a-mean(a))*(b-mean(b)))/(length(a)-1)

    var(a,b)

    可自行查看结果是否一致。

    方差-协方差矩阵,是用不同数据得到的协方差矩阵。

    如果要得到a,b的方差-协方差矩阵,直接使用var()就可以。

    matrixNoHeader <- cbind(a,b)

    var(matrixNoHeader)

    协方差矩阵行列数量相等,等于变量的个数。

    如果是多个数据

    a <- c(2, 2, 1, 5, 4, 1, 2, 5, 2, 2)
    b <- c(2, 2, 1, 4, 4, 3, 5, 1, 3, 5)
    c <- c(1, 5, 5, 5, 3, 3, 2, 1, 4, 2)
    d <- c(4, 2, 5, 1, 5, 5, 4, 3, 5, 1)

    matrixNoHeader <- cbind(a,b,c,d)
    var(matrixNoHeader)

    对角线是每个变量自身的方差,其余部分是协方差。方差协方差矩阵就是这么简单。

  • R语言的sommer包简要介绍

    sommer是Solving Mixed Model Equations in R的首字母缩写,译为在R中解混合线性方程。

    sommer的诞生是为了给R语言用户提供一个高效、稳定的多变量混合模型求解工具。该包主要关注p>n(估计的效应多于观测值),其核心算法由C++编写。该包可以拟合包含随机效应的方差-协方差结构的混合模型,指定非齐次方差(一个变量X对另一个变量Y的影响可能因个体而异),还能获得固定/随机效应的BLUP、BLUE、残差、拟合值、方差等参数。

    包的核心是解混合模型,利用一个接口调用the NR Direct-Inversion Newton-Raphson or Average Information algorithms(直接反演牛顿-拉夫逊或平均信息算法)。支持多变量模型。多变量或拓展的单变量形式为:

    这里,yi是性状的表型向量;βi是固定效应向量;ui是个体的随机效应向量;ei是第i个性状的残差(i=1…t)。假设随机效应ui和ei服从正态分布且均值为0。X和Z分别是固定效应和随机效应的发生率矩阵。多元变量的响应分布和表型的方差协方差(V)是:

    这里,K是第K个随机效应(u=1…k)的关系矩阵或协方差矩阵;H=I是残差项的单位矩阵或部分单位矩阵;σgi2和σei2分别表示第i个性状的遗传(或第k个任意随机项)和残差的方差;σgij和σeij分别是遗传(或第k个任意随机项)和残差的协方差(i=1…t, j=1…t)。算法用对数似然数优化。

    这里||是矩阵的行列式,用牛顿优化算法更新REML的估计。

    这里,θ是性状间随机效应方差分量和协方差分量的向量。H-1是第k个循环二阶导数Hessian矩阵的逆。dL/dσi2是关于方差协方差组分的似然一阶倒数向量。Newton-Raphson算法包含了Lee和Van Der Werf (2016)提出的关系矩阵的特征分析,提高了时间效率。方差分量线性组合的流行的标准差估计函数(例如遗传力和遗传相关)也被纳入该包。

    线性模型的优势在于灵活的指定方差、协方差结构。一般来说,混合模型的方差结构可以看作是多重方差协方差结构的张量(kronecker)积。例如,一个多响应模型(例如2个性状),包含g个个体(例如100个)在e个处理(例如3个环境),个体作为随机效应的方差协方差可以表示为下列乘法模型:

    T⨂G⨂A

    T是性状间个体的协方差结构

    G是环境中个体的协方差结构。

    A是一个方形矩阵,表示个体水平之间的协方差(任何已知的关系矩阵)。

    上述T和G矩阵需要估计,而A矩阵已知。T和G叫做非结构化(unstructured, US)矩阵。

    参考,未必是这个意思(结构化矩阵(二维表)是大小固定,取值的类型固定的矩阵,实际指的是(可能和原定义不完全符合)每一列(变量)的取值是固定类型,如年龄,只能取整数数字。非结构化矩阵,指每一列(性状)可能取不确定的类型,即值的类型不同,如长度可能取小数,病害可能取级数,开花期可能取时间等。)

    协方差结构除了上述例子外,还有其他形式:

    对角线(Diagonal,DIAG)协方差结构:实际除了方差外,其他都是0。

    复合对称性(Compound symmetry,CS)协方差结构:貌似加入了互作。

    一阶自回归(First order autoregressive,AR1)协方差结构:

    前面提到过的非结构化的方差结构:

    sommer可以拟合上述协方差结构。

    (1)单变量齐次方差模型

    表型数据的形式为:

    这类模型指的是单个响应变量模型,其中兴趣变量(即基因型)需要分析与第二个随机效应(即环境)的相互作用,但假设基因型跨环境具有相同的方差分量。这就是所谓的复合对称(CS)模型。

    library(sommer)
    data("DT_example")
    DT <- DT_example
    ans1 <- mmer(Yield~Env,
                 random=~Name+Env:Name,
                 rcov=~units,
                 data=DT,
                 verbose=FALSE)
    summary(ans1)
    
    ============================================================
             Multivariate Linear Mixed Model fit by REML         
    **********************  sommer 4.1  ********************** 
    ============================================================
             logLik      AIC      BIC Method Converge
    Value -20.14538 46.29075 55.95182     NR     TRUE
    ============================================================
    Variance-Covariance components:
                         VarComp VarCompSE Zratio Constraint
    Name.Yield-Yield       3.682     1.691  2.177   Positive
    Env:Name.Yield-Yield   5.173     1.495  3.460   Positive
    units.Yield-Yield      4.366     0.647  6.748   Positive
    ============================================================
    Fixed effects:
      Trait      Effect Estimate Std.Error t.value
    1 Yield (Intercept)   16.496    0.6855  24.065
    2 Yield  EnvCA.2012   -5.777    0.7558  -7.643
    3 Yield  EnvCA.2013   -6.380    0.7960  -8.015
    ============================================================
    Groups and observations:
             Yield
    Name        41
    Env:Name   123
    ============================================================
    Use the '$' sign to access results and parameters

    mmer函数是sommer中拟合单变量或多变量混合线性模型的函数。

    logLik(Log-likelihood),说明书中没有写,应该是似然函数取对数的最大值,即最大似然对数函数。

    AIC(Akaike information criterion), 赤池信息量标准。是评估统计模型的复杂度和衡量统计模型“拟合”资料之优良性(英语:Goodness of Fit)的一种标准,是由日本统计学家赤池弘次创立和发展的。赤池信息量准则建立在信息熵的概念基础上。

    一般而言,模型越复杂,模型能解释的点的误差就越小,当然,这是在拟合建模群体时的情况。但是,用另一个测试集来测试,此时,越复杂的点可能误差越大,因为在拟合的时候,模型会把真实情况当作真是情况调整模型,而另外一组真实值,其误差还是误差,此时,复杂的模型很难拟合的很好。从下图看,似然值越小,说明拟合越好。在train的角度,似然值是一直下降的。在test的角度上,有下降、上升的趋势。在AIC角度上也有类似的趋势,因此,AIC作为选择模型的指标,最小值可以得到最优的模型。AIC=2k-2ln(L),这里k是参数的个数,L是似然数。解读过来就是参数不能太少,也不能太多,找到一个平衡点。

    BIC(Bayesian information criterion),贝叶斯信息量准则。是在有限集合中进行模型选择的准则:BIC最低的模型是最好的。该准则部分基于似然函数并与赤池信息量准则(AIC)紧密相关。

    BIC=2k×ln(n)-2ln(L),n是样本数。除了考虑模型参数外,还考虑的样本数。

    拟合模型时,增加参数可提高似然,但如此下去可能导致过拟合。BIC与AIC都致力于向模型中引入关于参数数量的惩罚项;其中,BIC中的惩罚项会大于AIC中的惩罚项。

    Method,方差估计的方法或算法,包括NR(Direct-inversion Newton-Raphson)和AI(Average Information)。

    units是随机误差项。

    zratio貌似是z检验比例?未确定。

    (2)单变量非齐次方差模型

    在多环境实验中,假设跨地点的遗传方差和残差齐次不太合理。因此,指定一个一般的遗传组分和地点特异性遗传方差是一种解决途径。这需要CS+DIAG模型(非齐次CS模型)。

    library(sommer)
    data("DT_example")
    DT <- DT_example
    ans2 <- mmer(Yield~Env,
                 random=~Name+vs(ds(Env),Name),
                 rcov=~ vs(ds(Env),units),
                 data=DT,verbose=FALSE)
    
    ============================================================
             Multivariate Linear Mixed Model fit by REML         
    **********************  sommer 4.1  ********************** 
    ============================================================
             logLik      AIC      BIC Method Converge
    Value -15.42983 36.85965 46.52072     NR     TRUE
    ============================================================
    Variance-Covariance components:
                              VarComp VarCompSE Zratio Constraint
    Name.Yield-Yield            2.963     1.496  1.980   Positive
    CA.2011:Name.Yield-Yield   10.146     4.507  2.251   Positive
    CA.2012:Name.Yield-Yield    1.878     1.870  1.004   Positive
    CA.2013:Name.Yield-Yield    6.629     2.503  2.649   Positive
    CA.2011:units.Yield-Yield   4.942     1.525  3.242   Positive
    CA.2012:units.Yield-Yield   5.725     1.312  4.363   Positive
    CA.2013:units.Yield-Yield   2.560     0.640  4.000   Positive
    ============================================================
    Fixed effects:
      Trait      Effect Estimate Std.Error t.value
    1 Yield (Intercept)   16.508    0.8268  19.965
    2 Yield  EnvCA.2012   -5.817    0.8575  -6.783
    3 Yield  EnvCA.2013   -6.412    0.9356  -6.854
    ============================================================
    Groups and observations:
                 Yield
    Name            41
    CA.2011:Name    41
    CA.2012:Name    41
    CA.2013:Name    41
    ============================================================
    Use the '$' sign to access results and parameters

    如你所见,at和diag函数都能用于表示每个环境的基因型有不同的方差。残差也一样。不同的是,at可以指定用来指定特别的水平或不同方差的环境。

    (3)非结构化模型

    除了上面的 CS+DIAG模型假设外,还假设一个特定的随机效应(如环境)与另一个随机效应(如基因型)有协方差结构。可以用us()函数获得。us是非结构化(unstructured model)的缩写。

    library(sommer)
    data("DT_example")
    DT <- DT_example
    ans3 <- mmer(Yield~Env,
                 random=~vs(us(Env),Name),
                 rcov=~ vs(us(Env),units),
                 data=DT,verbose=FALSE)
    summary(ans3)
    
    ===================================================================
                 Multivariate Linear Mixed Model fit by REML             
    **************************  sommer 4.1  ************************** 
    ===================================================================
             logLik      AIC      BIC Method Converge
    Value -11.49971 28.99943 38.66049     NR     TRUE
    ===================================================================
    Variance-Covariance components:
                                      VarComp VarCompSE Zratio Constraint
    CA.2011:Name.Yield-Yield           15.665    5.4207  2.890   Positive
    CA.2012:CA.2011:Name.Yield-Yield    6.110    2.4851  2.459   Unconstr
    CA.2012:Name.Yield-Yield            4.530    1.8208  2.488   Positive
    CA.2013:CA.2011:Name.Yield-Yield    6.384    3.0659  2.082   Unconstr
    CA.2013:CA.2012:Name.Yield-Yield    0.393    1.5234  0.258   Unconstr
    CA.2013:Name.Yield-Yield            8.597    2.4838  3.461   Positive
    CA.2011:units.Yield-Yield           4.970    1.5323  3.243   Positive
    CA.2012:CA.2011:units.Yield-Yield   4.087    0.0000    Inf   Unconstr
    CA.2012:units.Yield-Yield           5.673    1.3008  4.361   Positive
    CA.2013:CA.2011:units.Yield-Yield   4.087    0.0000    Inf   Unconstr
    CA.2013:CA.2012:units.Yield-Yield   4.087    0.0000    Inf   Unconstr
    CA.2013:units.Yield-Yield           2.557    0.6393  4.000   Positive
    ===================================================================
    Fixed effects:
      Trait      Effect Estimate Std.Error t.value
    1 Yield (Intercept)   16.331    0.8137  20.070
    2 Yield  EnvCA.2012   -5.696    0.7404  -7.693
    3 Yield  EnvCA.2013   -6.271    0.8191  -7.656
    ===================================================================
    Groups and observations:
                         Yield
    CA.2011:Name            41
    CA.2012:CA.2011:Name    82
    CA.2012:Name            41
    CA.2013:CA.2011:Name    82
    CA.2013:CA.2012:Name    82
    CA.2013:Name            41
    ===================================================================
    Use the '$' sign to access results and parameters

    正如我们所见,us(Env)表明,基因型(name)在环境(Env)中有协方差结构。

    (4)多变量齐次方差模型

    多响应变量模型由某些变量隐藏的相关性决定,从预测角度看有作用。在sommer中,指定多变量模型,响应变量需要在响应中使用cbind()函数;而模型的随机部分使用us(trait),diag(trait)或at(trait)。

    library(sommer)
    data("DT_example")
    DT <- DT_example
    DT$EnvName <- paste(DT$Env,DT$Name)
    
    ans4 <- mmer(cbind(Yield,Weight)~Env,
                 random=~vs(Name,Gtc=unsm(2))+vs(EnvName,Gtc=unsm(2)),
                 rcov=~ vs(units,Gtc=unsm(2)),
                 data=DT,verbose=FALSE)
    
    ============================================================
             Multivariate Linear Mixed Model fit by REML         
    **********************  sommer 4.1  ********************** 
    ============================================================
            logLik       AIC       BIC Method Converge
    Value 167.0252 -322.0505 -298.5695     NR     TRUE
    ============================================================
    Variance-Covariance components:
                            VarComp VarCompSE Zratio Constraint
    u:Name.Yield-Yield       3.7089   1.68117  2.206   Positive
    u:Name.Yield-Weight      0.9071   0.37944  2.391   Unconstr
    u:Name.Weight-Weight     0.2243   0.08775  2.557   Positive
    u:EnvName.Yield-Yield    5.0921   1.47879  3.443   Positive
    u:EnvName.Yield-Weight   1.0269   0.30767  3.338   Unconstr
    u:EnvName.Weight-Weight  0.2101   0.06661  3.154   Positive
    u:units.Yield-Yield      4.3837   0.64941  6.750   Positive
    u:units.Yield-Weight     0.9077   0.14145  6.417   Unconstr
    u:units.Weight-Weight    0.2280   0.03377  6.751   Positive
    ============================================================
    Fixed effects:
       Trait      Effect Estimate Std.Error t.value
    1  Yield (Intercept)  16.4093    0.6783  24.191
    2 Weight (Intercept)   0.9806    0.1497   6.550
    3  Yield  EnvCA.2012  -5.6844    0.7474  -7.606
    4 Weight  EnvCA.2012  -1.1846    0.1593  -7.439
    5  Yield  EnvCA.2013  -6.2952    0.7850  -8.019
    6 Weight  EnvCA.2013  -1.3559    0.1681  -8.065
    ============================================================
    Groups and observations:
              Yield Weight
    u:Name       41     41
    u:EnvName    94     94
    ============================================================
    Use the '$' sign to access results and parameters

    可能注意到了,我们在随机效应后面增加了us(trait),这表明应该在多变量模型中假设结构。随机效应(如name)后面的diag(trait)表明性状模型(Yield and Weight)没有协方差组分,不应该被估计,而us(trait)假设随机效应有协方差组分(如随机效应Name的产量和重量的协方差)。残差部分相同。

    (5)多变量非齐次方差模型

    该模型拓展了单变量非齐次方差模型。这是一个CS+DIAG多变量模型。

    library(sommer)
    data("DT_example")
    DT <- DT_example
    DT$EnvName <- paste(DT$Env,DT$Name)
    
    ans5 <- mmer(cbind(Yield,Weight)~Env,
                 random=~vs(Name,Gtc=unsm(2))+vs(ds(Env),Name,Gtc=unsm(2)),
                 rcov=~ vs(ds(Env),units,Gtc=unsm(2)),
                 data=DT,verbose=FALSE)
    summary(ans5)
    
    =============================================================
              Multivariate Linear Mixed Model fit by REML          
    **********************  sommer 4.1  ********************** 
    =============================================================
            logLik       AIC       BIC Method Converge
    Value 177.8154 -343.6308 -320.1497     NR     TRUE
    =============================================================
    Variance-Covariance components:
                                VarComp VarCompSE Zratio Constraint
    u:Name.Yield-Yield          3.31936   1.45269 2.2850   Positive
    u:Name.Yield-Weight         0.79393   0.32621 2.4338   Unconstr
    u:Name.Weight-Weight        0.19085   0.07503 2.5438   Positive
    CA.2011:Name.Yield-Yield    8.70657   4.01470 2.1687   Positive
    CA.2011:Name.Yield-Weight   1.77892   0.83926 2.1196   Unconstr
    CA.2011:Name.Weight-Weight  0.35966   0.17903 2.0089   Positive
    CA.2012:Name.Yield-Yield    2.57109   1.94951 1.3188   Positive
    CA.2012:Name.Yield-Weight   0.33245   0.39840 0.8345   Unconstr
    CA.2012:Name.Weight-Weight  0.03842   0.08595 0.4470   Positive
    CA.2013:Name.Yield-Yield    5.46908   2.16307 2.5284   Positive
    CA.2013:Name.Yield-Weight   1.34713   0.50479 2.6687   Unconstr
    CA.2013:Name.Weight-Weight  0.32902   0.12208 2.6952   Positive
    CA.2011:units.Yield-Yield   4.93852   1.52318 3.2422   Positive
    CA.2011:units.Yield-Weight  0.99447   0.32150 3.0932   Unconstr
    CA.2011:units.Weight-Weight 0.23982   0.07394 3.2433   Positive
    CA.2012:units.Yield-Yield   5.73887   1.31533 4.3631   Positive
    CA.2012:units.Yield-Weight  1.28009   0.30157 4.2448   Unconstr
    CA.2012:units.Weight-Weight 0.31806   0.07286 4.3652   Positive
    CA.2013:units.Yield-Yield   2.56127   0.63993 4.0024   Positive
    CA.2013:units.Yield-Weight  0.44569   0.12645 3.5246   Unconstr
    CA.2013:units.Weight-Weight 0.12232   0.03057 4.0009   Positive
    =============================================================
    Fixed effects:
       Trait      Effect Estimate Std.Error t.value
    1  Yield (Intercept)  16.4243    0.7891  20.815
    2 Weight (Intercept)   0.9866    0.1683   5.863
    3  Yield  EnvCA.2012  -5.7339    0.8266  -6.937
    4 Weight  EnvCA.2012  -1.1998    0.1698  -7.066
    5  Yield  EnvCA.2013  -6.3128    0.8757  -7.209
    6 Weight  EnvCA.2013  -1.3621    0.1915  -7.114
    =============================================================
    Groups and observations:
                 Yield Weight
    u:Name          41     41
    CA.2011:Name    41     41
    CA.2012:Name    41     41
    CA.2013:Name    41     41
    =============================================================
    Use the '$' sign to access results and parameters

    (6)多变量非结构化方差模型

    模型是单变量非结构化方差模型的拓展,是一个us多变量模型。

    library(sommer)
    data("DT_example")
    DT <- DT_example
    DT$EnvName <- paste(DT$Env,DT$Name)
    
    ans6 <- mmer(cbind(Yield,Weight)~Env,
                 random=~vs(us(Env),Name,Gtc=unsm(2)),
                 rcov=~ vs(ds(Env),units,Gtc=unsm(2)),
                 data=DT,verbose=FALSE)
    
    ====================================================================
                 Multivariate Linear Mixed Model fit by REML             
    **************************  sommer 4.1  ************************** 
    ====================================================================
            logLik       AIC       BIC Method Converge
    Value 181.7945 -351.5889 -328.1079     NR     TRUE
    ====================================================================
    Variance-Covariance components:
                                       VarComp VarCompSE Zratio Constraint
    CA.2011:Name.Yield-Yield           15.6451   5.35692  2.921   Positive
    CA.2011:Name.Yield-Weight           3.3586   1.14633  2.930   Unconstr
    CA.2011:Name.Weight-Weight          0.7182   0.24871  2.888   Positive
    CA.2012:CA.2011:Name.Yield-Yield    6.5289   2.48615  2.626   Positive
    CA.2012:CA.2011:Name.Yield-Weight   1.3505   0.52388  2.578   Unconstr
    CA.2012:CA.2011:Name.Weight-Weight  0.2842   0.11259  2.524   Positive
    CA.2012:Name.Yield-Yield            4.7893   1.86183  2.572   Positive
    CA.2012:Name.Yield-Weight           0.8640   0.38377  2.251   Unconstr
    CA.2012:Name.Weight-Weight          0.1693   0.08354  2.027   Positive
    CA.2013:CA.2011:Name.Yield-Yield    5.9934   2.93830  2.040   Positive
    CA.2013:CA.2011:Name.Yield-Weight   1.4232   0.64973  2.190   Unconstr
    CA.2013:CA.2011:Name.Weight-Weight  0.3379   0.14680  2.302   Positive
    CA.2013:CA.2012:Name.Yield-Yield    2.0987   1.44034  1.457   Positive
    CA.2013:CA.2012:Name.Yield-Weight   0.5240   0.32356  1.619   Unconstr
    CA.2013:CA.2012:Name.Weight-Weight  0.1342   0.07572  1.772   Positive
    CA.2013:Name.Yield-Yield            8.6257   2.47811  3.481   Positive
    CA.2013:Name.Yield-Weight           2.1048   0.58748  3.583   Unconstr
    CA.2013:Name.Weight-Weight          0.5125   0.14285  3.588   Positive
    CA.2011:units.Yield-Yield           4.9516   1.52694  3.243   Positive
    CA.2011:units.Yield-Weight          0.9993   0.32286  3.095   Unconstr
    CA.2011:units.Weight-Weight         0.2411   0.07432  3.244   Positive
    CA.2012:units.Yield-Yield           5.7790   1.32423  4.364   Positive
    CA.2012:units.Yield-Weight          1.2914   0.30408  4.247   Unconstr
    CA.2012:units.Weight-Weight         0.3212   0.07356  4.366   Positive
    CA.2013:units.Yield-Yield           2.5567   0.63883  4.002   Positive
    CA.2013:units.Yield-Weight          0.4452   0.12631  3.524   Unconstr
    CA.2013:units.Weight-Weight         0.1223   0.03056  4.001   Positive
    ====================================================================
    Fixed effects:
       Trait      Effect Estimate Std.Error t.value
    1  Yield (Intercept)  16.3342    0.8254  19.790
    2 Weight (Intercept)   0.9677    0.1770   5.466
    3  Yield  EnvCA.2012  -5.6637    0.7449  -7.604
    4 Weight  EnvCA.2012  -1.1855    0.1604  -7.390
    5  Yield  EnvCA.2013  -6.2153    0.8340  -7.453
    6 Weight  EnvCA.2013  -1.3406    0.1806  -7.425
    ====================================================================
    Groups and observations:
                         Yield Weight
    CA.2011:Name            41     41
    CA.2012:CA.2011:Name    82     82
    CA.2012:Name            41     41
    CA.2013:CA.2011:Name    82     82
    CA.2013:CA.2012:Name    82     82
    CA.2013:Name            41     41
    ====================================================================
    Use the '$' sign to access results and parameters

    任何随机效应都可以指定不同的结构。

    (7)方差模型特殊函数的细节

    方差模型主函数vs()和辅助函数

    sommer的函数vs()允许构建复杂的方差模型并传递给mmer()函数。vs()函数的格式如下:

    random=~vs(..., Gu, Gti, Gtc)
    

    这表示,vs()函数反映了矩阵中每个随机效应可能有特别的方差结构。

    var(u)=T⊗E⊗…⊗A

    这里,…表示vs()函数的参数,用来指定随机效应方差矩阵的keronecker products乘积。辅助函数ds()、us()、cs()、at()可用于定义这些方差结构。因为,随机变量x(如个体)的方差模型可能需要更加灵活,且参数不应只有一个:

    random=~x

    ~被读作预测,~x表示用x预测。

    例如,如果个体在不同的时间点或环境下测试,我们可以假设在不同的环境-时间点组合中,个体间有不同的方差和协方差组分。例如:

    var(u)=T⊗E⊗S⊗A

    可以在vs()函数中指定:

    random=~vs(us(e),us(s),x,Gu=A,Gtc=T)
    

    这里,e是数据框中环境的列向量,s是数据框中时间点的列向量,x是数据框中个体的向量,A是个体间已知的方差协方差矩阵(通常是一个单位矩阵;默认不指定),T是协方差矩阵且行和列的数量等于性状的数量。

    为随机效应构建协方差模型的辅助函数是+ds()对角线协方差结构+us()非结构化协方差+at()是指定水平的非齐次方差结构+cs()自定义协方差结构。

    ds()指定对角线(DIAG)协方差结构

    对角线协方差结构类似下面的形式:

    考虑一个随机效应的例子,g为个体,在e个环境中测定,模型则为:

    random=~vs(ds(e),g)
    

    其意义是用向量g与对角线方差矩阵e的张量积做预测。

    us()指定非结构化协方差

    非结构化协方差表示如下:

    考虑相同的例子,个体在环境中的模型为:

    random=~vs(us(e),g)
    

    at()用来指定特殊水平的非齐次方差

    第二随机效应(方差和协方差)的个对角线协方差结构是这样个样子的:

    还是之前的例子,g是个体,有ABC三个处理(环境),则模型可能是:

    random=~vs(at(e,c("A","B")),g)
    

    这里方差组分只为g拟合水平A和B。

    cs()指定水平的方差协方差结构

    第二个随机变量的自定义协方差结构可能形式如下:

    依然用之前的例子,g是个体,e是三个处理(环境)A、B、C,模型可能是:

    random=~vs(cs(e,mm),g)
    

    这里mm表明为g估计的方差和协方差组分。

    (8)方差组分的约束规则(Gtc参数)

    sommer的一大优势是在多性状框架下能够非常灵活的指定方差协方差结构。sommer 3.7版后可以非常容易的通过vs()和Gtc参数实现。Gtc通过以下填充数字,用于随机效应方差协方差组分的约束矩阵的预测。

    0:不顾及参数

    1:有约束的估计

    2:无约束的估计

    3:不估计,但是在Gti中提供固定值

    unsm()用来快速指定非结构化的约束矩阵,fixm()用于固定值约束,fcm()用于固定效应约束。

    考虑到4个性状的(y1,y2,y3,y4)多性状模型,一个随机效应(u)和1个固定效应x

    fixed=cbind(y1,y2,y3,y4)~x
    random=~vs(u,Gtc=?)
    

    4×4的方差协方差组分估计的约束可以被估计为:

    (a)非结构化(方差组分必须是正值,协方差可正可负)

    random=~vs(u,Gtc=unsm(4))
    unsm(4)
    
         [,1] [,2] [,3] [,4]
    [1,]    1    2    2    2
    [2,]    2    1    2    2
    [3,]    2    2    1    2
    [4,]    2    2    2    1

    (b)非协方差(任意组分方差或协方差可以正或负)

    random=~vs(u,Gtc=uncm(4))
    uncm(4)
    
         [,1] [,2] [,3] [,4]
    [1,]    2    2    2    2
    [2,]    2    2    2    2
    [3,]    2    2    2    2
    [4,]    2    2    2    2

    (c)固定值(方差或协方差组分表明3被作为固定值)

    random=~vs(u,Gtc=fixm(4),Gti=mm)
    fixm(4)
    
         [,1] [,2] [,3] [,4]
    [1,]    3    3    3    3
    [2,]    3    3    3    3
    [3,]    3    3    3    3
    [4,]    3    3    3    3

    这里mm是4×4的矩阵,该矩阵具有方差分量的初始值。

    (d)考虑固定效应

    fixed=cbind(y1,y2,y3,y4)~vs(x,Gtc=fcm(c(1,0,1,0)))
    fcm(c(1,0,1,0))
    
         [,1] [,2]
    [1,]    1    0
    [2,]    0    0
    [3,]    0    1
    [4,]    0    0

    这里1和0表示性状,固定效应1被估计0不估计。

    (9)特殊模型的特殊函数

    随机回归模型

    拟合随机回归模型,用户可以使用leg()函数拟合Legendre polynomials多项式。这可以用其他协方差结构,如ds()和us()等。

    library(orthopolynom)
    data(DT_legendre)
    DT <- DT_legendre
    mRR2<-mmer(Y~ 1 + Xf,
               random=~ vs(us(leg(X,1)),SUBJECT),
               rcov=~vs(units),
               data=DT, verbose = FALSE)
    summary(mRR2)$varcomp
    
                            VarComp VarCompSE   Zratio Constraint
    leg0:SUBJECT.Y-Y      2.5782969 0.6717242 3.838326   Positive
    leg1:leg0:SUBJECT.Y-Y 0.4765431 0.2394975 1.989763   Unconstr
    leg1:SUBJECT.Y-Y      0.3497299 0.2183229 1.601893   Positive
    u:units.Y-Y           2.6912226 0.3825197 7.035513   Positive

    这里,协方差X用于解释主体的轨迹,结合了一个非结构化的协方差矩阵。细节可以查看理论。

    GWAS模型

    尽管基因组相关分析可以考虑通过各种方法,混合模型仍然是最流行的,我们采用这个方法。最流行和经典的两个方法,第一个通过标记混合建模,获得标记效应,提供p值-log10。第二个假设所有标记的遗传方差组分相似,因此,方差组分只被估计一次,在一般线性模型中使用表型方差矩阵的倒数(V-inverse)测试所有标记,b=(X’V-X)-XV-y。此时的GWAS更快更高效。sommer提供直接的拓展,GWAS函数可以拟合以上两种方法。库中已经有很多类似的方法。sommer中获得标记效应的一般线性模型的形式是:

    b=(X’V-X)X’V-y

    X=ZMi

    这里,b是标记效应(维度1×mt),y是响应变量(单或多变量)(维度1×nt),V是表型方差矩阵的逆(维度nt×nt),Z是随机效应选择的关系矩阵,用来执行GWAS(维度nt×ut),Mi是标记矩阵(M参数)第i列(维度u×m)。

    t是性状数量,n是观测值数量,m是标记数量,u是随机效应水平数量。如果P3D=TRUE,计算一次V矩阵并用于所有的标记测试;FALSE,每个标记使用REML估计。

    这里我们展示一个简单的GWAS模型,单个性状:

    data(DT_cpdata)
    DT <- DT_cpdata
    GT <- GT_cpdata
    MP <- MP_cpdata
    #### create the variance-covariance matrix
    A <- A.mat(GT) # additive relationship matrix
    #### look at the data and fit the model
    head(DT,3)
    
           id Row Col Year      color  Yield FruitAver Firmness Rowf Colf
    P003 P003   3   1 2014 0.10075269 154.67     41.93  588.917    3    1
    P004 P004   4   1 2014 0.13891940 186.77     58.79  640.031    4    1
    P005 P005   5   1 2014 0.08681502  80.21     48.16  671.523    5    1
    head(MP,3)
    
                    Locus Position Chrom
    1  scaffold_77830_839        0     1
    2  scaffold_39187_895        0     1
    3 scaffold_50439_2379        0     1
    GT[1:3,1:4]
    
         scaffold_50439_2381 scaffold_39344_153 uneak_3436043 uneak_2632033
    P003                   0                  0             0             1
    P004                   0                  0             0             1
    P005                   0                 -1             0             1
    mix1 <- GWAS(color~1,
                 random=~vs(id,Gu=A)
                 + Rowf + Colf,
                 rcov=~units,
                 data=DT,
                 M=GT, gTerm = "u:id",
                 verbose = FALSE)
    ## Performing GWAS evaluation
    ms <- as.data.frame(mix1$scores)
    ms$Locus <- rownames(ms)
    MP2 <- merge(MP,ms,by="Locus",all.x = TRUE);
    manhattan(MP2, pch=20,cex=.5, PVCN = "color")
    

    需要注意,标记矩阵M必须补缺(不允许缺失值)。确保M矩阵中的行数等于g项,如id有300个个体,M矩阵为有300×m,m是标记数量。

    叠加模型[overlay()函数]

    overlay()叠加不同随机效应的矩阵,估计叠加项的单个方差组分。

    data("DT_halfdiallel")
    DT <- DT_halfdiallel
    head(DT)
    
      rep geno male female     sugar
    1   1   12    1      2 13.950509
    2   2   12    1      2  9.756918
    3   1   13    1      3 13.906355
    4   2   13    1      3  9.119455
    5   1   14    1      4  5.174483
    6   2   14    1      4  8.452221
    DT$femalef <- as.factor(DT$female)
    DT$malef <- as.factor(DT$male)
    DT$genof <- as.factor(DT$geno)
    #### model using overlay
    modh <- mmer(sugar~1,
                 random=~vs(overlay(femalef,malef))
                 + genof,
                 data=DT,verbose = FALSE)
    

    这里,famalef和malef随机效应被叠加,变成了单个随机效应,具有相同的方差组分。

    空间模型(使用二维条线)

    在田间实验设计中,使用CPdata展示3维条线的使用,用于适应田间设计的空间效应。早期的各种试验,可用的种子很少,因此,需要使用非重复的设计。实验设计例如增强设计和部分重复设计(p-rep)现在非常流行。

    适应空间趋势,田间空间协方差矩阵被提出(即自回归残差;arl)。不幸的是,这些协方差矩阵使得模型非常不稳定。最近,其他研究组提出了使用2维空间去克服上述问题,空间项建模更强大。

    下面的例子,我们假设没有重复的群体,row和range信息可用,允许拟合2维条线模型。

    data(DT_cpdata)
    DT <- DT_cpdata
    GT <- GT_cpdata
    MP <- MP_cpdata
    ### mimic two fields
    A <- A.mat(GT)
    mix <- mmer(Yield~1,
                random=~vs(id, Gu=A) +
                  vs(Rowf) +
                  vs(Colf) +
                  vs(spl2D(Row,Col)),
                rcov=~vs(units),
                data=DT,verbose = FALSE)
    summary(mix)
    
    ============================================================
             Multivariate Linear Mixed Model fit by REML         
    **********************  sommer 4.1  ********************** 
    ============================================================
             logLik      AIC      BIC Method Converge
    Value -151.2011 304.4021 308.2938     NR     TRUE
    ============================================================
    Variance-Covariance components:
                        VarComp VarCompSE Zratio Constraint
    u:id.Yield-Yield      783.4     319.3 2.4536   Positive
    u:Rowf.Yield-Yield    814.7     390.5 2.0863   Positive
    u:Colf.Yield-Yield    182.2     129.7 1.4053   Positive
    u:Row.Yield-Yield     513.6     694.7 0.7393   Positive
    u:units.Yield-Yield  2922.6     294.1 9.9368   Positive
    ============================================================
    Fixed effects:
      Trait      Effect Estimate Std.Error t.value
    1 Yield (Intercept)    132.1     8.791   15.03
    ============================================================
    Groups and observations:
           Yield
    u:id     363
    u:Rowf    13
    u:Colf    36
    u:Row    168
    ============================================================
    Use the '$' sign to access results and parameters

    GT矩阵作为随机效应被封装在一个列表中,在vs()中使用。

    (10)全基因组选择

    你可以用rrBLUP和GBLUP模型拟合。本例子在群体中指定个体。基本形式为:

    利用已知的基因型效应方差协方差矩阵作为加性关系矩阵(A),使用A.met函数建立所有个体的联系,并预测未测定个体的BLUP。本例中,标记矩阵是随机效应,标记的关系也可以被指定,但是在这里假设是一个对角线矩阵。

    data(DT_wheat)
    DT <- DT_wheat
    GT <- GT_wheat
    colnames(DT) <- paste0("X",1:ncol(DT))
    DT <- as.data.frame(DT);DT$id <- as.factor(rownames(DT))
    # select environment 1
    rownames(GT) <- rownames(DT)
    K <- A.mat(GT) # additive relationship matrix
    colnames(K) <- rownames(K) <- rownames(DT)
    # GBLUP pedigree-based approach
    set.seed(12345)
    y.trn <- DT
    vv <- sample(rownames(DT),round(nrow(DT)/5))
    y.trn[vv,"X1"] <- NA
    ## GBLUP
    ans <- mmer(X1~1,
                random=~vs(id,Gu=K),
                rcov=~units,
                data=y.trn,verbose = FALSE) # kinship based
    ans$U$`u:id`$X1 <- as.data.frame(ans$U$`u:id`$X1)
    rownames(ans$U$`u:id`$X1) <- gsub("id","",rownames(ans$U$`u:id`$X1))
    cor(ans$U$`u:id`$X1[vv,],DT[vv,"X1"], use="complete")
    
    [1] 0.5737594
    
    ## rrBLUP
    ans2 <- mmer(X1~1,
                 random=~vs(list(GT)),
                 rcov=~units,
                 data=y.trn,verbose = FALSE) # kinship based
    u <- GT %*% as.matrix(ans2$U$`u:GT`$X1) # BLUPs for individuals
    rownames(u) <- rownames(GT)
    cor(u[vv,],DT[vv,"X1"]) # same correlation
    # the same can be applied in multi-response models in GBLUP or rrBLUP
    
    [1] 0.5737594

    ~1的1表示截距,基本公式为y=C+ε,即常数。

    (11)似然比测试

    似然比测试(LRT)是调查随机效应或特定方差协方差组分显著性的方式。

    (11.1)方差组分显著性测试

    例如,想象研究的模型在加入了空间内核效应后改善了,那么模型可能是:

    data(DT_cpdata)
    DT <- DT_cpdata
    GT <- GT_cpdata
    MP <- MP_cpdata
    ### mimic two fields
    A <- A.mat(GT)
    mix1 <- mmer(Yield~1,
                 random=~vs(id, Gu=A) +
                   vs(Rowf) +
                   vs(Colf),
                 rcov=~vs(units),
                 data=DT, verbose = FALSE)
    

    带有空间内核的模型为:

    mix2 <- mmer(Yield~1,
                 random=~vs(id, Gu=A) +
                   vs(Rowf) +
                   vs(Colf) +
                   vs(spl2D(Row,Col)),
                 rcov=~vs(units),
                 data=DT,verbose = FALSE)
    

    似然比测试,检测第二个模型:

    lrt <- anova(mix1, mix2)
    
    Likelihood ratio test for mixed models
    ==============================================================
         Df      AIC      BIC     loLik   Chisq ChiDf  PrChisq
    mod2  8 304.4021 308.2938 -151.2011                       
    mod1  7 305.0477 308.9393 -151.5238 0.64554     1 0.42171 
    ==============================================================
    Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

    似然值增加了,不显著。

    (11.2)测试协方差组分的显著性

    有些时候,研究人员对协方差结构是否感相关感兴趣。假设我们有两个多性状模型,1)拟合非协方差(独立),2)拟合群体中产量和颜色的遗传协方差:

    data(DT_example)
    DT <- DT_example
    DT$EnvName <- paste(DT$Env,DT$Name)
    modelBase <- mmer(cbind(Yield, Weight) ~ Env,
                      random= ~ vs(Name, Gtc=diag(2)), # here is diag()
                      rcov= ~ vs(units, Gtc=unsm(2)),
                      data=DT,verbose = FALSE)
    modelCov <- mmer(cbind(Yield, Weight) ~ Env,
                     random= ~ vs(us(Env),Name, Gtc=unsm(2)), # here is unsm()
                     rcov= ~ vs(ds(Env),units, Gtc=unsm(2)),
                     data=DT,verbose = FALSE)
    lrt <- anova(modelBase, modelCov)
    
    Likelihood ratio test for mixed models
    ==============================================================
         Df       AIC       BIC    loLik    Chisq ChiDf                 PrChisq
    mod2 45 -351.5889 -328.1079 181.7945                                       
    mod1 23 -253.4383 -229.9573 132.7192 98.15058    22 1.3552747104066e-11 ***
    ==============================================================
    Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

    基因型的协方差显著改善了拟合,卡方分布小于0.05。带有协方差的模型更适合。

  • 【新闻报道】参与外交部拉丁美洲活动

    外交部拉丁美洲和加勒比司举办题为#此心安处是吾乡-我在国外过大年#的主题活动。我们的作品《CIMMYT过大年》被选中播放。

    不给祖国添乱,疫情期间就地过年,访学的我们放弃回家过年的念头,在墨西哥过年!

    查看视频】需要登录微博后查看

  • 一次长期耳鸣的经历

    这次耳鸣,严格意义上我也不知道是否应该叫做耳鸣。不知道是神经性耳鸣、中耳炎、耳膜塌陷、颈椎病、耳膜穿孔还是咽鼓管发炎。应该和长期熬夜和带耳机有关。

    除夕之前,晚上睡觉时,我右侧耳朵总能感到震动,尤其是右边耳朵向上的时候,当时没在意,以为就是累了,翻个身,换个姿势就听不到了。

    【2021年2月15日】

    声音变强、频率更密,有点像打鼓的声音,感觉耳膜在震动。晚上开始影响睡眠。白天基本感觉不到。

    【2021年2月16日】

    白天也能感觉的耳膜在震动。晚上的时候感觉更加剧烈,虽然不疼,但是很难入睡。非常害怕是耳膜穿孔或者中耳炎。

    【2021年2月17日】

    症状并没有明显减轻,想去医院,又怕疫情,跟老妈通了电话,可能是长期熬夜和长时间带耳机引起的神经性耳鸣,因此,避免晚睡,改善心情,增加体育锻炼,大量喝水,也没有带耳机,但是未见缓解,睡觉早,很困却睡不着,半夜1点左右下载了一个APP检测睡眠,从结果上看睡眠质量还行(手机放在床头,不一定准确),睡了6.5小时。动作少的原因是平躺时候稍微缓和耳内的震动感,基本没有翻身。

    【2021年2月18日】

    早上醒来比较早,7点多,APP显示有6.5小时睡眠,但实际上我有多次清醒。晚上,稍有好转,平躺有一段时间听不到震动的声音了,但是侧身依然能听到;10点多的时候,震动的声音突然加强,辗转反侧,1点多的时候再次打开了睡眠监测APP,凌晨2点,下楼吃了一个苹果,上个厕所后,稍有好转(原因不明,就算吃药也不应该见效这么快,推测可能缺乏维生素),但依然睡不着,感觉一夜都没怎么睡。

    【2021年2月19日】

    早上,大约8点多的时候耳朵震动有所好转,睡了一会,起来后忙吃了早饭就匆匆出去买药和水果,怕症状恶化。左耳贴枕头,右耳震动最强烈;右耳贴枕头,震动感觉不强,但不明原因睡不着;感觉右耳比左耳内部温度高;较少感觉到针轻轻扎一样的轻微刺痛,绝大多数时间能感觉到不适,但是不疼。害怕是有什么东西接触耳膜在导致震动,刺破的时候轻微刺痛。下午,任姣姣看了下耳朵,说里面有化脓。吃了一片罗红霉素(第一天)。后来发现是耳屎,清理耳屎时,觉得耳朵堵住了,又清理一下通了。晚间,吃了维生素B1B2B12药片。睡觉时,依然能听到震动,手机放英语,可能由于前一天睡得太少,睡着了。白天吃了很多水果,喝了很多茶。

    【2021年2月20日】

    查看APP,睡了9个多小时。白天几乎没有感觉到耳膜震动。吃了水果和维生素,喝了茶,跑了1.3公里。中午睡了两个小时。晚间依然能听到震动,每次持续时间不长。但是有些许疼痛感,不强烈,觉得右侧耳道内有些许不适感,好像耳膜形状在改变。人在国外有疫情不敢去医院,网上联系国内耳鼻喉医生,初步诊断是咽鼓管功能不良,或神经性耳鸣、突发性耳聋。还是害怕,吃了罗红霉素片(第二天),因为感觉右侧耳朵内温度高,怀疑有炎症。捏住鼻子呼气,右侧耳朵声音小。已经吃了一次,若停药可能会有抗药性。

    【2021年2月21日】

    早上起来觉得比较冷。中午吃了熏肉、苹果、李子、白菜、萝卜,喝了茶。中午感觉到耳朵震动,原因不明,除了最严重那几天,平时中午感觉不到震动。可能跟饭前吃了金银花含片有关,也可能跟瞿放了较大声音的音乐有关。测量体温,36.6℃。牙齿咬上嘴唇,右耳刺痛,不强烈,数秒后消失,再咬无痛感。玉博姐在阳光下看了,耳朵里面有白点,滴了几滴滴耳液,有麻麻的感觉。继续吃罗红霉素(第三天)。晚上又滴了滴耳液。睡觉时震动明显。夜里很难睡着,耳朵震动比较剧烈。大约2点左右入眠。

    【2021年2月22日】

    早上7点要开会,6点多醒来,上了厕所继续睡,睡不着。头上半部分枕着枕头,耳朵空出来向下稍有好转,可能小睡了一会。早上接完保姆,未感觉到震动。在ZOOM上网上问诊墨西哥当地大夫,张老师、Lily帮忙翻译,说是口腔和耳朵相连的一个位置的阀门(可能指的是咽鼓管)关闭了,让吃药,开了一个口服,两个喷鼻子的,早晚各一次。一个药中文名为鼻福灵(Afrin Lub),功能为舒缓因伤风、花粉症或其他上呼吸道过敏症引致的鼻腔和鼻咽充血,亦适用于鼻腔检查或鼻腔手术前配合鼻腔棉塞使用。晚上大约7点半吃的药,随后半个多小时喷鼻子。睡觉时,鼻子很难受,有鼻涕,很困。

    【2021年2月23日】

    大约7点半醒来,关了APP继续睡觉,9点左右醒来,吃药喷鼻子。中午1点,本打算小睡一会,半个小时左右醒了一次,但是起不来,很困,接着睡,三点多醒来。Lometopan没找到中文的对应药物,治疗季节性过敏或多年生变应性鼻炎的症状。对于具有季节性过敏性鼻炎症状的中度至重度病史的患者,可以在花粉季节开始前的四个星期开始使用Lometopan鼻喷剂进行预防性治疗。Lometopan鼻腔喷雾剂适用于对18岁以上成人的鼻息肉进行对症治疗。墨西哥药Celestamine NS是氯雷他定/倍他米松的复合制剂,是治疗过敏和消炎药物。可能大夫认为我是过敏,或者这类药物能够帮助打开阀门。但是,现在并没有到开花的季节,也没有接触什么容易引起过敏的东西。 晚上睡觉比较容易入睡。

    【2021年2月24日】

    睡得很好,早上起来,感觉耳朵还是有震动感。捏住鼻子呼气,右侧耳朵隆隆声较小,有些痒,有欻欻声。吃了药后有所缓解。吃过午饭后,右耳朵隆隆生趋于正常,但是声音比左耳小。

    【2021年2月25日-3月4日】

    有所缓解。右侧耳朵可能时而有心跳声。感觉确实有所缓解,睡觉的时候感觉不到,但是起来以后能明显感觉到震动,尤其是午睡过后,但起来活动一下,基本就没什么感觉。

    【2021年3月5日】

    觉得比以前感觉强烈了,晚上睡觉的时候能够感觉到震动,可能因为吃了羊肉的关系。晚上睡觉听着视频的声音睡觉的,大约一点多睡着。

    【2021年3月6日】

    大概睡了7个小时,早上起来,能明显感觉到震动。午睡过后,震动感觉强烈,今天是感觉最严重的一天。起来坐一会,稍有缓解。不知道是否与吃了烤羊肉串有关。

    【2021年3月7日】

    早上醒来,还是觉得耳朵里面有震动感,起来活动活动,基本感觉不到。

    【2021年3月8日】

    晚上的时候能够感觉到震动,下颚左右摇晃能听到类似“研米粒”的声音,但是过段时间,觉得震动感觉缓解,但是有点发痒。

    【2021年3月9日】

    早上起来,觉得震动感不强。晚上约8点,有轻微刺痛感,但是过了一会就没有了。

    【2021年3月10日】

    整天都感觉不错,经过时常左右晃动下颚,晚上也听不到声音了。但是有发痒的感觉。

    【2021年3月11日】

    早上4点多就醒了,然后很长时间睡不着。一般情况下,不会起夜,尤其是4点多的时候。好像能感觉到耳朵不舒服,但是不疼,尝试去感觉左边的耳朵,几乎感觉不到,但是右边的耳朵总有感觉,不是疼,不是痒,很难描述。晚上睡觉,放着相声,具体几点记不清了,突然感觉耳朵开始震动,而且觉得是比较严重的情况。下颚左右摇动也没有缓解。

    【2021年3月12日】

    早上依然是4点多醒了,还是震,直到5点多,翻了很多个身,平躺,突然觉得不振了,有一种前所未有的舒服感,很奇特。9点左右起床。

    【2021年3月13、14日】

    这两天,震动都比较强,尤其半夜4点醒来,有震感,但是翻几次身,就会减轻。这两天吃了咖喱鸡,要改基金睡得比较晚。

    【2021年3月15、16日】

    睡眠质量有所提高,但是依然能感觉到震动感。每天增加了体育锻炼,喝水,吃维生素。晚上睡觉的时候多次翻身或该换知识,有时感觉不到震动,但是能隐约听到啪啪的声音。

    【2021年3月17日】

    去看了墨西哥医生,检查了听力和耳膜。听力异于常人的好,说明这个病没有影响到听力。但是耳膜的震动范围非常窄,已经几乎到了正常水平的临界值。据大夫介绍,耳朵疾病无非几个,外耳道、听小骨、咽鼓管、听觉神经、还有一个和鼻子连接的部分记不住了。听力很好,说明听觉神经没有受损,排除。听小鼓我听大夫的意思是基本上没有碰撞等也不会有问题。外耳道大夫检查了,说是没问题。最有可能的是咽部和鼻子影响了耳膜,导致可以听到身体内部的声音。咽部没问题,左鼻孔好像有以前被撞击的情况。另一个可能是原因是胃,胃反经常向上气,可能会导致咽鼓管闭合,从而影响耳膜。这次,开了三盒药(饭前吃,说是管胃的),还打了一针。上次开的喷鼻子的药物依然使用,这次使用的时间较长。

    【2021年3月18日】

    吃了药,睡眠好像好了许多,睡不着的时候明显减少,经常性的犯困。感到震动的情况有所好转。

    【2021年3月19、20日】

    除了按时间吃药,其他的没有什么特别的,震动感越来越弱,但是一张嘴就能听到两侧耳朵里面有类似“碾米”的声音。咀嚼时,能听到咔咔圣。打嗝或者反气次数很多,以前不知道是没有注意到还是没有这么多,现在感觉这种情况非常多。

    【2021年3月21日】

    打了新冠疫苗,晚上睡觉的时候感觉震动很强烈,基本到了吃药前的水平。半夜3次排尿,而且量很大,平时晚上睡觉都不起夜。

    【2021年3月22日】

    早上起来,觉得并没有很强的震动感,由于要去接保姆,没有太长时间去感受。中午睡了一觉,大约一个小时,起来依然还是觉得困,整天都觉得困。

    【2021年3月23日】

    早上大约7点起来,上了个厕所。敲击键盘的时候,耳朵会跟着震动,或者一些尖锐的声音出现,就会感觉到右侧耳朵的震动。隐约感觉到右侧耳朵的耳后下面的颚骨有些许不适。听到较大声响时,如敲桌子(实际声音不是很大),能明显感觉到右耳内震动,震动次数与敲击次数相同,发生时间慢于敲击。晚上睡觉时,只感觉到及少量的震动感,但能听到“叮——”的耳鸣声音。

    【2021年3月24日】

    半夜三点多上厕所,室友突发胃痛、恶心,去买了药,回来没有缓解。由于我在夜间睡眠较少,中午补了一觉,大概2个小时。并未觉得有明显不适。感觉并没有什么特别的感受。

    【2021年3月25日】

    今天整天都觉得不错,没有感觉到震动。

    【2021年3月26日】

    昨天晚上忘了喷鼻子,今天早上觉得耳朵有明显的震动感,喷了鼻子后很快缓解。

    【2021年6月3日】

    时间已经很久了,休息不好的时候偶尔还会感觉到震动敢,但大多感觉到的是心跳声。可能没有办法根治了,注意休息。晚上多吃一点。