作者: Zhang Ao

  • 统计分析的基础——数据的产生

    数据分析是非常热门的领域,掌握数据分析方法、技术和手段,就必须要有数据。作为分析的原料,我们需要先获得数据才能进行分析。研究中,通常先要产生数据。产生数据的方法主要有观察法和实验法。观察法对被观测者的影响最小,这很重要,被观测者受到的影响越小其表现出来的结果越真实。比如,观察人眼睛的颜色,观察叶片病斑的面积等。实验法是另一种生成数据的方法,在实验中,要严格控制条件,精确测量。实验通常需要做至少两类观测,即无影响(对照)观测和有影响(处理)观测,这样才能保证没有其他因素的干扰。需要注意的是,大多数情况,处理以及观测之间都有相互作用,会影响结果的可靠性。很不幸,研究中所关注的个体都很复杂,只能降低互作,无法消除。比如植物中,纯合的10个材料,在干旱和正常条件下种植,每一株都不可能完全相同,造成这个的差异就是相互作用,到底是什么引起了互作,很难弄清,因此尽量保证每一株材料的条件相同,减少互作的影响。人类是非常复杂的生物,研究人类的难度要远远高于植物,植物在使用药物的时候通常都有效果,而人却有安慰剂效应,通过强大的心理作用起到服用药物的作用,因此,有时通过双盲实验做研究,即医生和患者都不知道使用的药物是真的药物还是糖丸儿。

  • DeepGS中文说明

    原版更新:2018.06.08 翻译更新:2022.05.11

    翻译 刘翼宁、张敖

    题目 使用深度学习从表型预测基因型

    版本 1.2(注:最新版本为1.2)

    作者 Chuang Ma, Zhixu Qiu, Qian Cheng and Wenlong Ma

    维护 Zhixu Qiu zhixuqiu2015@gmail.com, Chuang Ma

    chuangma2006@gmail.com

    描述 名为‘DeepGS’的R包可以执行全基因组选择(Genomic selection,GS),GS在动植物育种中前途光明。 DeepGS使用整个基因组的全部分子标记结合先进的机器学习技术(深度学习)预测表型。DeepGS用国际玉米小麦改良中心(CIMMYT)基因库的2000个伊朗面包小麦的8个表型预测完成了有效性验证。此外,基于粒子群优化(ELBPSO)的集成学习,可以用于不同GS模型的预测的线性整合。

    依赖 R(>=3.0.0)

    建议 mxnet

    许可 GPL-2 | GPL-3

    编码 UTF-8

    集成数据 true

    RoxygenNote 6.0.1

    需要编译 no

    R主题文档

    ‘DeepGS’包的中文说明R主题文档cvSampleIndexELBPSOmeanNDCGpredict_GSModeltrain_deepGSModelwheat_example

    cvSampleIndex

    生成建模集和测试集的索引。

    描述

    该函数为建模和测试集中的样本生成索引,以执行N倍交叉验证实验。

    使用

    cvSampleIndex(sampleNum, cross = 5, seed = 1, randomSeed = FALSE)

    参数

    参数描述
    sampleNum需要划分为建模集和测试集的样本数。
    cross交叉验证的倍数(折叠数)。
    seed一个整数种子,用于重复结果,默认为1。
    randomSeed逻辑变量。默认值为FALSE。

    每个元素的列表,包括$trainIdx、$testIdx和$cvIdx。

    $trainIdx 建模样本的索引。

    $testIdx 测试样本的索引。

    $cvIdx 交叉验证的索引。

    描述
    $trainIdx建模样本的索引。
    $testIdx测试样本的索引。
    $cvIdx交叉验证的索引。

    作者

    Chuang Ma, Zhixu Qiu, Qian Cheng and Wenlong Ma

    例子

    #' ## 读取数据 ##
    data(wheat_example)
    ## 5倍交叉验证
    b <- cvSampleIndex(sampleNum = 2000, cross = 5, seed = 1)
    ## 提取其中一次验证的数据集
    b$cv1

    ELBPSO

    基于粒子群优化的集成学习(Ensemble Learning Based on Particle Swarm Optimization)。

    描述

    该算法结合了不同GS模型的预测表型值,并返回这些模型的最佳权重。

    使用

    ELBPSO(rep_times = 100, interation_times, weight_dimension, weight_min, weight_max, rate_min, rate_max, paticle_number, pred_matrix, IW = 1, AF1 = 2, AF2 = 2)

    参数

    参数描述
    rep_timesELBPSO重复次数,默认是100。
    interation_times每次ELBPSO优化迭代次数。
    weight_dimension权重维度。
    weight_min最小权重。
    weight_max最大权重。
    rate_min最小更新率。
    rate_max最大更新率。
    paticle_number帕特里克数量。
    pred_matrix第一列代表真实值,其他列代表其他GS模型的预测值。
    IW惯性(惰性)权重。默认为1。
    AF1加速因子1。默认是2。
    AF2加速因子2。默认是2。

    例子1.2

    # # Not run
    # library(DeepGS)
    # library(rrBLUP)
    # data("wheat_example")
    # Markers <- wheat_example$Markers
    # y <- wheat_example$y
    # cvSampleList <- cvSampleIndex(length(y),10,1)
    # # select one fold
    # cvIdx <- 1
    # trainIdx <- cvSampleList[[cvIdx]]$trainIdx
    # testIdx <- cvSampleList[[cvIdx]]$testIdx
    # trainMat = Markers[trainIdx,]
    # trainPheno = y[trainIdx]
    # validIdx <- sample(1:length(trainIdx),floor(length(trainIdx)*0.1))
    # validMat <- trainMat[validIdx,]
    # validPheno <- trainPheno[validIdx]
    # testMat = Markers[testIdx,]
    # testPheno = y[testIdx]
    # # design DeepGS architecture
    # conv_kernel <- c("1*18") # convolution kernels (fileter shape)
    # conv_stride <- c("1*1")
    # conv_num_filter <- c(8) # number of filters
    # pool_act_type <- c("relu") # active function for next pool
    # pool_type <- c("max") # max pooling shape
    # pool_kernel <- c("1*4") # pooling shape
    # pool_stride <- c("1*4") # number of pool kernerls
    # fullayer_num_hidden <- c(32,1)
    # fullayer_act_type <- c("sigmoid")
    # drop_float <- c(0.2,0.1,0.05)
    # cnnFrame <- list(conv_kernel =conv_kernel,conv_num_filter = conv_num_filter,
    # conv_stride = conv_stride,pool_act_type = pool_act_type,
    # pool_type = pool_type,pool_kernel =pool_kernel,
    # pool_stride = pool_stride,fullayer_num_hidden= fullayer_num_hidden,
    # fullayer_act_type = fullayer_act_type,drop_float = drop_float)
    # markerImage = paste0("1*",ncol(trainMat))
    # # train DeepGS model
    # DeepGS_obj <- train_deepGSModel(trainMat = trainMat,trainPheno = trainPheno,
    # validMat = validMat,validPheno = validPheno, markerImage = markerImage,
    # cnnFrame = cnnFrame,device_type = "cpu",gpuNum = 1, eval_metric = "mae",
    # num_round = 6000,array_batch_size= 30,learning_rate = 0.01,
    # momentum = 0.5,wd = 0.00001, randomseeds = 0,initializer_idx = 0.01,
    # verbose =TRUE)
    # # make predictions based on the trained model
    # DeepGS_pred <- predict_GSModel(GSModel = DeepGS_obj,testMat = Markers[testIdx,],
    # markerImage = markerImage )
    # # train RR-BLUP model#'
    # rrBLUP_obj <-mixed.solve(trainPheno, Z=trainMat, K=NULL, SE = FALSE, return.Hinv=FALSE)
    # # make predictions based on the trained model
    # rrBLUP_pred <- testMat %*% rrBLUP_obj$u + as.numeric(rrBLUP_obj$beta )
    # # prepare the prediction matrix
    # test_predMat <- cbind(t(DeepGS_pred), rrBLUP_pred)
    # train_predMat <- cbind(testPheno, t(DeepGS_pred), rrBLUP_pred)
    # colnames(train_predMat) <- c("real", "DeepGS", "RR-BLUP")
    ## End not run

    例子1.1

    ## 不运行
    # rrBLUP例子
    # library(DeepGS)
    # library(rrBLUP)
    # data("wheat_example")
    # Markers <- wheat_example$Markers
    # y <- wheat_example$y
    # cvSampleList <- cvSampleIndex(length(y),10,1)
    ## 选择第N倍(折)
    # cvIdx <- 1
    # trainIdx <- cvSampleList[[cvIdx]]$trainIdx
    # testIdx <- cvSampleList[[cvIdx]]$testIdx
    # trainMat = Markers[trainIdx,]
    # trainPheno = y[trainIdx]
    # testMat = Markers[testIdx,]
    # testPheno = y[testIdx]
    # rrBLUP_obj <-mixed.solve(trainPheno, Z=trainMat, K=NULL, SE = FALSE, return.Hinv=FALSE)
    # rrBLUP_pred <- testMat %*% rrBLUP_obj$u + as.numeric(rrBLUP_obj$beta)
    ## 不运行结束
    # 使用他们的预测得分计算不同模型的权重
    test_datapath <- system.file("exdata", "test_ELBPSO.RData", package = "DeepGS")
    load(test_datapath)
    weight <- ELBPSO(rep_times = 100,interation_times = 25,weight_dimension = 2, weight_min = 0,weight_max=1,rate_min = -0.01,rate_max = 0.01, paticle_number = 10, pred_matrix = train_predMat,IW = 1, AF1 = 2, AF2 = 2)
    new_pre <- (test_predMat %*% weight)/sum(weight)
    # calculating the weight of different training model by using their predict socres
    test_datapath <- system.file("exdata", "test_ELBPSO.RData",
    package = "DeepGS")
    load(test_datapath)
    weight <- ELBPSO(rep_times = 100,interation_times = 25,weight_dimension = 2, weight_min = 0,weight_max=1,rate_min = -0.01,rate_max = 0.01, paticle_number = 10, pred_matrix = train_predMat,IW = 1, AF1 = 2, AF2 = 2)
    ensemble_pred <- (test_predMat %*% weight)/sum(weight)
    predMat <- cbind(testPheno, t(DeepGS_pred), rrBLUP_pred, ensemble_pred)
    colnames(predMat) <- c("real", "DeepGS", "RR-BLUP", "ensemble")
    cor(predMat)

    meanNDCG

    计算平均归一化折扣累积增益。

    描述

    该函数是在选择育种值高的前k个个体时,用平均归一化折扣累积增益评估全基因组选择预测模型表现的。

    使用

    meanNDCG(realScores, predScores, topAlpha = c(10))

    参数

    参数描述
    realScores一个数值化向量,一个性状验证个体的育种值。
    predScores一个数值化向量或矩阵,用全基因组选择预测模型预测的个体的预测育种值。
    topAlpha一个数值化的向量(一个或多个参数),优良个体百分比,默认是10。

    作者

    Chuang Ma, Zhixu Qiu, Qian Cheng and Wenlong Ma

    例子

    ## Not run
    refer_value <- runif(100)
    pred_value <- sin(refer_value) + cos(refer_value)
    meanNDCG(realScores = refer_value,predScores = pred_value, topAlpha = c(10,20,30))
    ## End not run

    predict_GSModel

    预测GS模型。

    描述

    使用经过训练的深度学习全基因组选择预测模型预测性状值。

    使用

    predict_GSModel(GSModel, testMat, markerImage)

    参数

    GSModel 从DeepGSModel函数获得的经过训练的预测模型。

    testMat 基因型矩阵(T×M;T是个体,M是标记)。

    markerImage (字符串)给出“i×j”的图像格式,每个个体的标记信息(M×1)将被编码。

    作者

    Chuang Ma, Qian Cheng, Zhixu Qiu and Wenlong Ma

    train_deepGSModel

    利用深度学习技术建立全基因组选择预测模型。

    描述

    该函数应用深度卷积神经网络建立全基因组选择的预测模型。

    使用

    train_deepGSModel(trainMat, trainPheno, validMat, validPheno, markerImage, cnnFrame, device_type = "cpu", gpuNum = "max", eval_metric = "mae", num_round = 6000, array_batch_size = 30, learning_rate = 0.01, momentum = 0.5, wd = 1e-05, randomseeds = NULL, initializer_idx = 0.01, verbose = TRUE...)

    参数

    trainMat 建模群体的基因型矩阵(N×M,N是个体,M是标记)。

    trainPheno 建模群体表型的向量(N×1)。

    validMat 验证群体的基因型矩阵。

    validPheno 验证群体的表型向量(N*1)。

    markerImage (字符串)这个给出“i×j”的图像格式,每个个体用标记信息编码(M×1)。如果图像大小超过SNP标记数,用0修改缺失的部分,如果图像大小小于SNP标记数,多余的标记被去除。

    cnnFrame 包含卷积神经网络(CNN)框架的以下元素的列表:

    trainMat建模群体的基因型矩阵(N×M,N是个体,M是标记)。
    trainPheno建模群体表型的向量(N×1)。
    validMat验证群体的基因型矩阵。
    validPheno验证群体的表型向量(N*1)。
    markerImage(字符串)这个给出“i×j”的图像格式,每个个体用标记信息编码(M×1)。如果图像大小超过SNP标记数,用0修改缺失的部分,如果图像大小小于SNP标记数,多余的标记被去除。
    cnnFrame包含卷积神经网络(CNN)框架的以下元素的列表: – conv_kernel:向量(K×1)给出卷积核大小(宽度x高度),分别用于过滤K个卷积层的图像矩阵。 – conv_num_filter:向量(K×1)分别给出K个卷积层的卷积核数。 – pool_act_type:给出活动函数的类型的向量(K×1),将定义K个卷积层的输出,这将分别作为相应池层的输入。它包括“relu”、“sigmoid”、“softrelu”和“tanh”。 – conv_stride:K个卷积核的一个特征(K×1)步长。 – pool_type:分别从“avg”、“max”、“sum”中选择的一个特征(K×1)类型的K个池层。 – pool_kernel:一个特征(K×1)K个池层的K池核大小(宽×高)。 – pool_stride:一个特征(K×1)K池核的步长。 – fullayer_number-hidden:一个数值化(H×1),H完全连接层分别隐藏神经元的数量,最后一个完全连接层的隐藏神经元数量必须是1。 – fullayer_act_type:一个数值型((H-1)×1),从所有连接层的“relu”,“sigmoid”,“softrelu”和“tanh”的选择活动函数的类别。 – drop_float:数值型。
    device_type选择”cpu“或”gpu“设备去构建预测模型。
    gpuNum(数值型)GPU设备的数量,如果使用多GPU(gpuNum>1),momentum参数必须大于0。
    eval_metric(字符串)一种估计建模过程表现的方法,包括”mae“、”rmse“和”accuracy“,默认为”mae“。
    num_round(数值型)超过建模数据去建模的迭代次数,默认=10。
    array_batch_size(数值型)它为每个更新权重定义将通过网络传播的样本数,默认为128。
    learning_rate建模过程的学习率。
    momentum(浮点,0~1)移动平均线动量,平均为0.9。
    wd(浮点,0~1)权重衰减,默认为0。
    randomseeds设置mxnet设备特定随机数使用的种子。
    initializer_idx参数的初始化主题。
    verbose逻辑值(默认true)指定是否在建模期间的迭代时输出信息。
    用于构造包“mxnet”中使用的神经网络的参数(http://mxnet.io/)。

    作者

    Chuang Ma , Zhixu Qiu, Qian Cheng and Wenlong Ma

    例子

    data(wheat_example)
    Markers <- wheat_example$Markers
    y <- wheat_example$y
    cvSampleList <- cvSampleIndex(length(y),10,1)
    # cross validation set
    cvIdx <- 1
    trainIdx <- cvSampleList[[cvIdx]]$trainIdx
    testIdx <- cvSampleList[[cvIdx]]$testIdx
    trainMat <- Markers[trainIdx,]
    trainPheno <- y[trainIdx]
    validIdx <- sample(1:length(trainIdx),floor(length(trainIdx)*0.1))
    validMat <- trainMat[validIdx,]
    validPheno <- trainPheno[validIdx]
    trainMat <- trainMat[-validIdx,]
    trainPheno <- trainPheno[-validIdx]
    conv_kernel <- c("1*18") ## convolution kernels (fileter shape)
    conv_stride <- c("1*1")
    conv_num_filter <- c(8) ## number of filters
    pool_act_type <- c("relu") ## active function for next pool
    pool_type <- c("max") ## max pooling shape
    pool_kernel <- c("1*4") ## pooling shape
    pool_stride <- c("1*4") ## number of pool kernerls
    fullayer_num_hidden <- c(32,1)
    fullayer_act_type <- c("sigmoid")
    drop_float <- c(0.2,0.1,0.05)
    cnnFrame <- list(conv_kernel =conv_kernel,conv_num_filter = conv_num_filter,
    conv_stride = conv_stride,pool_act_type = pool_act_type,
    pool_type = pool_type,pool_kernel =pool_kernel,
    pool_stride = pool_stride,fullayer_num_hidden= fullayer_num_hidden,
    fullayer_act_type = fullayer_act_type,drop_float = drop_float)
    markerImage = paste0("1*",ncol(trainMat))
    trainGSmodel <- train_deepGSModel(trainMat = trainMat,trainPheno = trainPheno, validMat = validMat,validPheno = validPheno, markerImage = markerImage, cnnFrame = cnnFrame,device_type = "cpu",gpuNum = 1, eval_metric = "mae", num_round = 6000,array_batch_size= 30,learning_rate = 0.01,momentum = 0.5,wd = 0.00001, randomseeds = 0,initializer_idx = 0.01, verbose =TRUE)
    predscores <- predict_GSModel(GSModel = trainGSmodel,testMat = Markers[testIdx,], markerImage = markerImage )

    wheat_example

    在开发功能中运行的例子。

    描述

    列表:

    - 标记:矩阵(599×1225),每行代表一个个体的1225个标记。
    - y:每个个体的真实表型值。

    使用

    data(wheat_example)
  • 造物,先爱之

    道是可以描述的,但随着时间的推移,道的描述会不断改进和更新。用肉体紧紧地抱住灵魂,合二为一,终究有分离的那一天!生之畜之,生而不有,为而不恃,是以大道!敢说真话,完善每个环节,不以妄言得利,是以修身之本。世人皆爱牡丹,却无意悉心照料,是以爱牡丹之美而非爱牡丹也。世人俱爱稻谷,却不愿烈日农耕,是以爱稻谷之果腹之感而非爱稻谷也。弃先祖之道而觅它呼?殊不知,金字塔以精砖而高耸,长城因血汗而绵长。爱,则倾注,精血造物,曰从无到有。自此,有无相生,难易相成,长短相形,高下相倾,恒也。有物,必遭非议,而无物,何论足呼?以无生有,傻乎?图名利乎?非也,爱也。气血凝物者,爱之深,恒有无爱者辱之,物愈精之动力也。从无到有,天地之始孕育万物之母,必倾爱,忍非议。同理,造物,爱之。

  • Visual Studio Code+R

    Visual Studio Code是微软开发的开源、跨平台代码编辑器,号称宇宙最强!使用该编辑器直接编辑和运行R程序比使用RStudio占用资源更低,稳定性也好一些。

    R语言的下载

    进入R语言的官方网站,根据自己的所在地选择最适合的镜像站下载R(https://www.r-project.org/)。

    我选择的是兰州大学开源学会镜像(https://mirror.lzu.edu.cn/CRAN/),根据动画操作下载,版本号可能会有不同。

    如果电脑中已经安装了其他版本的R,建议先卸载,然后再安装。

    R语言的安装

    安装时,安装目录建议去掉横线,有些程序不识别目录中的短横线,容易造成错误。

    其他保持默认即可。

    下载VSCode和安装

    进入Visual Studio Code官网(https://code.visualstudio.com/),下载适合的版本,我这里以Windows 11 64 bit为例。安装保持默认即可。

    VSCode插件安装

    运行VSCode,按快捷键Ctrl+Shift+X调出扩展商店,在搜索栏输入“R”,安装R拓展。

    R语言安装languageserver包

    打开R,输入下列代码安装languageserver包,回车运行。

    install.packages("languageserver")
    

    在VSCode里运行R代码

    在VSCode中,选择菜单栏的文件→打开文件夹,选择一个经常编辑代码的文件夹。并信任该文件夹。

    按Ctrl+N新建一个文件,语言选择R。

    在第一行输入任意R代码,按Ctrl+Enter运行,查看结果。若能看到运行结果,则环境搭建完毕。

    getwd()
    
  • WSL2安装CUDA

    英伟达的官网提供了CUDA安装指南,按照相应的步骤选择即可安装成功。

    wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
    sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
    wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda-repo-wsl-ubuntu-11-6-local_11.6.2-1_amd64.deb
    sudo dpkg -i cuda-repo-wsl-ubuntu-11-6-local_11.6.2-1_amd64.deb
    sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-6-local/7fa2af80.pub
    sudo apt-get update
    sudo apt-get -y install cuda
    

  • 【异想天开】我们距离瞬移还有多远?

    能够在天空翱翔可能是每一个人从小的就有的梦想。在这个梦想的驱动下,飞机、无人机、航太飞机、空间站都陆续出现。虽然现在加快了从一个地方去往另一个地方的速度,但是好像距离瞬间移动还很遥远?量子力学能够解决这个问题吗?

    量子力学发现,配对的粒子无论多远都能同时展现出对应的”动作“,这可能是瞬移物品的前提。只要找到配对机制,在另一个地方,把一个物体所有的粒子都配对,就可能得到一个镜像相反的物体,此时把原物体销毁,就是一种意义上的瞬移。不过,这对于我们还过于遥远。

    实际上,我们已经可以瞬移了,那就是在游戏里。飞檐走壁、悬浮,甚至呼风唤雨!只要想,游戏可以做的和现实世界一模一样,人只需要带上VR眼镜,就能穿墙入地,腾云驾雾!以上这些距离我们已经非常近了,实现的方式就是元宇宙!应该在不久的将来,我们的世界以及一个或多个元宇宙会同时存在,吃饭、睡觉可能在真实世界,而工作、娱乐进入到元宇宙。在那里,长相、穿着可以随意变换;挥挥手,可以通过中央电脑获取想要的信息;人们不再需要交通工具,眨眼之间便可到达任何想去的地方;不同国家的人坐在一起开派对,毫无语言障碍;如果愿意,我们可以去空间站、海底,甚至去往太阳、地心、51区;办事排队,可以用假人占位,当排到时直接办理。呼,越快的节奏,意味着更大的压力,希望人们能够适应。

    各国现在都在加紧开发元宇宙,从现在电脑的计算能力和开发效率来看,元宇宙的雏形应该在最近几年出现。人脑科学可能在未来更加火爆,毕竟,虚拟的东西只有视觉,没有味觉、触觉。如何虚拟出味觉、触觉信号,让大脑以为进入的是完全真实的世界,必将是未来的发展方向。当大脑能够被欺骗时,虚拟世界取代真实世界的时间也就到了。

  • 芯片测序的DQC值

    在样品的基因分型前,需要先确定每个被测样品的质量。DQC(dish quanlity control)检测基因组上没有多态性的若干位点,也就是芯片上通常会设置一些本来没有多态性的位点,这些位点的作用是确定芯片设计的好坏或者样本测定的准确性。如果一个样品的DQC值小于阈值(通常是0.82),说明该样品的测序有问题,应该重新检测或在分析中去除。

  • 一首学生唱的《遇见》感动到热泪盈眶

    我们团队的一个团结、勤奋、求是、创新的硕士生寝室,她们用一首自己改编的《遇见》抒发了相互珍视的深厚情谊,记录了寝室生活、学习、科研中的喜怒哀乐、点点滴滴。疫情下,室友们互帮互助、关系融洽,以积极乐观的态度学习、生活、完成科研工作,体现了沈阳农业大学的团结氛围;几个学生兢兢业业,排除万难,疫情下仍然以肉眼可见的速度成长,正表现出沈农人的“勤奋”;无论在世界的哪个地方,追求真理都是科研工作者的最终目标,也是推动科学进步的不竭动力!改编歌曲,写几首小诗,已经投稿和正在修改的SCI论文,印证了几个人的创造力!

    继续努力吧,脚下的路会在未来的某一天发光。

    =========== 参赛作品 ===========

    班级:20级、21级硕士1班

    寝室号:2A#645

    姓名:李欣宇 陈珊 陈慧港 刘云灿 丁莉娜

    作品 《愿》 《同行》

    类型:诗歌

    寓意:虽然由于疫情,大家都被困在校内及家里,整个沈阳几乎停摆。但每个人的心中都绝对不会忘记暂时不能亲自体会的壮丽河山,绝不会因一时的困境而如困兽般焦躁慌乱。疫情定能过去,保持自己的良好心态,终有一日,越过峥嵘往昔与受疫情所阻的今朝,定能在梦醒时分,迎来晨光熹微,光耀万里。

    我不愿做偏安一隅的藤蔓,却选择了生生不息的野草。

    我不愿做春光里消融的冰和冬日里凋零的花瓣,却选择了夏日里孜孜不倦的蝉鸣和秋意里盛放的硕果。

    我不必亲眼所见千里奔腾的黄河之水与川流不息的长江之魂,不必亲耳听闻流云的离去与风雨下芭蕉的垂泪,更不必亲自说出我对万里河山的热爱与真诚。

    四时万物,今世常伴。

    无论我是否踏上了旅途,在世间之路上,我只需用心去感受,用爱去体味,最后只消静静的书写。

    同行

    力虽微,步虽缓,砥砺进发,仍有千万灯火,助力前行。

    路且遥,疫且阻,齐心协力,终是风将息而雨亦停。

    山河仍在,草木仍兴,今宵梦里,仍忆车水马龙,结伴同行。

    诗歌作者:20级生物信息学 刘云灿

    作品 《上林赋》节选

    类型:书法

    寓意:我们手写了《上林赋》的一个片段,上林赋表达了一个人对一个人和一个事物最真挚的情感,我们在沈农这个充满知识充满收获的沃土中收获了友情、知识,以及一段段难以忘怀的经历,在迎接我的母校七十华诞这个值得纪念的日子里,我们怀着最真挚的情感,用自己的双手写下的华美篇章来庆祝,拳拳深情,不止于言表,化于文字,书写在纸上,愿我们的沈农继往开来,在未来的道路上书写新的篇章。

    《上林赋》节选

    《上林赋》片段

    我们手写了《上林赋》的一个片段,上林赋表达了一个人对一个人和一个事物最真挚的情感,我们在沈农这个充满知识充满收获的沃土中收获了友情、知识,以及一段段难以忘怀的经历,在迎接我的母校七十华诞这个值得纪念的日子里,我们怀着最真挚的情感,用自己的双手写下的华美篇章来庆祝,拳拳深情,不止于言表,化于文字,书写在纸上,愿我们的沈农继往开来,在未来的道路上书写新的篇章。

    书法作者:21级植物学 丁莉娜

    作品 《抗疫先锋》

    类型:绘画

    寓意:我与农大齐抗疫,我与沈阳心连心。不管多么危险,多么艰苦,总有这样的一群人,他们都身着防护服,手举盾牌,化身抗疫先锋将病毒拦住,他们无私奉献,屹立在抗击疫情的第一线,为了他们身后所保护的人民,他们坚定的眼神和坚持不动摇的身躯,体现着他们必胜的决心。我们也穿上防护服,举起我们的盾牌,也用文字的力量为前线的工作人员加油,也为沈阳加油,我们一定能够一起克服艰难,度过难关,沈阳加油!

    抗议先锋绘画

    我与农大齐抗疫,我与沈阳心连心。不管多么危险,多么艰苦,总有这样的一群人,他们都身着防护服,手举盾牌,化身抗疫先锋将病毒拦住,他们无私奉献,屹立在抗击疫情的第一线,为了他们身后所保护的人民,他们坚定的眼神和坚持不动摇的身躯,体现着他们必胜的决心。我们也穿上防护服,举起我们的盾牌,也用文字的力量为前线的工作人员加油,也为沈阳加油,我们一定能够一起克服艰难,度过难关,沈阳加油!

    绘画作者:20级生物信息学 刘云灿

    作品 《遇见》

    类型:歌曲

    寓意:一场高考让我们遇见彼此;一段缘分让我们彼此相伴;一个梦想让我们努力向前。感谢相遇,感恩相伴。

    链接: https://pan.baidu.com/s/1GzFx4IHTN4NcdA9W6Vl39g?pwd=cikd 提取码: cikd

    歌曲音乐作者:20级生物与医药陈慧港

    作品 《静候时光》

    类型:摄影

    寓意:摄影作品的主题是静候时光,图片的小标题连起来为“启梦 念趣”。沈农是梦开始的地方,四年的本科生活和两年的研究生生活于我们而言意义非凡,可敬的老师、交心的朋友、可爱的小动物都是青春故事中不可或缺的一部分。在学习和科研生活中会遇到许多问题和磨难,不如停下来看看身边有趣的事情,等再次出发,一定会看到另一片天空的希望,万物可爱,让我们一同奔赴山海!

    春 启

    春启

    春日作序,万物和鸣,待疫情散去,等花开,我们一起赴一场灿烂的约定。

    夏 梦

    夏梦

    新的故事会在夏天温柔的微风中开始,趁热夏,去热爱,我们来日方长。

    秋 念

    秋念

    秋日不止适合思念,更适合见面,我们约定相遇,漫步在银杏大道,感受浪漫。

    冬 趣

    冬趣

    雪是冬天的惊喜,别因寒冷放弃前行,要知道,冬天的每一个脚印都清晰可见。

    摄影作品的主题是静候时光,图片的小标题连起来为“启梦 念趣”。沈农是梦开始的地方,四年的本科生活和两年的研究生生活于我们而言意义非凡,可敬的老师、交心的朋友、可爱的小动物都是青春故事中不可或缺的一部分。在学习和科研生活中会遇到许多问题和磨难,不如停下来看看身边有趣的事情,等再次出发,一定会看到另一片天空的希望,万物可爱,让我们一同奔赴山海!

    摄影作者:20级生物信息学 李欣宇

    作品 《与沈农的六年光阴》

    类型:征文

    寓意:回顾我们五个人在沈阳农业大学生活的六年时光,我们彼此在645遇见,书写着我们在沈农的故事。希望未来的我们,不负自己,各自努力向上生长。

    与沈农的六年光阴

    日穿帘隙,时间悄无声息地离去。不知不觉,那么多渐行渐远的岁月,如今只剩下依稀的背影,翻过岁月的篱墙,面对那些悄然散场的旧时光,莞尔一笑,只言感恩岁月,不诉岁月离殇。

    ——题记

    时间总是不知疲倦地填满每一天,以至于不知不觉中竟已是我在沈农的第六个年头了,感谢沈农在我的青葱岁月中留下了浓墨重彩一笔。此刻执笔才想到有这么多像我一样的人,在这里吃六年沈农的饭,睡六年沈农的床,同住在六楼的寝室。不曾想过,一个离家万里外的地方能见证一个人从稚气未脱到泰然自若。我们自四面八方而来,没有早一步也没有晚一步,刚巧相遇一室之间,纵然我们性格有不同,或许我们曾有不愉快,但我依然觉得:相遇,便是美好。我们分享甜蜜、抱怨委屈,一同欢笑,一并成长,与你们的点点滴滴,我都记在心里。

    645,由于一个“不速之客”的加入,顺理成章的成了一个六楼的四人寝住了五个人的“名副其实645”。我们在九月聚首,相约沈农的“七年之养”,从相互客气到肆意调侃,在一起的时光的总是过得很快。研究生不像本科生有那么多一起上的课和一起度过的周末,我们因为各自的科研任务不同总是聚少离多,每晚的日常吐槽和为数不多的家常小聚组成了我们全部的寝室生活,正是这些快乐的时间碎片缓解了我们实验日常的心里紧张,组成了我们难忘的业余生活。

    我记得入学那天,老丁不知疲倦的帮我们一趟一趟运送行李;港港一边铺床一边唱歌打趣活跃气氛;小欣欣主动拿起我放着衣服,帮我一件一件的挂起来,放进衣柜里;灿哥骄傲的分享她不远万里带来的正宗皖西白鹅;而我,因为个头小的原因就被冠以“珊妹”的名号。我记得港港准备视频演讲比赛那段时间,灿哥作为整个寝室的“搜商担当”担起了搜集素材大任;小欣欣凭借极高的文学素养不厌其烦的帮忙改稿子;我和老丁没啥特长就忙里忙外的当她的采风小助理。我记得有次熄灯之后的卧谈会,我们从偶像明星的八卦,聊到了各自的择偶标准;从现在的科研现状,聊到了未来的职业规划。我还记得每次赖床起来看到书桌上放着的牛奶和小蛋糕,每次决定减肥时他们多带的一副餐具,每次忙里偷闲凑出来的一场电影,每次熟睡时轻轻的开门声,每次焦虑不安时的拥抱慰藉……还有太多太多和着笑声的日子,被我珍藏在记忆的夹层里。在这个可以容纳不止4人的小房间里,我真的体会到了家的温馨。相互磨合,相互理解,相互鼓励,相互关心,相互陪伴。这一路上走来,我和你们慢慢变成了我们。

    刚决定要下笔的时候,我问这群仙女们该怎么夸奖她们。港港说应该夸她沉鱼落雁闭月羞花的美貌,小欣欣说夸她落落大方温柔可人的气质,灿哥实至名归技术咖笑而不语,老丁只求不点搞笑女之梗。但在我看来,这些词都太过片面,我想夸的是她们的共同优点——拥有一颗热忱的心,对生活的无尽热爱,对梦想的毫不懈怠。我想,她们像是奔跑在原野上的蒲公英的种子,山泉旁摇曳的鹿群,下午三点微醺的日光,深夜霓虹照耀的斑斓酒水,笔墨惊鸿中的一曲霓裳——她们是世间最美好的人,她们也值得世间所有美好。更像是我平凡之路上的星火,燃烧的光芒照亮了我前进的道路。她们是我不是家人胜似家人的人,在异乡温暖彼此,让生活洒满阳光。

    春风拂面过,秋雾迷夜幕。夏雨馨怡殇,冬雪御晶莹。在一次次春去秋来岁月更迭的日子里,我们,好像把“我们”这个词演绎到了极致,把“家人”这个词引申出了不一样的含义。我们各自过着平凡的生活,我们各自努力向上生长,我们平凡不甘平庸,但每个人对于彼此存在的意义却是非凡的,这就是645,这就是我平凡的宿舍故事。生命的长河奔流不息,属于我们的故事还在上演。青春是一本太仓促的书,愿我们拥其所爱,得其所爱;愿我们携手踏江河湖海,望群山巍峨,赏云翻雾涌;愿我们得享安宁喜乐,遍览青天,岁岁红莲!

    征文作者:20级生物信息学 陈珊

    作品 《星火》

    类型:宿舍标识

    寓意:645火炬因我们五个人点燃,这团星星之火,点燃了我们平凡的生活,照亮了我们前行的道路,温暖了我们静默的心灵。

    星火

    645火炬因我们五个人点燃,这团星星之火,点燃了我们平凡的生活,照亮了我们前行的道路,温暖了我们静默的心灵。

    宿舍标识作者:21级植物学 丁莉娜

  • QTLIciMapping输入文件准备

    编者按:生成的bip文件和snp文件不要直接用于分析。由于生成文件过程中未考虑亲本信息,需要将亲本基因型替换到相应位置!切记!bin文件中的位置信息应为遗传距离,由IciMapping软件生成,本程序中输出的是物理位置,不要直接做定位分析。未来有时间,我可能会完善程序,在我不那么忙的时候。

    现在绝大多数情况下,使用的都是RIL或DH群体。因此,通常群体类型使用3或4。

    HMP文件可以使用TASSEL软件筛选,染色体1-10,插入缺失全部去掉。需要注意的是,任意碱基座必须包含A、T、C、G四个碱基中的两个,否则会报错。

    准备好基因型文件,即可使用本站开发的工具直接生成.snp文件,用于连锁图谱的构建。https://aozhangchina.github.io/R/getICIMappingFiles/getIciMappingFiles.html

    若要获得.bip文件,需要增加一个表型文件,表型文件格式与META-R软件分析的BLUP结果相同。如下图。在程序第三次弹窗选择表型文件时,点取消,则不生成.bip文件。

    图1 表型文件格式。

    除了上述两种文件,其他格式的文件可以根据生成的相应文件提供的信息进行修改。

    输出文件列表:

    bip_Chromosome.txt
    bip_GeneralInfo.txt
    bip_Genotype.txt
    bip_LinkageMap.txt
    bip_Phenotype.txt
    my_icimapping_data.bip
    my_icimapping_data.snp
    snp_Anchor.txt
    snp_GeneralInfo.txt
    snp_Genotype.txt
    snp_Parents.txt
    marker_rename.txt

    本机测试,991161个SNP不使用bin功能的情况下可以正常构建连锁图谱和ICIM-ADD分析,但分析时间很长。

  • 在Typora中快速添加公式

    Typora(https://www.typora.io/)是目前全世界最优雅的markdown编辑器,它以所见即所得的方式直观的显示内容,非常方便的编辑公式、流程图等,能快速的按标题生成目录,用户只需专注于内容,不需要太多考虑格式问题。Typora原本是开源免费软件,今年开始收费,但实际上,还是可以继续免费使用的,每次打开文件的时候关闭一下窗口即可。软件不贵,我建议稍微支持下作者,让更多优秀的软件能够维持下去。

    默认情况下,Typora是不支持公式编辑的,需要一点点的设置,好在,Typora现在支持中文界面,很方便设置。

    1. 设置Typroa。依次选择文件→偏好设置→Markdown→勾选内联公式,然后关闭Typora重新打开。
    图1 设置Typora显示公式

    2. 随便在空白处输入两个dollar符,然后在dollar符之间输入公式。例如`$y=ax+b$`,可以看到如下效果。编写公式的时候遵循Tex/LaTeX编码。

    图2 内联公式显示

    3. 除了内联的方式,还可以使用代码块的方式显示公式,这和LaTex的方式一致。开始和结束的位置双写dollar符,里面写Latex公式。

    $$
    \begin{align*}
    y = y(x,t) &amp;= A e^{i\theta} \\
    &amp;= A (\cos \theta + i \sin \theta) \\
    &amp;= A (\cos(kx - \omega t) + i \sin(kx - \omega t)) \\
    &amp;= A\cos(kx - \omega t) + i A\sin(kx - \omega t)  \\
    &amp;= A\cos \Big(\frac{2\pi}{\lambda}x - \frac{2\pi v}{\lambda} t \Big) + i A\sin \Big(\frac{2\pi}{\lambda}x - \frac{2\pi v}{\lambda} t \Big)  \\
    &amp;= A\cos \frac{2\pi}{\lambda} (x - v t) + i A\sin \frac{2\pi}{\lambda} (x - v t)
    \end{align*}
    $$
    
    图3 代码块公式显示

    4. 交叉引用。当一个公式写好后,可以通过交叉引用的方式在文章的任意位置快速链接到该公式。具体方式为使用`label`设置一个参考,然后利用这个参考,在文件内的任意地方引用。

    实例代码,`\label{ref1}`用来设置参考。

    $$
    x+1\over\sqrt{1-x^2}\label{ref1}\tag{1}
    $$
    

    引用代码,在文章中的任意位置加入`$\ref{ref1}$`,在上面按Ctrl+鼠标左键即可直接跳转到上面的公式。

    $\ref{ref1}$
    

    5. 公式换行。公式选择\displaylines{}和双反斜杠来换行,这与LeTex保持一致。

    \displaylines{x+y\\y+z}\label{ref1}\tag{1}
    
    图4 强制换行

    Typora使用MathJax实现公式编辑,更多信息请参看https://www.mathjax.org/