當前位置:首頁 » 編程語言 » python回歸p值

python回歸p值

發布時間: 2022-08-17 00:26:04

A. 如何用python寫 數據分析工具

  • 數據導入

  • 導入本地的或者web端的CSV文件;

  • 數據變換;

  • 數據統計描述;

  • 假設檢驗

  • 單樣本t檢驗;

  • 可視化;

  • 創建自定義函數。

  • 數據導入

    這是很關鍵的一步,為了後續的分析我們首先需要導入數據。通常來說,數據是CSV格式,就算不是,至少也可以轉換成CSV格式。在Python中,我們的操作如下:

    Python

    1

    2

    3

    4

    5

    6

    7

    8

  • import pandas as pd

    # Reading data locally

    df = pd.read_csv('/Users/al-ahmadgaidasaad/Documents/d.csv')

    # Reading data from web

    data_url = "t/Analysis-with-Programming/master/2014/Python/Numerical-Descriptions-of-the-Data/data.csv"

    df = pd.read_csv(data_url)

  • 為了讀取本地CSV文件,我們需要pandas這個數據分析庫中的相應模塊。其中的read_csv函數能夠讀取本地和web數據。

    數據變換

    既然在工作空間有了數據,接下來就是數據變換。統計學家和科學家們通常會在這一步移除分析中的非必要數據。我們先看看數據:

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

  • # Head of the data

    print df.head()

    # OUTPUT

    0 12432934148330010553

    1 41589235 4287806335257

    2 17871922 19551074 4544

    317152 14501 3536 1960731687

    4 12662385 25303315 8520

    # Tail of the data

    print df.tail()

    # OUTPUT

    74 2505 20878 3519 1973716513

    7560303 40065 7062 1942261808

    76 63116756 3561 1591023349

    7713345 38902 2583 1109668663

    78 2623 18264 3745 1678716900

  • 對R語言程序員來說,上述操作等價於通過print(head(df))來列印數據的前6行,以及通過print(tail(df))來列印數據的後6行。當然Python中,默認列印是5行,而R則是6行。因此R的代碼head(df, n = 10),在Python中就是df.head(n = 10),列印數據尾部也是同樣道理。

    在R語言中,數據列和行的名字通過colnames和rownames來分別進行提取。在Python中,我們則使用columns和index屬性來提取,如下:

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

  • # Extracting column names

    print df.columns

    # OUTPUT

    Index([u'Abra', u'Apayao', u'Benguet', u'Ifugao', u'Kalinga'], dtype='object')

    # Extracting row names or the index

    print df.index

    # OUTPUT

    Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78], dtype='int64')

  • 數據轉置使用T方法,

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

  • # Transpose data

    print df.T

    # OUTPUT

    01 23 45 67 89

    Abra1243 41581787171521266 5576 927215401039 5424

    Apayao2934 92351922145012385 7452109917038138210588

    Benguet148 42871955 353625307712796 24632592 1064

    Ifugao3300

    ... 69 70 71 72 73 74 75 76 77

    Abra ...12763 247059094 620913316 250560303 631113345

    Apayao ...376251953235126 6335386132087840065 675638902

    Benguet... 2354 4045 5987 3530 2585 3519 7062 3561 2583

    Ifugao ... 9838171251894015560 774619737194221591011096

    Kalinga...

    78

    Abra2623

    Apayao 18264

    Benguet 3745

    Ifugao 16787

    Kalinga16900

    Other transformations such as sort can be done using<code>sort</code>attribute. Now let's extract a specific column. In Python, we do it using either<code>iloc</code>or<code>ix</code>attributes, but<code>ix</code>is more robust and thus I prefer it. Assuming we want the head of the first column of the data, we have

  • 其他變換,例如排序就是用sort屬性。現在我們提取特定的某列數據。Python中,可以使用iloc或者ix屬性。但是我更喜歡用ix,因為它更穩定一些。假設我們需數據第一列的前5行,我們有:

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

  • print df.ix[:, 0].head()

    # OUTPUT

    0 1243

    1 4158

    2 1787

    317152

    4 1266

    Name: Abra, dtype: int64

  • 順便提一下,Python的索引是從0開始而非1。為了取出從11到20行的前3列數據,我們有:

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

  • print df.ix[10:20, 0:3]

    # OUTPUT

    AbraApayaoBenguet

    109811311 2560

    1127366 15093 3039

    12 11001701 2382

    13 7212 11001 1088

    14 10481427 2847

    1525679 15661 2942

    16 10552191 2119

    17 54376461734

    18 10291183 2302

    1923710 12222 2598

    20 10912343 2654

  • 上述命令相當於df.ix[10:20, ['Abra', 'Apayao', 'Benguet']]。

    為了舍棄數據中的列,這里是列1(Apayao)和列2(Benguet),我們使用drop屬性,如下:

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

  • print df.drop(df.columns[[1, 2]], axis = 1).head()

    # OUTPUT

    AbraIfugaoKalinga

    0 1243330010553

    1 4158806335257

    2 17871074 4544

    317152 1960731687

    4 12663315 8520

  • axis參數告訴函數到底舍棄列還是行。如果axis等於0,那麼就舍棄行。

    統計描述

    下一步就是通過describe屬性,對數據的統計特性進行描述:

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

  • print df.describe()

    # OUTPUT

    AbraApayaoBenguetIfugao Kalinga

    count 79.000000 79.00000079.000000 79.000000 79.000000

    mean 12874.37974716860.6455703237.39240512414.62025330446.417722

    std16746.46694515448.1537941588.536429 5034.28201922245.707692

    min927.000000401.000000 148.000000 1074.000000 2346.000000

    25% 1524.000000 3435.5000002328.000000 8205.000000 8601.500000

    50% 5790.00000010588.0000003202.00000013044.00000024494.000000

    75%13330.50000033289.0000003918.50000016099.50000052510.500000

    max60303.00000054625.0000008813.00000021031.00000068663.000000

  • 假設檢驗

    Python有一個很好的統計推斷包。那就是scipy裡面的stats。ttest_1samp實現了單樣本t檢驗。因此,如果我們想檢驗數據Abra列的稻穀產量均值,通過零假設,這里我們假定總體稻穀產量均值為15000,我們有:

    Python

    1

    2

    3

    4

    5

    6

    7

  • from scipy import stats as ss

    # Perform one sample t-test using 1500 as the true mean

    print ss.ttest_1samp(a = df.ix[:, 'Abra'], popmean = 15000)

    # OUTPUT

    (-1.1281738488299586, 0.26270472069109496)

  • 返回下述值組成的元祖:

  • t : 浮點或數組類型
    t統計量

  • prob : 浮點或數組類型
    two-tailed p-value 雙側概率值

  • 通過上面的輸出,看到p值是0.267遠大於α等於0.05,因此沒有充分的證據說平均稻穀產量不是150000。將這個檢驗應用到所有的變數,同樣假設均值為15000,我們有:

    Python

    1

    2

    3

    4

    5

    6

  • print ss.ttest_1samp(a = df, popmean = 15000)

    # OUTPUT

    (array([ -1.12817385, 1.07053437, -65.81425599,-4.564575, 6.17156198]),

    array([2.62704721e-01, 2.87680340e-01, 4.15643528e-70,

    1.83764399e-05, 2.82461897e-08]))

  • 第一個數組是t統計量,第二個數組則是相應的p值。

    可視化

    Python中有許多可視化模塊,最流行的當屬matpalotlib庫。稍加提及,我們也可選擇bokeh和seaborn模塊。之前的博文中,我已經說明了matplotlib庫中的盒須圖模塊功能。

    ;

  • 重復100次; 然後

  • 計算出置信區間包含真實均值的百分比

  • Python中,程序如下:

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

  • import numpy as np

    import scipy.stats as ss

    def case(n = 10, mu = 3, sigma = np.sqrt(5), p = 0.025, rep = 100):

    m = np.zeros((rep, 4))

    for i in range(rep):

    norm = np.random.normal(loc = mu, scale = sigma, size = n)

    xbar = np.mean(norm)

    low = xbar - ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))

    up = xbar + ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))

    if (mu > low) & (mu < up):

    rem = 1

    else:

    rem = 0

    m[i, :] = [xbar, low, up, rem]

    inside = np.sum(m[:, 3])

    per = inside / rep

    desc = "There are " + str(inside) + " confidence intervals that contain "

    "the true mean (" + str(mu) + "), that is " + str(per) + " percent of the total CIs"

    return {"Matrix": m, "Decision": desc}

  • 上述代碼讀起來很簡單,但是循環的時候就很慢了。下面針對上述代碼進行了改進,這多虧了Python專家,看我上篇博文的15條意見吧。

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

  • import numpy as np

    import scipy.stats as ss

    def case2(n = 10, mu = 3, sigma = np.sqrt(5), p = 0.025, rep = 100):

    scaled_crit = ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))

    norm = np.random.normal(loc = mu, scale = sigma, size = (rep, n))

    xbar = norm.mean(1)

    low = xbar - scaled_crit

    up = xbar + scaled_crit

    rem = (mu > low) & (mu < up)

    m = np.c_[xbar, low, up, rem]

    inside = np.sum(m[:, 3])

    per = inside / rep

    desc = "There are " + str(inside) + " confidence intervals that contain "

    "the true mean (" + str(mu) + "), that is " + str(per) + " percent of the total CIs"

    return {"Matrix": m, "Decision": desc}

  • 更新

    那些對於本文ipython notebook版本感興趣的,請點擊這里。這篇文章由Nuttens Claude負責轉換成ipython notebook 。

