99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀R實(shí)現(xiàn)多元線性回歸分析!
R實(shí)現(xiàn)多元線性回歸分析!
2016-06-20
收藏
R中的線性回歸函數(shù)比較簡(jiǎn)單,就是lm(),比較復(fù)雜的是對(duì)線性模型的診斷和調(diào)整。這里結(jié)合Statistical Learning和杜克大學(xué)的Data Analysis and Statistical Inference的章節(jié)以及《R語(yǔ)言實(shí)戰(zhàn)》的OLS(Ordinary Least Square)回歸模型章節(jié)來(lái)總結(jié)一下,診斷多元線性回歸模型的操作分析步驟。

1、選擇預(yù)測(cè)變量

因變量比較容易確定,多元回歸模型中難在自變量的選擇。自變量選擇主要可分為向前選擇(逐次加使RSS最小的自變量),向后選擇(逐次扔掉p值最大的變量)。個(gè)人傾向于向后選擇法,一來(lái)p值比較直觀,模型返回結(jié)果直接給出了各變量的p值,卻沒(méi)有直接給出RSS;二來(lái)當(dāng)自變量比較多時(shí),一個(gè)個(gè)加比較麻煩。


構(gòu)建一個(gè)回歸模型后,先看F統(tǒng)計(jì)量的p值,這是對(duì)整個(gè)模型的假設(shè)檢驗(yàn),原假設(shè)是各系數(shù)都為0,如果連這個(gè)p值都不顯著,無(wú)法證明至少有一個(gè)自變量對(duì)因變量有顯著性影響,這個(gè)模型便不成立。然后看Adjusted R2,每調(diào)整一次模型,應(yīng)該力使它變大;Adjusted R2越大說(shuō)明模型中相關(guān)的自變量對(duì)因變量可解釋的變異比例越大,模型的預(yù)測(cè)性就越好。

構(gòu)建了線性模型后,如果是一元線性回歸,可以畫模型圖初步判斷一下線性關(guān)系(多元回歸模型不好可視化):


2、模型診斷

確定了回歸模型的自變量并初步得到一個(gè)線性回歸模型,并不是直接可以拿來(lái)用的,還要進(jìn)行驗(yàn)證和診斷。診斷之前,先回顧多元線性回歸模型的假設(shè)前提(by Data Analysis and Statistical Inference):

1.(數(shù)值型)自變量要與因變量有線性關(guān)系;
2.殘差基本呈正態(tài)分布;
3.殘差方差基本不變(同方差性);
4.殘差(樣本)間相關(guān)獨(dú)立。

一個(gè)好的多元線性回歸模型應(yīng)當(dāng)盡量滿足這4點(diǎn)假設(shè)前提。

用lm()構(gòu)造一個(gè)線性模型fit后,plot(fit)即可返回4張圖(可以par(mfrow=c(2,2))一次展現(xiàn)),這4張圖可作初步檢驗(yàn):



左上圖用來(lái)檢驗(yàn)假設(shè)1,如果散點(diǎn)看不出什么規(guī)律,則表示線性關(guān)系良好,若有明顯關(guān)系,則說(shuō)明非線性關(guān)系明顯。右上圖用來(lái)檢驗(yàn)假設(shè)2,若散點(diǎn)大致都集中在QQ圖中的直線上,則說(shuō)明殘差正態(tài)性良好。左下圖用來(lái)檢驗(yàn)假設(shè)3,若點(diǎn)在曲線周圍隨機(jī)分布,則可認(rèn)為假設(shè)3成立;若散點(diǎn)呈明顯規(guī)律,比如方差隨均值而增大,則越往右的散點(diǎn)上下間距會(huì)越大,方差差異就越明顯。假設(shè)4的獨(dú)立性無(wú)法通過(guò)這幾張圖來(lái)檢驗(yàn),只能通過(guò)數(shù)據(jù)本身的來(lái)源的意義去判斷。

