單變量和多變量對基因表達式的預測能力對比

2021-01-09 deephub

DESeq2與LASSO對基因表達的預測能力

在這篇文章中,我們將比較LASSO、PLS、Random Forest等多變量模型與單變量模型的預測能力,如著名的差異基因表達工具DESeq2以及傳統的Mann-Whitney U檢驗和Spearman相關。使用骨骼肌RNAseq基因表達數據集,我們將展示使用多變量模型構建的預測得分,以優於單變量特徵選擇模型。

骨骼肌RNAseq基因表達數據

在這裡,我們將量化幾種特徵選擇方法的預測能力:a)單變量(逐個)特徵選擇,b)多變量(一起)特徵選擇。出於演示目的,我們將使用來自GTEX人體組織基因表達聯盟的骨骼肌RNAseq基因表達數據集(為簡單起見,隨機抽取1000個基因)。

版本6的GTEX骨骼肌數據集包括157個樣本。我們裝載基因表達矩陣X,去除低表達基因。為了與組學整合的後選擇特徵相一致,我們將使用性別作為我們將要預測的響應變量Y。讓我們通過降維(如PCA)來快速可視化這些樣本。

library("mixOmics")X<-read.table("GTEX_SkeletalMuscles_157Samples_1000Genes.txt",header=TRUE,row.names=1,check.names=FALSE,sep="\t")X<-X[,colMeans(X)>=1]Y<-read.table("GTEX_SkeletalMuscles_157Samples_Gender.txt", header=TRUE,sep="\t")$GENDERnames(Y)<-rownames(X)pca.gtex <- pca(X, ncomp=10)plotIndiv(pca.gtex, group = Y, ind.names = FALSE, legend = TRUE)

正如我們所看到的,PCA圖並沒有根據骨骼肌基因表達數據顯示出男性和女性之間的明顯區別。我們只能假設基因性染色體(X, Y)可以提供一個完美的男性和女性之間的分離,但是我們沒有觀察到這種情況,因為:1)大多數基因來自常染色體,2)隨機抽樣 大約有1000個基因,因此我們可能沒有從X和Y染色體上取樣許多基因。在下一節中,我們將把數據集分割成訓練和測試子集,然後在訓練集上實現單變量和多變量特徵選擇(訓練)模型,並使用平衡假陽性(FPR)和真陽性(TPR)率的roc曲線技術對測試集上的模型進行評估。

性別預測:LASSO與單變量方法

為了評估單變量和多變量模型的預測能力,我們需要對獨立的數據集進行訓練和評估。 為此,讓我們將數據集劃分為訓練(80%的樣本)和測試(20%的樣本)子集。 為了確保我們的評估不基於數據的特定「幸運」拆分,我們將多次對訓練和測試子集執行隨機拆分,多次計算每次ROC曲線並平均多個ROC曲線。 這樣,我們將一舉兩得:為每個模型的ROC曲線建立置信區間,並使ROC曲線平滑且美觀,否則,除非您在測試中有大量樣本,否則它們將會出現各種問題。

在本篇文章中,我將添加另一種非ivarite特徵選擇方法,即Mann-Whitney U檢驗,該檢驗應在很大程度上與Spearman相關性相比較,因為兩者都是非參數和基於秩的單變量方法,因此不假定數據的特定分布。為了將通過單變量方法單獨選擇的基因組合到預測得分中,我們將使用它們的表達與性別之間的個體關聯性的p值對它們進行排名,並通過Bonferroni程序校正多次測試。經過多次測試調整後,這通常會在訓練數據集上產生一些差異表達的基因。此外,可以通過計算其在訓練數據集上的作用/權重的乘積(Spearman rho和男性與女性之間基因表達的倍數變化的對數),將差異顯著表達(男性與女性之間)的基因摺疊成預測得分。以及來自測試數據集的樣本的基因表達值。讓我們對其進行編碼,並比較模型之間的ROC曲線。

