vegan::envfit基本功能的python實(shí)現(xiàn)

筆記內(nèi)容:

  • R vegan包envfit的output及其計(jì)算
  • python實(shí)現(xiàn):見(jiàn)github
  • 注意

R vegan包envfit的output及其計(jì)算

vegan::envfit用法見(jiàn)R使用筆記: scatterplot with confidence ellipses;envfit的實(shí)現(xiàn)及釋意球昨,在R中其實(shí)只用envfit(mds_point, env, permutation=999)就可以得到envfit的結(jié)果盏触。

library(vegan)
data(iris)
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

iris_data = iris[,1:4]
iris_env = iris[,1:5]  # 包括一個(gè)factor,4個(gè)vector

ord = data.frame(cmdscale(dist(iris_data),k=2))
colnames(ord) = c('X1','X2')  # ord為pcoa的坐標(biāo)
envfit_result = envfit(ord,iris_env,permutations = 100)

envfit_result # envfit的結(jié)果:
***VECTORS

                   X1       X2     r2   Pr(>r)   
Sepal.Length  0.48219  0.87607 0.9579 0.009901 **
Sepal.Width  -0.11499  0.99337 0.8400 0.009901 **
Petal.Length  0.98013 -0.19836 0.9981 0.009901 **
Petal.Width   0.97852 -0.20615 0.9366 0.009901 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Permutation: free
Number of permutations: 100

***FACTORS:

Centroids:
                       X1      X2
Speciessetosa     -2.6424  0.1909
Speciesversicolor  0.5332 -0.2455
Speciesvirginica   2.1092  0.0547

Goodness of fit:
            r2   Pr(>r)   
Species 0.8868 0.009901 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Permutation: free
Number of permutations: 100

input包括每個(gè)樣本的降維坐標(biāo)(或者你把整個(gè)降維結(jié)果cmdscale()傳給envfit也可以),環(huán)境變量表以及permutation的次數(shù)。permutation參數(shù)用于P值的計(jì)算。

結(jié)果分為vector和factor兩個(gè)部分通危,其中vector結(jié)果是對(duì)數(shù)值型的環(huán)境變量分析。在envfit_result中結(jié)構(gòu)如下所示灌曙。
$arrows是各vector的坐標(biāo);
$r為goodness of fit, 即該環(huán)境變量的樣本點(diǎn)在linear model上擬合的程度菊碟。
$pvals為經(jīng)過(guò)n次permutation計(jì)算,得到n個(gè)r_shuffle值在刺,大于等于真實(shí)r值的個(gè)數(shù)/n.

arrows的計(jì)算:

r2(goodness of fit / coefficient of determination)的計(jì)算:

對(duì)factor而言:
$centroids為各factor中各level的坐標(biāo)
$r為goodness of fit, 各level只有一個(gè)r值
$pvals permutation得到的P值


計(jì)算:

SSW和SSB的計(jì)算及ANOVA相關(guān)見(jiàn)這個(gè)連接

python實(shí)現(xiàn)

python代碼見(jiàn)github https://github.com/CS0000/envfit_py
要用到這些模塊:

import pandas as pd
from sklearn.datasets import load_iris
from skbio.stats.ordination import pcoa
from math import sqrt
from scipy.spatial.distance import squareform, pdist
from sklearn.preprocessing import scale
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
import numpy as np

見(jiàn)github中的envfit2py.py腳本逆害,在if __name__ == '__main__':里面load進(jìn)數(shù)據(jù)头镊,調(diào)用函數(shù)就可以了。

注意

  1. anvova table的計(jì)算
  2. R envfit的源代碼索引:
    envfit.default.R:envfit函數(shù)code,調(diào)用了vectorfit和factorfit魄幕。
    vectorfit.R
    factorfit.R
    centroids.cca.R : 在factorfit.R中計(jì)算centroids
    goffactor.c:用到的C代碼:可以通過(guò).Callvegan:::來(lái)調(diào)用
  3. ...用python寫(xiě)一遍envfit的本意是希望節(jié)省時(shí)間相艇,減少內(nèi)存的占用。但是這個(gè)腳本就節(jié)省時(shí)間而言一點(diǎn)也不樂(lè)觀纯陨,甚至比R還慢...=_=坛芽。后面考慮用多線程,但如果多線程也只能勉強(qiáng)達(dá)到R的用的時(shí)間翼抠,那還有什么意義...? 優(yōu)化之路道阻且長(zhǎng)咙轩。
  4. Python和R的output還是存在一些差別,并不能保證完全一毛一樣阴颖。似乎因?yàn)镽對(duì)linear model的底層算法和python不太一樣活喊,所以會(huì)有差異。介于linear model在R扒到底都是C寫(xiě)的了量愧,我完全看不懂钾菊,所以...=_=后面如果要用到了,還會(huì)再優(yōu)化的偎肃。
  5. 這里只實(shí)現(xiàn)了envfit最最最基本的功能煞烫,envfit似乎還可以給croodination設(shè)置weight,我在這里沒(méi)有設(shè)置软棺。
  6. vegan包文檔中對(duì)envfit的描述:
    Function envfit finds vectors or factor averages of environmental variables... If X is a data.frame, envfit uses factorfit for factor variables and vectorfit for other variables. If X is a matrix or a vector, envfit uses only vectorfit. Alternatively, the model can be defined a simplified model formula, where the left hand side must be an ordination result object or a matrix of ordination scores, and right hand side lists the environmental variables.
    Functions vectorfit and factorfit can be called directly. Function vectorfit finds directions in the ordination space towards which the environmental vectors change most rapidly and
    to which they have maximal correlations with the ordination configuration
    . Function factorfit finds averages of ordination scores for factor levels. Function factorfit treats ordered and unordered factors similarly.
    If permutations > 0, the ‘significance’ of fitted vectors or factors is assessed using permutation of environmental variables. The goodness of fit statistic is squared correlation coefficient (r2). For factors this is defined as r2 = 1 ? ssw/sst, where ssw and sst are within-group and total sums of squares.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末红竭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子喘落,更是在濱河造成了極大的恐慌茵宪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘦棋,死亡現(xiàn)場(chǎng)離奇詭異稀火,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)赌朋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)凰狞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人沛慢,你說(shuō)我怎么就攤上這事赡若。” “怎么了团甲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵逾冬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)身腻,這世上最難降的妖魔是什么产还? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮嘀趟,結(jié)果婚禮上脐区,老公的妹妹穿的比我還像新娘。我一直安慰自己她按,他們只是感情好牛隅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著尤溜,像睡著了一般倔叼。 火紅的嫁衣襯著肌膚如雪汗唱。 梳的紋絲不亂的頭發(fā)上宫莱,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音哩罪,去河邊找鬼授霸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛际插,可吹牛的內(nèi)容都是我干的碘耳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼框弛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辛辨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瑟枫,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤斗搞,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后慷妙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體僻焚,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年膝擂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虑啤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡架馋,死狀恐怖狞山,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叉寂,我是刑警寧澤萍启,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站办绝,受9級(jí)特大地震影響伊约,放射性物質(zhì)發(fā)生泄漏姚淆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一屡律、第九天 我趴在偏房一處隱蔽的房頂上張望腌逢。 院中可真熱鬧,春花似錦超埋、人聲如沸搏讶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)媒惕。三九已至,卻和暖如春来庭,著一層夾襖步出監(jiān)牢的瞬間妒蔚,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工月弛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肴盏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓帽衙,卻偏偏與公主長(zhǎng)得像菜皂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子厉萝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容