B. 怎麼用python算p值和t檢驗

引入相關模塊,這次我們使用stats的
產生兩列隨機變數,用到了stats。norm.rvs,參數loc表示平均數,scale表示標准差,size是樣本量這是產生的兩個變數的數據的一部分
ttest_rel的用法:輸出t和p值從p值可以看出,這兩列數據是沒有差異的。
當然,ttest_rel還可以接受pandas.DataFrame數據,先從excel中讀取數據我們可以看一下數據的基本內容:
我們可以選擇scoreA和ScoreB這兩列數據進行T檢驗輸出的結果可見兩列變數均值無差異
我們還可以同時對多個變數進行檢驗,比如:這是產生的結果可見:第一個array表示t值,兩個表示p值,因此我們可以知道p(scoreA)=0.126>0.05

C. pytnon中如何計算皮爾遜的p值

如何理解皮爾遜相關系數(Pearson Correlation Coefficient)?

皮爾遜相關系數理解有兩個角度

其一, 按照高中數學水平來理解, 它很簡單, 可以看做將兩組數據首先做Z分數處理之後, 然後兩組數據的乘積和除以樣本數

Z分數一般代表正態分布中, 數據偏離中心點的距離.等於變數減掉平均數再除以標准差.(就是高考的標准分類似的處理)