roc_obj_univar_FPR_list<-list(); roc_obj_univar_TPR_list<-list()roc_obj_wilcox_univar_FPR_list<-list();roc_obj_wilcox_univar_TPR_list<-list()roc_obj_multivar_FPR_list<-list(); roc_obj_multivar_TPR_list<-list()roc_obj_univar_AUC<-vector(); roc_obj_wilcox_univar_AUC<-vector()roc_obj_multivar_AUC<-vector()for(j in 1:100){#RANDOMLY SPLIT DATA SET INTO TRAIN AND TESTtest_samples<-rownames(X)[sample(1:length(rownames(X)),round(length(rownames(X))*0.2))]train_samples<-rownames(X)[!rownames(X)%in%test_samples]X.train<-X[match(train_samples,rownames(X)),]X.test<-X[match(test_samples,rownames(X)),]Y.train<-Y[match(train_samples,names(Y))];Y.test<-Y[match(test_samples,names(Y))]#TRAIN AND EVALUATE MULTIVARIATE LASSO MODELlasso_fit<-cv.glmnet(as.matrix(X.train), Y.train,family="binomial",alpha=1)coef<-predict(lasso_fit, newx = as.matrix(X.test), s = "lambda.min")roc_obj_multivar<-rocit(as.numeric(coef),Y.test)#TRAIN AND EVALUATE UNIVARIATE SPEARMAN CORRELATION MODELrho<-vector(); p<-vector()for(i in 1:dim(X.train)[2]){ corr_output<-cor.test(X.train[,i],as.numeric(Y.train),method="spearman") rho<-append(rho,as.numeric(corr_output$estimate)) p<-append(p,as.numeric(corr_output$p.value))}output_univar<-data.frame(GENE=colnames(X.train),SPEARMAN_RHO=rho,PVALUE=p)output_univar$FDR<-p.adjust(output_univar$PVALUE,method="BH")output_univar<-output_univar[order(output_univar$FDR,output_univar$PVALUE, -output_univar$SPEARMAN_RHO),]output_univar<-output_univar[output_univar$FDR<0.05,]my_X<-subset(X.test,select=as.character(output_univar$GENE))score<-list()for(i in 1:dim(output_univar)[1]){ score[[i]]<-output_univar$SPEARMAN_RHO[i]*my_X[,i]}roc_obj_univar<-rocit(colSums(matrix(unlist(score), ncol = length(Y.test), byrow = TRUE)),Y.test)#TRAIN AND EVALUATE MANN-WHITNEY U TEST UNIVARIATE MODELwilcox_stat<-vector(); p<-vector(); fc<-vector()for(i in 1:dim(X.train)[2]){ wilcox_output<-wilcox.test(X.train[,i][Y.train=="Male"], X.train[,i][Y.train=="Female"]) wilcox_stat<-append(wilcox_stat,as.numeric(wilcox_output$statistic)) fc<-append(fc,mean(X.train[,i][Y.train=="Male"])/mean( X.train[,i][Y.train=="Female"])) p<-append(p,as.numeric(wilcox_output$p.value))}output_wilcox_univar<-data.frame(GENE=colnames(X.train),MWU_STAT=wilcox_stat, FC=fc,PVALUE=p)output_wilcox_univar$LOGFC<-log(output_wilcox_univar$FC)output_wilcox_univar$FDR<-p.adjust(output_wilcox_univar$PVALUE,method="BH")output_wilcox_univar<-output_wilcox_univar[order(output_wilcox_univar$FDR, output_wilcox_univar$PVALUE),]output_wilcox_univar<-output_wilcox_univar[output_wilcox_univar$FDR<0.05,]my_X<-subset(X.test,select=as.character(output_wilcox_univar$GENE))score<-list()for(i in 1:dim(output_wilcox_univar)[1]){ score[[i]]<-output_wilcox_univar$LOGFC[i]*my_X[,i]}roc_obj_wilcox_univar<-rocit(colSums(matrix(unlist(score),ncol=length(Y.test), byrow = TRUE)),Y.test)#POPULATE FPR AND TPR VECTORS / MATRICESroc_obj_univar_FPR_list[[j]]<-roc_obj_univar$FPRroc_obj_univar_TPR_list[[j]]<-roc_obj_univar$TPRroc_obj_wilcox_univar_FPR_list[[j]]<-roc_obj_wilcox_univar$FPRroc_obj_wilcox_univar_TPR_list[[j]]<-roc_obj_wilcox_univar$TPRroc_obj_multivar_FPR_list[[j]]<-roc_obj_multivar$FPRroc_obj_multivar_TPR_list[[j]]<-roc_obj_multivar$TPRroc_obj_univar_AUC<-append(roc_obj_univar_AUC,roc_obj_univar$AUC)roc_obj_wilcox_univar_AUC<-append(roc_obj_wilcox_univar_AUC, roc_obj_wilcox_univar$AUC)roc_obj_multivar_AUC<-append(roc_obj_multivar_AUC,roc_obj_multivar$AUC)print(paste0("FINISHED ",j," ITERATIONS"))}#AVERAGE MULTIPLE ROC-CURVES OR EACH MODEL AND PLOT MEAN ROC-CURVESroc_obj_univar_FPR_mean<-colMeans(matrix(unlist(roc_obj_univar_FPR_list), ncol=length(Y.test)+1,byrow=TRUE))roc_obj_univar_TPR_mean<-colMeans(matrix(unlist(roc_obj_univar_TPR_list), ncol=length(Y.test)+1,byrow=TRUE))roc_obj_wilcox_univar_FPR_mean<-colMeans(matrix( unlist(roc_obj_wilcox_univar_FPR_list), ncol=length(Y.test)+1,byrow=TRUE))roc_obj_wilcox_univar_TPR_mean<-colMeans(matrix( unlist(roc_obj_wilcox_univar_TPR_list), ncol=length(Y.test)+1,byrow=TRUE))roc_obj_multivar_FPR_mean<-colMeans(matrix(unlist(roc_obj_multivar_FPR_list), ncol=length(Y.test)+1,byrow=TRUE))roc_obj_multivar_TPR_mean<-colMeans(matrix(unlist(roc_obj_multivar_TPR_list), ncol=length(Y.test)+1,byrow=TRUE))plot(roc_obj_univar_FPR_mean,roc_obj_univar_TPR_mean,col="green", ylab="SENSITIVITY (TPR)",xlab="1 - SPECIFISITY (FPR)",cex=0.4,type="o")lines(roc_obj_multivar_FPR_mean,roc_obj_multivar_TPR_mean,cex=0.4,col="blue", type="o",lwd=2)lines(roc_obj_wilcox_univar_FPR_mean,roc_obj_wilcox_univar_TPR_mean,cex=0.4, col="red",type="o",lwd=2)lines(c(0,1),c(0,1),col="black")legend("bottomright", inset=.02, c("Multivarite: LASSO","Univarite: SPEARMAN", "Univarite: MANN-WHITNEY U TEST"), fill=c("blue","green","red"))

在這裡我們可以得出結論,LASSO比這兩種單變量特徵選擇方法具有更大的預測能力。更好看的差異ROC曲線下的面積(AUC ROC)之間的三種方法,以及能夠執行統計測試來解決如何重要ROC曲線之間的差異,讓我們做一個箱線圖的AUC ROC套索,單變量斯皮爾曼相關和Mann-Whitney U測試。

boxplot(roc_obj_multivar_AUC,roc_obj_univar_AUC,roc_obj_wilcox_univar_AUC,names=c("LASSO","SPEARMAN","MANN-WHITNEY U TEST"),col=c("blue","green","red"))mwu<-wilcox.test(roc_obj_wilcox_univar_AUC,roc_obj_multivar_AUC)mtext(paste0("LASSO vs. Mann-Whitney U test: P-value = ",mwu$p.value))

我們可以看到,Spearman correlation和Mann-Whitney U test單變量特徵選擇模型具有相當的AUC ROC指標(儘管Mann-Whitney U test較好),且兩者的AUC ROC即預測能力均明顯低於multivarite LASSO。

然而,這種比較可能存在偏差。談到單變量模型(Spearman和Mann-Whitney U檢驗),我們提到只有少數基因在多次檢驗的Bonferroni校正後是顯著的。所以我們在構建單變量模型的預測得分時只使用了少量的基因,而LASSO選擇了更多的基因~30個,請參閱github上的完整代碼。如果LASSO更好的預測能力僅僅是因為它的預測分數使用了更多的特徵呢?為了驗證這一假設,在下一節中,我們將暫時忽略Bonferroni校正,並使用Spearman相關性和Mann-Whitney U檢驗,單獨使用p值排序來確定~30個最具預測性的基因。換句話說,我們將使用與多品種相同數量的基因來構建其預測得分。通過選擇的基因數量來模擬LASSO的相應的單變量模型稱為SPEAR30 (Spearman correlation with ~30 differential expressed genes)和MWU30 (Mann-Whitney U test with ~30 differential expressed genes)。

性別預測:DESeq2與多元方法

在本節中,除了將LASSO與SPEAR30(具有約30個差異表達基因的Spearman相關性)模型和MWU30(具有約30個差異表達基因的Mann-Whitney U檢驗)模型進行比較之外,我們還將添加其他一些流行的單變量和多變量模型。

首先,當進行差異基因表達分析時,DESeq2是業界的一個黃金標準。該工具享有很高的聲譽,在RNAseq社區中非常受歡迎。這是一個單變量工具,即假設基因表達計數為負二項分布,它會執行逐個基因的測試。此外,它採用了方差穩定程序,其中高表達的基因有助於低表達的基因得到正確測試。比較DESeq2預測能力與Mann-Whitney U檢驗和Spearman相關性,這些檢驗本質上利用相同的單變量思想,但是與假定基因表達為負生物學分布的DESeq2相比,都執行非參數類型的檢驗,這將是很有意思的。執行參數測試。並行地,我們將計算DESEQ2_30模型,該模型使用與LASSO選擇的相同數目的基因(按與性別相關的p值排序)建立預測得分。類似於SPEAR30和MWU30模型。

其次,我們將添加另外兩個多元特徵選擇模型,以與LASSO和單變量模型進行比較。這兩個是偏最小二乘判別分析(PLS-DA)和隨機森林,它們都是通用的多元模型。其中一個(PLS-DA)和LASSO是線性的,另一個(Random Forest)是非線性的。在這裡,我們不僅旨在比較單變量或多變量特徵選擇模型,而且還想了解與線性LASSO和PLS-DA相比,非線性隨機森林能否改善預測。

如上一節所述,我們將通過將數據集分為多次訓練和測試來圍繞ROC曲線建立置信區間。它涉及很多編碼,我在這裡不介紹代碼,但是歡迎您在我的github上檢查它們。在下面,我僅介紹經過多次訓練測試後的每個模型的平均ROC曲線,以及AUC的箱線圖。

我們在這裡觀察到一些有趣的事情。首先,與所有多變量模型相比,所有單變量模型的預測能力似乎都更差。即使是最差的多元模型,在這裡是隨機森林(RF),其AUC ROC也明顯高於最好的單變量模型,在這裡似乎是Mann-Whitney U檢驗(MWU)。

其次,具有與LASSO選擇的基因數量相同的所有單變量模型(DESeq230,SPEAR30和MWU30)無法與所有其他單變量或多變量模型競爭,這暗示單變量模型的預測能力較差的原因不是由於數目不同特徵/基因的選擇,但由於構建預測得分的基因的等級和權重不同而異。

第三,與線性多變量LASSO和PLS-DA模型相比,非線性多變量隨機森林對RNAseq基因表達的預測效果似乎沒有改善。然而,根據我的經驗,許多生命科學問題通常都是這樣,在使用非線性分類器之前,通常值得檢查一下簡單的線性模型。

第四,也是最有趣的是,DESeq2單變量參數預測得分似乎不僅比多變量模型(LASSO, PLS-DA, Random Forest)表現更差,而且比單變量非參數模型,如Spearman相關和Mann-Whitney U檢驗也差。考慮到上述非參數測試的簡單性和DESeq2的卓越聲譽,這是相當出乎意料的。然而,事實證明,至少對於這個特定的數據集,簡單的Spearman和Mann-Whitney非參數測試在預測能力方面優於DESeq2。

LASSO,Ridge和Elastic Net

作為獎勵,在本節中,我們將比較LASSO(L1規範),Ridge(L2規範)和Elastic Net(L1和L2規範的組合)的預測能力的預測得分。 通常,懲罰線性模型族的這三個成員之間的區別並不明顯。 在不贅述的情況下(有很多文獻解釋了這種差異),我們僅強調LASSO是最保守的方法,因此由於生命科學數據的高噪聲水平,在生命科學中通常首選LASSO。 Elastic Net在Ridge的凸優化優勢和LASSO的嚴格性之間提供了很好的平衡,並且在癌症研究中非常受歡迎。 接下來,我們再次對RNAseq基因表達數據集進行100次訓練測試後,得出LASSO,Ridge和Elastic Net的平均ROC曲線,以及AUC ROC指標的箱線圖。

我們可以看到LASSO和Elastic Net給出了幾乎相同的ROC曲線,並且勝過了已知的最寬鬆的Ridge模型,這顯然不利於模型概括,因此對於預測目的無益,因此Ridge可能不是第一個生命科學數據的最佳選擇。

總結

在本文中,我們了解到,與單變量模型相比,多元統計模型似乎具有更好的預測能力。 至少對於本文研究的GTEX骨骼肌RNAseq基因表達數據而言,單變量差異基因表達工具DESeq2不僅比諸如LASSO,PLS-DA和Random Forest等多變量模型,而且與簡單非 參數單變量模型,例如Spearman相關性和Mann-Whitney U檢驗。

本文代碼:github/NikolayOskolkov/UnivariteVsMultivariteModels

作者:Nikolay Oskolkov

deephun翻譯組

相關焦點

  • 由淺入深,講解數控車宏程序如何編制,第一講,何為變量?
    一、宏程序中的變量雖然子程序對編制相同加工操作的程序非常有用,但用戶宏程序由於允許使用變量、算術和邏輯運算及條件轉移,使得編制相同加工操作的程序更方便,更容易。所以,用戶宏程序三大特點是:在用戶宏程序本體中,能使用變量;變量間可以運算;用宏指令可以給變量賦予實際值,那麼什麼是變量?1.變量定義變量用變量符號(#)和後面的變量號指定。
  • Python的 __name__ 變量,到底是個什麼東西?
    接著,因為這個 if 語句後面的表達式為真 true,函數 main() 就被調用了。而 main() 函數又調用了myFunction(),列印出變量的值__main__。在 importingScript.py 裡,__name__ 變量就被設置為 __main__。
  • 小「心機」,AutoCAD內置計算器的變量功能還可以這麼玩
    undefined在計算器的變量中,已經預設了兩個函數:鋼材線密度和鋁型材線密度。確實如此,接下來,就來多了解一些AutoCAD的計算器吧。AutoCAD計算器的基本功能undefined除了包含了科學計算器中的基本功能以外,AutoCAD的"快速計算器"還包括幾何函數、單位轉換和變量等功能。
  • 多變量函數怎麼做呢?
    多變量函數在高中數學中是非常多的一種題型。其實選擇很簡單:把變量變少轉化成只有一個變量的函數。再利用函數單調性求導直接做就行。或者利用不等式(均值不等式)。
  • AE表達式精通大法
    而且現在網絡上關於AE表達式的系統教程並不多,很多都是些零散教程,我們沒有辦法得到很好的系統教學。於是這一次,我花了大量時間學習研究同時結合自己以往在工作中對表達式的運用心得。為大家帶來這套系統的表達式教學。    在學習表達式之前我們需要對表達式有個基本的了解。首先我們需要排除一個想法,表達式真的像我們想像的那麼難學嗎?答案是否定的!
  • Selection Ratio:幫你解決頭疼的遺漏變量偏誤
    對全樣本直接做工資對是否上私立學校的回歸,相當於直接比較私立學校學生和公立學校學生,這兩組學生的組間平均工資的差異。然而,這個差值並不是準確的私立學校的教育回報率。因為私立學校學生和公立學校學生之間除了所上學校不同之外(我們關注的差別),還有很多系統性差別。比如私立學校學生,總體上平均總成績更好,其父母收入更高,能力更綜合優秀等。這些變量都是選擇性變量,造成了兩組人之間明顯的選擇性區別。
  • JS知識小點兒:變量
    一,變量1.ECMAScript的變量是鬆散型變量。*鬆散型變量:可以用來保存任何類型的數據,換句話來說,每個變量僅僅是一個用於保存的佔位符而而已。*定義變量要是用var操作符。(var是一個關鍵字),後跟變量名(既是一個標誌符)。
  • 「Java」基礎07:常量、變量和數據類型
    :所有的整數,比如0、100等小數常量:所有的小數,比如0.1、3.58等字符常量:單引號引起來,只能寫一個字符,必須有內容(空格也是字符),比如『a』、『 』、『嘻』等字符串常量:雙引號引起來,可以寫多個字符
  • STEM課程案例:光和影——尋找與控制科學現象中的定量與變量
    這樣有趣的現象可以很好地與學生的數學及科學學習結合起來,使學生在觀察現象的同時學習物理知識,並使用數學工具對物理量進行測定,對物理規律進行預測。物理、數學。二年級。120分鐘。首先直觀感受光和影的變化,之後在對長度、角度、高度、面積等物理量進行精確測量和記錄的基礎上猜測變量變化的情況。
  • AE表達式:回彈
    AE具備一個強大的功能,那就是表達式,通過表達式,建立圖層屬性與關鍵幀的相關關係,無需手動K幀,便可以製作出動畫效果。本文將講解表達式基礎,表達式的含義,並傳授一些調整表達式的方法,以滿足你的工作需求。那麼,什麼是表達式呢?對於經常閱讀Thougtbot的讀者來說,他們可能會對表達式非常熟悉。
  • Java中static變量作用和用法詳解
    用public修飾的static成員變量和成員方法本質是全局變量和全局方法,當聲明它類的對象市,不生成static變量的副本,而是類的所有實例共享同一個static變量。  static變量前可以有private修飾,表示這個變量可以在類的靜態代碼塊中,或者類的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用–廢話),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是訪問權限限定,static表示不要實例化就可以使用,這樣就容易理解多了。static前面加上其它訪問權限關鍵字的效果也以此類推。
  • 基因表達量高低分組的cox和連續變量cox回歸計算的HR值差異太大?
    因為我五年前做生存分析研發這個代碼的時候,就是根據基因表達量,把病人分成了高低表達兩個組,不管是使用cox還是km,都是這樣做的。但是最近有學生反映,使用cox還是km拿到的基因的生存效果是一致的, 就是風險因子和保護因子的分類問題。主要是靠HR值來判斷咯。
  • Stata如何實現變量快速拼接?
    本次培訓採用理論與案例相結合的方式,旨在幫助零基礎學員輕鬆入門Python,由淺入深學習和掌握Python爬蟲技術,並明確未來更進一步的學習方向。詳細培訓大綱及報名方式,請點擊文末閱讀原文呦~在數據處理中,我們可能需要將多個變量拼接為一個變量。這一操作可以通過replace或gen命令實現。但是,這種方法僅適用於字符型變量的拼接。
  • 變量:看見中國小趨勢
    關注小趨勢,有兩個主要的原因:第一,隨著社會的發展,社會分化日益顯著,大趨勢不足以準確描述社會的多向度發展;第二,從社會演進的角度來看,很少出現涇渭分明的新舊交替,新的觀念、新的現象往往是由原有的一些小趨勢發源的,這些小趨勢原本並不佔據主流地位,但隨著社會的變化,卻能引起社會風尚的深刻變革。
  • 《記憶裂痕》書評 | 菲利普·迪克——變量人
    《頭骨》和《蝴蝶》分別描述了回到過去和預測未來對現在產生的影響。彼時迪克致力於講好一個完整的故事,事件發展完全如讀者所料,沒有涉及任何可能出現的意外或悖論。《記憶裂痕》同樣是一個預測未來的故事。迪克加入了一個概念---記憶。雖然用「失憶」逃避了預知未來如何對未來產生影響的討論,使故事的結局略顯無趣,但「失憶」所帶來的身份不確定和懸疑感為迪克開闢的一個全新的領域。
  • 投資紐西之謎背後的思考:新消費市場的變量
    淘品牌的組織能力和商業成本結構,往往是以淘系站內的流量運營和露出為核心,這也造成了淘品牌走出淘寶要面臨成本結構再造的問題,這在阿里開啟「淘寶」和「天貓」雙品牌運行之後日益明顯。 而今天,許多品牌的站內預算被大量遷移到了社交媒介上,同樣出現了不少以社交媒介投放和傳播為核心增長驅動力的品牌。不同於淘寶上商家比拼位置的露出能力,社交媒介是個更加完全數位化的物種。
  • 你見過哪些奇葩的變量名?
    如何給變量命名。有時候看到一個奇葩的變量名,能讓你笑一天。有一個枚舉叫做 FiveLine, 看這名字不知道五行是什麼鬼, 點進去一看代碼enum FiveLine { Gold, Wood, Water, Fire, Earth };@陳大俠變量命名 FiveLine 是中國文化和西方文化的交融碰撞,多音字「行」體現了中文的博大精深!
  • 西門子S7-1200 PLC編程 博途-變量
    數據類型22.PLC的CPU中可以按照位,字節,字,雙字對存儲單元進行尋址,具體表現形式位,只有兩種狀態,0和1,表示開關量的狀態,斷開和接通>雙字,兩個字組成一個雙字,雙字(MD0)=2字(MW0,MW2)=4位元組(MB0,MB1,MB2,MB3)3打開軟體在PLC變量可以建立變量,類型主要是I,Q,M。
  • 《金庸群俠傳5》全開關變量導出至文檔教程 開關變量怎麼導出
    導 讀 第1頁: 展開 以開關為例,變量也是一樣,各位舉一反三,看看能不能把其他的也導出來。 1.打開工程。 2.隨便建一個空白事件。 3.插入事件,選擇開關操作。
  • 變量到底是什麼一回事?解釋一下
    可以解釋為 dim 變量名 as 數據類型變量保存暫時的值,並且執行的過程中數值可以變化,所以稱為變量。【插入】,【模塊】。編寫了以下簡單的代碼。數學上x+20明明比x多了個20。這裡的x就是變量,我們可以看做是一個容器,比如一個小盒子。如下圖,X=10,理解成將10裝入到這個小盒子中.