右下圖是用來(lái)檢驗(yàn)異常值。異常值與三個(gè)概念有關(guān):

1.離群點(diǎn):y遠(yuǎn)離散點(diǎn)主體區(qū)域的點(diǎn)
2.杠桿點(diǎn):x遠(yuǎn)離散點(diǎn)主體區(qū)域的點(diǎn),一般不影響回歸直線的斜率
3.強(qiáng)影響點(diǎn):影響回歸直線的斜率,一般是高杠桿點(diǎn)。

對(duì)于多元線性回歸,高杠桿點(diǎn)不一定就是極端點(diǎn),有可能是各個(gè)變量的取值都正常,但仍然偏離散點(diǎn)主體。

對(duì)于異常值,可以謹(jǐn)慎地刪除,看新的模型是否效果更好。

R語(yǔ)言實(shí)戰(zhàn)》里推薦了更好的診斷方法,總結(jié)如下。

(1)多元線性回歸假設(shè)驗(yàn)證:

gvlma包的gvlma()函數(shù)可對(duì)擬合模型的假設(shè)作綜合驗(yàn)證,并對(duì)峰度、偏度進(jìn)行驗(yàn)證。



最后的Global Stat是對(duì)4個(gè)假設(shè)條件進(jìn)行綜合驗(yàn)證,通過(guò)了即表示4個(gè)假設(shè)驗(yàn)證都通過(guò)了。最后的Heterosceasticity是進(jìn)行異方差檢測(cè)。注意這里假設(shè)檢驗(yàn)的原假設(shè)都是假設(shè)成立,所以當(dāng)p>0.05時(shí),假設(shè)才能能過(guò)驗(yàn)證。

如果綜合驗(yàn)證不通過(guò),也有其他方法對(duì)4個(gè)假設(shè)條件分別驗(yàn)證:

線性假設(shè)



返回的圖是各個(gè)自變量與殘差(因變量)的線性關(guān)系圖,若存著明顯的非線性關(guān)系,則需要對(duì)自變量作非線性轉(zhuǎn)化。書中說(shuō)這張圖表明線性關(guān)系良好。

正態(tài)性


qqPlot()可以生成交互式的qq圖,選中異常點(diǎn),就返回該點(diǎn)的名稱。該圖中除了Nevad點(diǎn),其他點(diǎn)都在直線附近,可見(jiàn)正態(tài)性良好。

同方差性


p值大于0.05,可認(rèn)為滿足方差相同的假設(shè)。

獨(dú)立性


p值大于0.05,可認(rèn)為誤差之間相互獨(dú)立。

除了以上4點(diǎn)基本假設(shè),還有其他方面需要進(jìn)行診斷。

(2)多重共線性

理想中的線性模型各個(gè)自變量應(yīng)該是線性無(wú)關(guān)的,若自變量間存在共線性,則會(huì)降低回歸系數(shù)的準(zhǔn)確性。一般用方差膨脹因子VIF(Variance Inflation Factor)來(lái)衡量共線性,《統(tǒng)計(jì)學(xué)習(xí)》中認(rèn)為VIF超過(guò)5或10就存在共線性,《R語(yǔ)言實(shí)戰(zhàn)》中認(rèn)為VIF大于4則存在共線性。理想中的線性模型VIF=1,表完全不存在共線性。



可見(jiàn)這4個(gè)自變量VIF都比較小,可認(rèn)為不存在多重共線性的問(wèn)題。

(3)異常值檢驗(yàn)

離群點(diǎn)

離群點(diǎn)有三種判斷方法:一是用qqPlot()畫QQ圖,落在置信區(qū)間(上圖中兩條虛線)外的即可認(rèn)為是離群點(diǎn),如上圖中的Nevad點(diǎn);一種是判斷學(xué)生標(biāo)準(zhǔn)化殘差值,絕對(duì)值大于2(《R語(yǔ)言實(shí)戰(zhàn)》中認(rèn)為2,《統(tǒng)計(jì)學(xué)習(xí)》中認(rèn)為3)的可認(rèn)為是離群點(diǎn)。