標准差則等於變數減掉平均數的平方和,再除以樣本數,最後再開方.

所以, 根據這個最樸素的理解,我們可以將公式依次精簡為:


其二, 按照大學的線性數學水平來理解, 它比較復雜一點,可以看做是兩組數據的向量夾角的餘弦.

皮爾遜相關的約束條件

從以上解釋, 也可以理解皮爾遜相關的約束條件:

1 兩個變數間有線性關系

2 變數是連續變數

3 變數均符合正態分布,且二元分布也符合正態分布

4 兩變數獨立

在實踐統計中,一般只輸出兩個系數,一個是相關系數,也就是計算出來的相關系數大小,在-1到1之間;另一個是獨立樣本檢驗系數,用來檢驗樣本一致性.

先舉個手算的例子

使用維基中的例子:

例如,假設五個國家的國民生產總值分別是1、2、3、5、8(單位10億美元),又假設這五個國家的貧困比例分別是11%、12%、13%、15%、18%。

創建2個向量.(R語言)

x<-c(1,2,3,5,8)
y<-c(0.11,0.12,0.13,0.15,0.18)

按照維基的例子,應計算出相關系數為1出來.我們看看如何一步一步計算出來的.

x的平均數是:3.8
y的平均數是0.138
所以,

sum((x-mean(x))*(y-mean(y)))=0.308