還有一種方法是利用car包里的outlierTest()函數(shù)進(jìn)行假設(shè)檢驗(yàn)



這個(gè)函數(shù)用來(lái)檢驗(yàn)最大的標(biāo)準(zhǔn)化殘差值,如果p>0.05,可以認(rèn)為沒(méi)有離群點(diǎn);若p<0.05,則該點(diǎn)是離群點(diǎn),但不能說(shuō)明只有一個(gè)離群點(diǎn),可以把這個(gè)點(diǎn)刪除之后再作檢驗(yàn)。第三種方法可以與第二種方法結(jié)合起來(lái)使用。

高杠桿點(diǎn)

高杠桿值觀測(cè)點(diǎn),即是與其他預(yù)測(cè)變量有關(guān)的離群點(diǎn)。換句話說(shuō),它們是由許多異常的預(yù)測(cè)變量值組合起來(lái)的,與響應(yīng)變量值沒(méi)有關(guān)系?!督y(tǒng)計(jì)學(xué)習(xí)》中給出了一個(gè)杠桿統(tǒng)計(jì)量,《R語(yǔ)言實(shí)戰(zhàn)》中給出了一種具體的操作方法。(兩本書也稍有出入,《統(tǒng)計(jì)學(xué)習(xí)》中平均杠桿值為(p+1)/n,而在《R語(yǔ)言實(shí)戰(zhàn)》中平均杠桿值為p/n;事實(shí)上在樣本量n比較大時(shí),幾乎沒(méi)有差別。)


超過(guò)2倍或3倍的平均杠桿值即可認(rèn)為是高杠桿點(diǎn),這里把Alaska和California作為高杠桿點(diǎn)。

強(qiáng)影響點(diǎn)

強(qiáng)影響點(diǎn)是那種若刪除則模型的系數(shù)會(huì)產(chǎn)生明顯的變化的點(diǎn)。一種方法是計(jì)算Cook距離,一般來(lái)說(shuō), Cook’s D值大于4/(n-k -1),則表明它是強(qiáng)影響點(diǎn),其中n 為樣本量大小, k 是預(yù)測(cè)變量數(shù)目。



實(shí)際上這就是前面診斷的4張圖之一,語(yǔ)句還是plot(fit),which=4表示指定第4張圖,cook.levels可設(shè)定標(biāo)準(zhǔn)值。紅色虛線以上就返回了強(qiáng)影響點(diǎn)。

car包里的influencePlot()函數(shù)能一次性同時(shí)檢查離群點(diǎn)、高杠桿點(diǎn)、強(qiáng)影響點(diǎn)。


縱坐標(biāo)超過(guò)+2或小于-2的點(diǎn)可被認(rèn)為是離群點(diǎn),水平軸超過(guò)0.2或0.3的州有高杠桿值(通常為預(yù)測(cè)值的組合)。圓圈大小與影響成比例,圓圈很大的點(diǎn)可能是對(duì)模型參數(shù)的估計(jì)造成的不成比例影響的強(qiáng)影響點(diǎn)。

3、模型調(diào)整

到目前為止,《統(tǒng)計(jì)學(xué)習(xí)》中提到的多元線性回歸模型潛在的問(wèn)題,包括4個(gè)假設(shè)不成立、異常值、共線性的診斷方法在上面已經(jīng)全部得到解決。這里總結(jié)、延伸《R語(yǔ)言實(shí)戰(zhàn)》里提到的調(diào)整方法——

刪除觀測(cè)點(diǎn)

對(duì)于異常值一個(gè)最簡(jiǎn)單粗暴又高效的方法就是直接刪除,不過(guò)有兩點(diǎn)要注意。一是當(dāng)數(shù)據(jù)量大的時(shí)候可以這么做,若數(shù)據(jù)量較小則應(yīng)慎重;二是根據(jù)數(shù)據(jù)的意義判斷,若明顯就是錯(cuò)誤就可以直接刪除,否則需判斷是否會(huì)隱藏著深層的現(xiàn)象。

另外刪除觀測(cè)點(diǎn)后要與刪除之前的模型作比較,看模型是否變得更好。

變量變換



在進(jìn)行非線性變換之前,先看看4個(gè)假設(shè)是否成立,如果成立可以不用變換;沒(méi)必要追求更好的擬合效果而把模型搞得太復(fù)雜,這有可能出現(xiàn)過(guò)擬合現(xiàn)象。如果連假設(shè)檢驗(yàn)都不通過(guò),可以通過(guò)變量變換來(lái)調(diào)整模型。這里只討論線性關(guān)系不佳的情況,其他情況遇到了再說(shuō)。

(1)多項(xiàng)式回歸

如果殘差圖中呈現(xiàn)明顯的非線性關(guān)系,可以考慮對(duì)自變量進(jìn)行多項(xiàng)式回歸。舉一個(gè)例子:


可以看到這個(gè)一元線性回歸模型的殘差圖中,散點(diǎn)的規(guī)律還是比較明顯,說(shuō)明線性關(guān)系較弱。


將自變量進(jìn)行2次多項(xiàng)式回歸后,發(fā)現(xiàn)現(xiàn)在的殘差圖好多了,散點(diǎn)基本無(wú)規(guī)律,線性關(guān)系較明顯。

再看看兩個(gè)模型的整體效果——




可見(jiàn)多項(xiàng)式回歸的模型Adjusted R2也增大了,模型的解釋性也變強(qiáng)了。

多項(xiàng)式回歸在《統(tǒng)計(jì)學(xué)習(xí)》后面的非線性模型中還會(huì)提到,到時(shí)候再討論。

(2)Box-Tidwell變換

car包中的boxTidwell() 函數(shù)通過(guò)獲得預(yù)測(cè)變量?jī)鐢?shù)的最大似然估計(jì)來(lái)改善線性關(guān)系。



可以發(fā)現(xiàn)殘差圖和Adjusted R2的提升都甚微,因此沒(méi)有必要作非線性轉(zhuǎn)換。

4、模型分析

(1)模型比較

前面只是簡(jiǎn)單得用Adjusted R2來(lái)比較模型,《R語(yǔ)言實(shí)戰(zhàn)》里介紹了可以用方差分析來(lái)比較嵌套模型(即它的一些項(xiàng)完全包含在另一個(gè)模型中)有沒(méi)有顯著性差異。方差分析的思想是:如果線性模型y~x1+x2+x3與y~x1+x2沒(méi)有顯著性差異,若同時(shí)x3變量對(duì)模型也不顯著,那就沒(méi)必要加上變量x3。下面進(jìn)行試驗(yàn):


Income和Frost兩個(gè)變量不顯著,兩個(gè)模型之間沒(méi)有顯著性差異,就可以不加這兩個(gè)變量。刪去這兩個(gè)不顯著的變量后,R2略微減少,Adjusted R2增大,這也符合二者的定義。

R語(yǔ)言實(shí)戰(zhàn)》里還介紹到了用AIC(Akaike Information Criterion,赤池信息準(zhǔn)則)值來(lái)比較模型,AIC值越小的模型優(yōu)先選擇,原理不明。



第二個(gè)模型AIC值更小,因此選第二個(gè)模型(真是簡(jiǎn)單粗暴)。注:ANOVA需限定嵌套模型,AIC則不需要??梢?jiàn)AIC是更簡(jiǎn)單也更實(shí)用的模型比較方法。

(2)變量選擇