用大白話來寫就是:

(1-3.8)*(0.11-0.138)=0.0784
(2-3.8)*(0.12-0.138)=0.0324
(3-3.8)*(0.13-0.138)=0.0064
(5-3.8)*(0.15-0.138)=0.0144
(8-3.8)*(0.18-0.138)=0.1764

0.0784+0.0324+0.0064+0.0144+0.1764=0.308

同理, 分號下面的,分別是:

sum((x-mean(x))^2)=30.8sum((y-mean(y))^2)= 0.00308

用大白話來寫,分別是:

(1-3.8)^2=7.84 #平方
(2-3.8)^2=3.24 #平方
(3-3.8)^2=0.64 #平方
(5-3.8)^2=1.44 #平方
(8-3.8)^2=17.64 #平方

7.84+3.24+0.64+1.44+17.64=30.8

同理,求得:

sum((y-mean(y))^2)= 0.00308

然後再開平方根,分別是:

30.8^0.5=5.5497750.00308^0.5=0.05549775

用分子除以分母,就計算出最終結果:

0.308/(5.549775*0.05549775)=1

再舉個簡單的R語言例子(R在這里下載:http://cran.r-project.org/bin/macosx/)

假設有100人, 一組數據是年齡,平均年齡是35歲,標准差是5歲;另一組數據是發帖數量,平均帖子數量是45份post,標准差是8份帖子.

假設這兩組都是正態分布.我們來求這兩者的皮爾遜相關系數,R腳本如下:

> x<-rnorm(n=100,mean=35,sd=5) #創建一組平均數為35,標准差為5,樣本數為100的隨機數
> y<-rnorm(n=100,mean=45,sd=8) #創建一組平均數為45,標准差為8,樣本數為100的隨機數
> cor.test(x,y,method="pearson") #計算這兩組數的相關,並進行T檢驗

然後R輸出結果為:

Pearson's proct-moment correlation

data: x and y
t = -0.0269, df = 98, p-value = 0.9786
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.1990316 0.1938019
sample estimates:
cor
-0.002719791

當然,這里是隨機數.也可以用非隨機的驗證一下計算.

皮爾遜相關系數用於網站開發

直接將R與Ruby關聯起來

調用很簡單,仿照上述例子:

cor(x,y)

就輸出系數結果了.

有這么幾個庫可以參考:

https://github.com/alexgutteridge/rsr...

https://github.com/davidrichards/stat...

https://github.com/jtprince/simpler

說明, 以上為ruby調用庫. pythone程序員可以參考: Rpy (http://rpy.sourceforge.net/)

簡單的相關系數的分類

0.8-1.0 極強相關

0.6-0.8 強相關

0.4-0.6 中等程度相關

0.2-0.4 弱相關

0.0-0.2 極弱相關或無相關

ps : 這個網站開發者不要再次發明輪子,本來用markdown語法寫作很爽,結果又不得不花時間來改動.請考慮盡快支持Markdown語法.

皮爾森相關系數的就是

x和y的協方差/(x的標准差∗y的標准差)


判斷兩組數的線性關系程度。

D. 如何用python實現含有虛擬自變數的回歸



參考資料:
DataRobot | Ordinary Least Squares in Python

DataRoboe | Multiple Regression using Statsmodels

AnalyticsVidhya | 7 Types of Regression Techniques you should know!



E. 多項式回歸和多元式回歸區別!

方差分析與回歸分析是有聯系又不完全相同的分析方法。方差分析主要研究各變數對結果的影響程度的定性關系,從而剔除對結果影響較小的變數,提高試驗的效率和精度。而回歸分析是研究變數與結果的定量關系,得出相應的數學模式。在回歸分析中,需要對各變數對結果影響進行方差分析,以剔除影響不大的變數,提高回歸分析的有效性。
方差分析(Analysis of Variance,簡稱ANOVA),又稱「變異數分析」,是R.A.Fisher發明的,用於兩個及兩個以上樣本均數差別的顯著性檢驗。 由於各種因素的影響,研究所得的數據呈現波動狀。造成波動的原因可分成兩類,一是不可控的隨機因素,另一是研究中施加的對結果形成影響的可控因素。方差分析是從觀測變數的方差入手,研究諸多控制變數中哪些變數是對觀測變數有顯著影響的變數。
回歸分析是研究各因素對結果影響的一種模擬經驗方程的辦法,回歸分析(regression analysis)是確定兩種或兩種以上變數間相互依賴的定量關系的一種統計分析方法。運用十分廣泛,回歸分析按照涉及的變數的多少,分為一元回歸和多元回歸分析。
回歸分析中,會用到方差分析來判斷各變數對結果的影響程度,從而確定哪些因素是應該納入到回歸方程中,哪些由於對結果影響的方差小而不應該納入到回歸方程中。

F. 怎麼看python中邏輯回歸輸出的解釋

以下為python代碼,由於訓練數據比較少,這邊使用了批處理梯度下降法,沒有使用增量梯度下降法。

##author:lijiayan##data:2016/10/27
##name:logReg.pyfrom numpy import *import matplotlib.pyplot as pltdef loadData(filename):
data = loadtxt(filename)
m,n = data.shape print 'the number of examples:',m print 'the number of features:',n-1 x = data[:,0:n-1]
y = data[:,n-1:n] return x,y#the sigmoid functiondef sigmoid(z): return 1.0 / (1 + exp(-z))#the cost functiondef costfunction(y,h):
y = array(y)
h = array(h)
J = sum(y*log(h))+sum((1-y)*log(1-h)) return J# the batch gradient descent algrithmdef gradescent(x,y):
m,n = shape(x) #m: number of training example; n: number of features x = c_[ones(m),x] #add x0 x = mat(x) # to matrix y = mat(y)
a = 0.0000025 # learning rate maxcycle = 4000 theta = zeros((n+1,1)) #initial theta J = [] for i in range(maxcycle):
h = sigmoid(x*theta)
theta = theta + a * (x.T)*(y-h)
cost = costfunction(y,h)
J.append(cost)

plt.plot(J)
plt.show() return theta,cost#the stochastic gradient descent (m should be large,if you want the result is good)def stocGraddescent(x,y):
m,n = shape(x) #m: number of training example; n: number of features x = c_[ones(m),x] #add x0 x = mat(x) # to matrix y = mat(y)
a = 0.01 # learning rate theta = ones((n+1,1)) #initial theta J = [] for i in range(m):
h = sigmoid(x[i]*theta)
theta = theta + a * x[i].transpose()*(y[i]-h)
cost = costfunction(y,h)
J.append(cost)
plt.plot(J)
plt.show() return theta,cost#plot the decision boundarydef plotbestfit(x,y,theta):
plt.plot(x[:,0:1][where(y==1)],x[:,1:2][where(y==1)],'ro')
plt.plot(x[:,0:1][where(y!=1)],x[:,1:2][where(y!=1)],'bx')
x1= arange(-4,4,0.1)
x2 =(-float(theta[0])-float(theta[1])*x1) /float(theta[2])

plt.plot(x1,x2)
plt.xlabel('x1')
plt.ylabel(('x2'))
plt.show()def classifyVector(inX,theta):
prob = sigmoid((inX*theta).sum(1)) return where(prob >= 0.5, 1, 0)def accuracy(x, y, theta):
m = shape(y)[0]
x = c_[ones(m),x]
y_p = classifyVector(x,theta)
accuracy = sum(y_p==y)/float(m) return accuracy

調用上面代碼:

from logReg import *
x,y = loadData("horseColicTraining.txt")
theta,cost = gradescent(x,y)print 'J:',cost

ac_train = accuracy(x, y, theta)print 'accuracy of the training examples:', ac_train

x_test,y_test = loadData('horseColicTest.txt')
ac_test = accuracy(x_test, y_test, theta)print 'accuracy of the test examples:', ac_test

學習速率=0.0000025,迭代次數=4000時的結果:

似然函數走勢(J = sum(y*log(h))+sum((1-y)*log(1-h))),似然函數是求最大值,一般是要穩定了才算最好。

從上面這個例子,我們可以看到對特徵進行歸一化操作的重要性。

G. 數據分析員用python做數據分析是怎麼回事,需要用到python中的那些內容,具體是怎麼操作的

最近,Analysis with Programming加入了Planet Python。我這里來分享一下如何通過Python來開始數據分析。具體內容如下:


數據導入

導入本地的或者web端的CSV文件;

數據變換;

數據統計描述;

假設檢驗

單樣本t檢驗;

可視化;

創建自定義函數。

數據導入

  • 1

    這是很關鍵的一步,為了後續的分析我們首先需要導入數據。通常來說,數據是CSV格式,就算不是,至少也可以轉換成CSV格式。在Python中,我們的操作如下:

    import pandas as pd

    # Reading data locally

    df = pd.read_csv('/Users/al-ahmadgaidasaad/Documents/d.csv')

    # Reading data from web

    data_url = "https://raw.githubusercontent.com/alstat/Analysis-with-Programming/master/2014/Python/Numerical-Descriptions-of-the-Data/data.csv"

    df = pd.read_csv(data_url)

    為了讀取本地CSV文件,我們需要pandas這個數據分析庫中的相應模塊。其中的read_csv函數能夠讀取本地和web數據。

  • 數據變換

  • 1

    既然在工作空間有了數據,接下來就是數據變換。統計學家和科學家們通常會在這一步移除分析中的非必要數據。我們先看看數據(下圖)

    對R語言程序員來說,上述操作等價於通過print(head(df))來列印數據的前6行,以及通過print(tail(df))來列印數據的後6行。當然Python中,默認列印是5行,而R則是6行。因此R的代碼head(df, n = 10),在Python中就是df.head(n = 10),列印數據尾部也是同樣道理

  • 9

    plt.show(sns.lmplot("Benguet", "Ifugao", df))

  • 創建自定義函數

  • 在Python中,我們使用def函數來實現一個自定義函數。例如,如果我們要定義一個兩數相加的函數,如下即可:

    def add_2int(x, y):

    return x + y

    print add_2int(2, 2)

    # OUTPUT

    4

  • 順便說一下,Python中的縮進是很重要的。通過縮進來定義函數作用域,就像在R語言中使用大括弧{…}一樣。這有一個我們之前博文的例子:

    產生10個正態分布樣本,其中和

    基於95%的置信度,計算和;

    重復100次; 然後

    計算出置信區間包含真實均值的百分比

    Python中,程序如下:

    import numpy as np

    import scipy.stats as ss

    def case(n = 10, mu = 3, sigma = np.sqrt(5), p = 0.025, rep = 100):

    m = np.zeros((rep, 4))

    for i in range(rep):

    norm = np.random.normal(loc = mu, scale = sigma, size = n)

    xbar = np.mean(norm)

    low = xbar - ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))

    up = xbar + ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))

    if (mu > low) & (mu < up):

    rem = 1

    else:

    rem = 0

    m[i, :] = [xbar, low, up, rem]

    inside = np.sum(m[:, 3])

    per = inside / rep

    desc = "There are " + str(inside) + " confidence intervals that contain "

    "the true mean (" + str(mu) + "), that is " + str(per) + " percent of the total CIs"

    return {"Matrix": m, "Decision": desc}

  • 上述代碼讀起來很簡單,但是循環的時候就很慢了。下面針對上述代碼進行了改進,這多虧了Python專家

    import numpy as np

    import scipy.stats as ss

    def case2(n = 10, mu = 3, sigma = np.sqrt(5), p = 0.025, rep = 100):

    scaled_crit = ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))

    norm = np.random.normal(loc = mu, scale = sigma, size = (rep, n))

    xbar = norm.mean(1)

    low = xbar - scaled_crit

    up = xbar + scaled_crit

    rem = (mu > low) & (mu < up)

    m = np.c_[xbar, low, up, rem]

    inside = np.sum(m[:, 3])

    per = inside / rep

    desc = "There are " + str(inside) + " confidence intervals that contain "

    "the true mean (" + str(mu) + "), that is " + str(per) + " percent of the total CIs"

    return {"Matrix": m, "Decision": desc}