這里的變量選擇與最開(kāi)始的變量選擇同也不同,雖然是一回事,但一開(kāi)始是一個(gè)粗略的變量的選擇,主要是為了構(gòu)建模型;這里則要進(jìn)行細(xì)致的變量選擇來(lái)調(diào)整模型。

逐步回歸

前面提到的向前或向后選擇或者是同時(shí)向前向后選擇變量都是逐步回歸法。MASS包中的stepAIC() 函數(shù)可以實(shí)現(xiàn)逐步回歸模型(向前、向后和向前向后),依據(jù)的是精確AIC準(zhǔn)則。以下實(shí)例是向后回歸法:



可見(jiàn)原本的4元回歸模型向后退了兩次,最終穩(wěn)定成了2元回歸模型,與前面模型比較的結(jié)果一致。

全子集回歸

R語(yǔ)言實(shí)戰(zhàn)》里提到了逐步回歸法的局限:不是每個(gè)模型都評(píng)價(jià)了,不能保證選擇的是“最佳”模型。比如上例中,從Murder ~ Population + Illiteracy + Income + Frost到Murder ~ Population + Illiteracy + Income再到Murder~Population+Illiteracy雖然AIC值確實(shí)在減少,但Murder ~ Population + Illiteracy + Frost沒(méi)評(píng)價(jià),如果遇到變量很多的情況下,逐步回歸只沿一個(gè)方向回歸,就有可能錯(cuò)過(guò)最優(yōu)的回歸方向。




橫坐標(biāo)是變量,縱坐標(biāo)是Adjusted R2,可見(jiàn)除截距項(xiàng)以外,只選定Population和Illiteracy這兩個(gè)變量,可以使線性模型有最大的Adjusted R2。

全子集回歸比逐步回歸范圍更廣,模型優(yōu)化效果更好,但是一旦變量數(shù)多了之后,全子集回歸迭代的次數(shù)就很多,就會(huì)很慢。

事實(shí)上,變量的選擇不是機(jī)械式地只看那幾個(gè)統(tǒng)計(jì)指標(biāo),更主要的是根據(jù)數(shù)據(jù)的實(shí)際意義,從業(yè)務(wù)角度上來(lái)選擇合適的變量。

線性模型變量的選擇在《統(tǒng)計(jì)學(xué)習(xí)》后面的第6章還會(huì)繼續(xù)講到,到時(shí)繼續(xù)綜合討論。

(3)交互項(xiàng)

交互項(xiàng)《統(tǒng)計(jì)學(xué)習(xí)》中花了一定篇幅來(lái)描寫,但在《R語(yǔ)言實(shí)戰(zhàn)》是在方差分析章節(jié)中討論。添加變量間的交互項(xiàng)有時(shí)可以改善線性關(guān)系,提高Adjusted R2。針對(duì)數(shù)據(jù)的實(shí)際意義,如果兩個(gè)基本上是獨(dú)立的,也很難產(chǎn)生交互、產(chǎn)生協(xié)同效應(yīng)的變量,那就不必考慮交互項(xiàng);只有從業(yè)務(wù)角度分析,有可能產(chǎn)生協(xié)同效應(yīng)的變量間才考慮交互項(xiàng)。

涉及到交互項(xiàng)有一個(gè)原則:如果交互項(xiàng)是顯著的,那么即使變量不顯著,也要放在回歸模型中;若變量和交互項(xiàng)都不顯著,則可以都不放。

(4)交叉驗(yàn)證

Andrew Ng的Machine Learning中就提到了,模型對(duì)舊數(shù)據(jù)擬合得好不一定就對(duì)新數(shù)據(jù)預(yù)測(cè)得好。因此一個(gè)數(shù)據(jù)集應(yīng)當(dāng)被分兩訓(xùn)練集和測(cè)試集兩部分(或者訓(xùn)練集、交叉驗(yàn)證集、測(cè)試集三部分),訓(xùn)練好的模型還要在新數(shù)據(jù)中測(cè)試性能。