H. 用微表格能做回歸分析

1、 先看回歸統計表,Multiple R即相關系數R的值,和我們之前做相關分析得到的值一樣,大於0.8表示強正相關。

2、 回歸統計表中的R Square是R平方值,R平方即R的平方,又可以叫判定系數、擬合優度,取值范圍是[0,1],R平方值越大,表示模型擬合的越好。一般大於70%就算擬合的不錯,60%以下的就需要修正模型了。這個案例里R平方0.9054,相當不錯。

3、 Adjusted R是調整後的R方,這個值是用來修正因自變數個數增加而導致模型擬合效果過高的情況,多用於衡量多重線性回歸。

4、 第二張表,方差分析表,df是自由度,SS是平方和,MS是均方,F是F統計量,Significance F是回歸方程總體的顯著性檢驗,其中我們主要關注F檢驗的結果,即Significance F值,F檢驗主要是檢驗因變數與自變數之間的線性關系是否顯著,用線性模型來描述他們之間的關系是否恰當,越小越顯著。這個案例里F值很小,說明因變數與自變數之間顯著。

5、 殘差是實際值與預測值之間的差,殘差圖用於回歸診斷,回歸模型在理想條件下的殘差圖是服從正態分布的。

6、 第三張表我們重點關注P-value,也就是P值,用來檢驗回歸方程系數的顯著性,又叫T檢驗,T檢驗看P值,是在顯著性水平α(常用取值0.01或0.05)下F的臨界值,一般以此來衡量檢驗結果是否具有顯著性,如果P值>0.05,則結果不具有顯著的統計學意義,如果0.01<P值<0.05,則結果具有顯著的統計學意義,如果P<=0.01,則結果具有極其顯著的統計學意義。T檢驗是看某一個自變數對於因變數的線性顯著性,如果該自變數不顯著,則可以從模型中剔除。

7、 從第三張表的第一列我們可以得到這個回歸模型的方程:y=4361.486+1.198017x,此後對於每一個輸入的自變數x,都可以根據這個回歸方程來預測出因變數Y。

熱點內容
資料庫映射是什麼 發布:2025-01-20 05:41:52 瀏覽:981
中國植物資料庫 發布:2025-01-20 05:38:50 瀏覽:334
C語言能嗎 發布:2025-01-20 05:37:25 瀏覽:558
onedrive存儲位置 發布:2025-01-20 05:35:16 瀏覽:826
導航廣播怎麼存儲電台 發布:2025-01-20 05:35:14 瀏覽:310
歌的壓縮包 發布:2025-01-20 05:23:53 瀏覽:391
如何通過伺服器ip查到電話 發布:2025-01-20 05:02:34 瀏覽:8
我的世界伺服器被房主打 發布:2025-01-20 05:02:27 瀏覽:284
如何找到相同的配置 發布:2025-01-20 04:53:59 瀏覽:218
看linux版本 發布:2025-01-20 04:40:37 瀏覽:20