所謂交叉驗(yàn)證,即將一定比例的數(shù)據(jù)挑選出來(lái)作為訓(xùn)練樣本,另外的樣本作保留樣本,先在訓(xùn)練樣本上獲取回歸方程,然后在保留樣本上做預(yù)測(cè)。由于保留樣本不涉及模型參數(shù)的選擇,該樣本可獲得比新數(shù)據(jù)更為精確的估計(jì)。

在k 重交叉驗(yàn)證中,樣本被分為k個(gè)子樣本,輪流將k-1個(gè)子樣本組合作為訓(xùn)練集,另外1個(gè)子樣本作為保留集。這樣會(huì)獲得k 個(gè)預(yù)測(cè)方程,記錄k 個(gè)保留樣本的預(yù)測(cè)表現(xiàn)結(jié)果,然后求其平均值。

bootstrap包中的crossval()函數(shù)可以實(shí)現(xiàn)k重交叉驗(yàn)證。



這個(gè)自定義的shrinkage()函數(shù)用來(lái)做k重交叉驗(yàn)證,比計(jì)算訓(xùn)練集和交叉驗(yàn)證集的R方差異。這個(gè)函數(shù)里涉及到一個(gè)概念:復(fù)相關(guān)系數(shù)。復(fù)相關(guān)系數(shù)實(shí)際上就是y和fitted(y)的簡(jiǎn)單相關(guān)系數(shù)。對(duì)于一元線性回歸,R2就是簡(jiǎn)單相關(guān)系數(shù)的平方;對(duì)于多元線性回歸,R2是復(fù)相關(guān)系數(shù)的平方。這個(gè)我沒(méi)有成功地從公式上推導(dǎo)證明成立,就記下吧。這個(gè)方法用到了自助法的思想,這個(gè)在統(tǒng)計(jì)學(xué)習(xí)后面會(huì)細(xì)致講到。



可見(jiàn)這個(gè)4元回歸模型在交叉驗(yàn)證集中的R2下降了0.12之多。若換成前面分析的2元回歸模型——



這次R2下降只有約0.05。R2減少得越少,則預(yù)測(cè)得越準(zhǔn)確。

5、模型應(yīng)用

(1)預(yù)測(cè)

最重要的應(yīng)用毫無(wú)疑問(wèn)就是用建立的模型進(jìn)行預(yù)測(cè)了。構(gòu)建好模型后,可用predict()函數(shù)進(jìn)行預(yù)測(cè)——




這里newdata提供了兩個(gè)全新的點(diǎn)供模型來(lái)預(yù)測(cè)。還可以用interval指定返回置信區(qū)間(confidence)或者預(yù)測(cè)區(qū)間(prediction),這也反映了統(tǒng)計(jì)與機(jī)器學(xué)習(xí)的一個(gè)差異——可解釋性。注意置信區(qū)間考慮的是平均值,而預(yù)測(cè)區(qū)間考慮的是單個(gè)觀測(cè)值,所以預(yù)測(cè)區(qū)間永遠(yuǎn)比置信區(qū)間廣,因此預(yù)測(cè)區(qū)間考慮了單個(gè)觀測(cè)值的不可約誤差;而平均值同時(shí)也把不可約誤差給抵消掉了。

(2)相對(duì)重要性

有的時(shí)候需要解釋模型中各個(gè)自變量對(duì)因變量的重要程度,簡(jiǎn)單處理可以直接看系數(shù)即可,《R語(yǔ)言實(shí)戰(zhàn)》里自定義了一個(gè)relweights()函數(shù)可以計(jì)算各個(gè)變量的權(quán)重:




不要在意算法原理和代碼邏輯這種細(xì)節(jié),直接看結(jié)果:






在本例中,相對(duì)權(quán)重與系數(shù)的排序結(jié)果一致。推薦用相對(duì)權(quán)重。

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }