Hướng dẫn hypothesis testing in python datacamp answers - kiểm tra giả thuyết trong câu trả lời datacamp python

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

sns.set[]

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y

Xây dựng và mô phỏng một giả thuyết

  • Kiểm tra giả thuyết
    • Khẳng định mức độ hợp lý của dữ liệu quan sát được giả định là đúng
  • Giả thuyết Null [$ H_0 $]
    • Một tên khác cho giả thuyết bạn đang kiểm tra
  • Hoán vị
    • Sắp xếp lại ngẫu nhiên các mục trong một mảng

Tạo mẫu hoán vị

Lấy mẫu hoán vị là một cách tuyệt vời để mô phỏng giả thuyết rằng hai biến có phân phối xác suất giống hệt nhau. Đây thường là một giả thuyết mà bạn muốn kiểm tra, vì vậy trong bài tập này, bạn sẽ viết một chức năng để tạo mẫu hoán vị từ hai bộ dữ liệu.

Hãy nhớ rằng, một mẫu hoán vị của hai mảng có các mục tương ứng ____23 và

def permutation_sample[data1, data2]:
    """Generate a permutation sample from two data sets."""
    
    # Concatenate the data sets: data
    data = np.concatenate[[data1, data2]]
    
    # Permute the concatenated array: permuted_data
    permuted_data = np.random.permutation[data]
    
    # Split the permuted array into two: perm_sample_1, perm_sample_2
    perm_sample_1 = permuted_data[:len[data1]]
    perm_sample_2 = permuted_data[len[data1]:]
    
    return perm_sample_1, perm_sample_2
4 được xây dựng bằng cách kết hợp các mảng với nhau, tranh giành nội dung của mảng được nối như mẫu hoán vị của mảng thứ hai.

def permutation_sample[data1, data2]:
    """Generate a permutation sample from two data sets."""
    
    # Concatenate the data sets: data
    data = np.concatenate[[data1, data2]]
    
    # Permute the concatenated array: permuted_data
    permuted_data = np.random.permutation[data]
    
    # Split the permuted array into two: perm_sample_1, perm_sample_2
    perm_sample_1 = permuted_data[:len[data1]]
    perm_sample_2 = permuted_data[len[data1]:]
    
    return perm_sample_1, perm_sample_2

Hình dung lấy mẫu hoán vị

Để giúp xem cách lấy mẫu hoán vị hoạt động, trong bài tập này, bạn sẽ tạo ra các mẫu hoán vị và nhìn vào chúng bằng đồ họa.

Chúng tôi sẽ sử dụng dữ liệu trạm thời tiết của Sheffield một lần nữa, lần này xem xét lượng mưa hàng tháng vào tháng 6 [một tháng khô ráo] và tháng 11 [một tháng ẩm ướt]. Chúng tôi hy vọng những thứ này có thể được phân phối khác nhau, vì vậy chúng tôi sẽ lấy các mẫu hoán vị để xem các ECDF của chúng sẽ trông như thế nào nếu chúng được phân phối giống hệt nhau.

rain_june = np.array[[ 66.2,  39.7,  76.4,  26.5,  11.2,  61.8,   6.1,  48.4,  89.2,
       104. ,  34. ,  60.6,  57.1,  79.1,  90.9,  32.3,  63.8,  78.2,
        27.5,  43.4,  30.1,  17.3,  77.5,  44.9,  92.2,  39.6,  79.4,
        66.1,  53.5,  98.5,  20.8,  55.5,  39.6,  56. ,  65.1,  14.8,
        13.2,  88.1,   8.4,  32.1,  19.6,  40.4,   2.2,  77.5, 105.4,
        77.2,  38. ,  27.1, 111.8,  17.2,  26.7,  23.3,  77.2,  87.2,
        27.7,  50.6,  60.3,  15.1,   6. ,  29.4,  39.3,  56.3,  80.4,
        85.3,  68.4,  72.5,  13.3,  28.4,  14.7,  37.4,  49.5,  57.2,
        85.9,  82.1,  31.8, 126.6,  30.7,  41.4,  33.9,  13.5,  99.1,
        70.2,  91.8,  61.3,  13.7,  54.9,  62.5,  24.2,  69.4,  83.1,
        44. ,  48.5,  11.9,  16.6,  66.4,  90. ,  34.9, 132.8,  33.4,
       225. ,   7.6,  40.9,  76.5,  48. , 140. ,  55.9,  54.1,  46.4,
        68.6,  52.2, 108.3,  14.6,  11.3,  29.8, 130.9, 152.4,  61. ,
        46.6,  43.9,  30.9, 111.1,  68.5,  42.2,   9.8, 285.6,  56.7,
       168.2,  41.2,  47.8, 166.6,  37.8,  45.4,  43.2]]

rain_november = np.array[[ 83.6,  30.9,  62.2,  37. ,  41. , 160.2,  18.2, 122.4,  71.3,
        44.2,  49.1,  37.6, 114.5,  28.8,  82.5,  71.9,  50.7,  67.7,
       112. ,  63.6,  42.8,  57.2,  99.1,  86.4,  84.4,  38.1,  17.7,
       102.2, 101.3,  58. ,  82. , 101.4,  81.4, 100.1,  54.6,  39.6,
        57.5,  29.2,  48.8,  37.3, 115.4,  55.6,  62. ,  95. ,  84.2,
       118.1, 153.2,  83.4, 104.7,  59. ,  46.4,  50. , 147.6,  76.8,
        59.9, 101.8, 136.6, 173. ,  92.5,  37. ,  59.8, 142.1,   9.9,
       158.2,  72.6,  28. , 112.9, 119.3, 199.2,  50.7,  44. , 170.7,
        67.2,  21.4,  61.3,  15.6, 106. , 116.2,  42.3,  38.5, 132.5,
        40.8, 147.5,  93.9,  71.4,  87.3, 163.7, 141.4,  62.6,  84.9,
        28.8, 121.1,  28.6,  32.4, 112. ,  50. ,  96.9,  81.8,  70.4,
       117.5,  41.2, 124.9,  78.2,  93. ,  53.5,  50.5,  42.6,  47.9,
        73.1, 129.1,  56.9, 103.3,  60.5, 134.3,  93.1,  49.5,  48.2,
       167.9,  27. , 111.1,  55.4,  36.2,  57.4,  66.8,  58.3,  60. ,
       161.6, 112.7,  37.4, 110.6,  56.6,  95.8, 126.8]]

for _ in range[50]:
    # Generate permutation samples
    perm_sample_1, perm_sample_2 = permutation_sample[rain_june, rain_november]
    
    # Compute ECDFs
    x_1, y_1 = ecdf[perm_sample_1]
    x_2, y_2 = ecdf[perm_sample_2]
    
    # Plot ECDFs of permutation sample
    _ = plt.plot[x_1, y_1, marker='.', linestyle='none', color='red', alpha=0.02]
    _ = plt.plot[x_2, y_2, marker='.', linestyle='none', color='blue', alpha=0.02]
    
# Create and plot ECDFs from original data
x_1, y_1 = ecdf[rain_june]
x_2, y_2 = ecdf[rain_november]
_ = plt.plot[x_1, y_1, marker='.', linestyle='none', color='red']
_ = plt.plot[x_2, y_2, marker='.', linestyle='none', color='blue']

# Label axes, set margin, and show plot
plt.margins[0.02]
_ = plt.xlabel['monthly rainfall [mm]']
_ = plt.ylabel['ECDF']

Thống kê kiểm tra và giá trị p

  • Thống kê kiểm tra
    • Một số duy nhất có thể được tính toán từ dữ liệu được quan sát và từ dữ liệu bạn mô phỏng theo giả thuyết null
    • Nó đóng vai trò là cơ sở của so sánh giữa hai
  • p-value
    • Xác suất đạt được giá trị của số liệu thống kê kiểm tra của bạn ít nhất là cực đoan như những gì đã được quan sát, theo giả định của giả thuyết null là đúng
    • Không phải là xác suất mà giả thuyết null là đúng the probability that the null hypothesis is true
  • Ý nghĩa thống kê
    • Được xác định bởi độ nhỏ của giá trị p
  • Kiểm tra ý nghĩa giả thuyết Null [NHST]

Tạo lần sao chép hoán vị

Một lần sao chép hoán vị là một giá trị duy nhất của một thống kê được tính toán từ mẫu hoán vị.

def draw_perm_reps[data_1, data_2, func, size=1]:
    """Generate multiple permutation replicates."""
    
    # Initialize array of replicates: perm_replicates
    perm_replicates = np.empty[size]
    
    for i in range[size]:
        # Generate permutation sample
        perm_sample_1, perm_sample_2 = permutation_sample[data_1, data_2]
        
        # Compute the test statistics
        perm_replicates[i] = func[perm_sample_1, perm_sample_2]
        
    return perm_replicates

Nhìn trước khi bạn nhảy: EDA trước khi kiểm tra giả thuyết

Kleinteich và Gorb [Sci. Rep., 4, 5225, 2014] đã thực hiện một thí nghiệm thú vị với ếch sừng Nam Mỹ. Họ giữ một tấm kết nối với một đầu dò lực, cùng với một con ruồi mồi, trước mặt họ. Sau đó, họ đã đo lực tác động và lực dính của lưỡi của ếch khi nó bắn trúng mục tiêu.

Ếch A là người lớn và ếch B là một người chưa thành niên. Các nhà nghiên cứu đã đo lường lực tác động của 20 cuộc đình công cho mỗi con ếch. Trong bài tập tiếp theo, chúng tôi sẽ kiểm tra giả thuyết rằng hai con ếch có cùng phân phối các lực tác động. Nhưng, hãy nhớ rằng, điều quan trọng là phải làm EDA trước! Hãy tạo một lô bee bee cho dữ liệu. Chúng được lưu trữ trong khung dữ liệu gấu trúc,

def permutation_sample[data1, data2]:
    """Generate a permutation sample from two data sets."""
    
    # Concatenate the data sets: data
    data = np.concatenate[[data1, data2]]
    
    # Permute the concatenated array: permuted_data
    permuted_data = np.random.permutation[data]
    
    # Split the permuted array into two: perm_sample_1, perm_sample_2
    perm_sample_1 = permuted_data[:len[data1]]
    perm_sample_2 = permuted_data[len[data1]:]
    
    return perm_sample_1, perm_sample_2
7, trong đó cột
def permutation_sample[data1, data2]:
    """Generate a permutation sample from two data sets."""
    
    # Concatenate the data sets: data
    data = np.concatenate[[data1, data2]]
    
    # Permute the concatenated array: permuted_data
    permuted_data = np.random.permutation[data]
    
    # Split the permuted array into two: perm_sample_1, perm_sample_2
    perm_sample_1 = permuted_data[:len[data1]]
    perm_sample_2 = permuted_data[len[data1]:]
    
    return perm_sample_1, perm_sample_2
8 là danh tính của ếch và cột
def permutation_sample[data1, data2]:
    """Generate a permutation sample from two data sets."""
    
    # Concatenate the data sets: data
    data = np.concatenate[[data1, data2]]
    
    # Permute the concatenated array: permuted_data
    permuted_data = np.random.permutation[data]
    
    # Split the permuted array into two: perm_sample_1, perm_sample_2
    perm_sample_1 = permuted_data[:len[data1]]
    perm_sample_2 = permuted_data[len[data1]:]
    
    return perm_sample_1, perm_sample_2
9 là lực tác động trong Newtons [N].

df = pd.read_csv['./dataset/frog_tongue.csv', skiprows=14]
df.head[]

ngàyTÔISố dùng thửLực tác động [MN]Thời gian tác động [MS]lực tác động / trọng lượng cơ thểLực kết dính [MN]ếch thời gian kéo theo mục tiêu [MS]lực dính / trọng lượng cơ thểImpulse dính [N-S]Tổng diện tích liên lạc [MM2]Khu vực tiếp xúc không có chất nhầy [MM2]Khu vực tiếp xúc với chất nhầy / khu vực tiếp xúc mà không có chất nhầyÁp lực tiếp xúc [PA]Độ bền dính [PA]01234
2013_02_26Tôi3 1205 46 1.95 -785 884 1.27 -0.290 387 70 0.82 3117 -2030
2013_02_26Tôi4 2527 44 4.08 -983 248 1.59 -0.181 101 94 0.07 24923 -9695
2013_03_01Tôi1 1745 34 2.82 -850 211 1.37 -0.157 83 79 0.05 21020 -10239
2013_03_01Tôi2 1556 41 2.51 -455 1025 0.74 -0.170 330 158 0.52 4718 -1381
2013_03_01Tôi3 493 36 0.80 -974 499 1.57 -0.423 245 216 0.12 2012 -3975

_ = sns.swarmplot[x='ID', y='impact force [mN]', data=df]

# Label axes
_ = plt.xlabel['frog']
_ = plt.ylabel['impact force [mN]']
plt.savefig['../images/frog-swarmplot.png']

Kiểm tra hoán vị trên dữ liệu ếch

Lực tấn công trung bình của ếch A là 0,71 Newton [N] và của ếch B là 0,42 N với chênh lệch 0,29 N. Có thể con ếch tấn công với cùng một lực và sự khác biệt quan sát này là tình cờ. Bạn sẽ tính toán xác suất nhận được ít nhất một chênh lệch 0,29 N trong lực tấn công trung bình theo giả thuyết rằng sự phân phối của các lực tấn công cho hai con ếch là giống hệt nhau. Chúng tôi sử dụng một bài kiểm tra hoán vị với một thống kê kiểm tra về sự khác biệt của phương tiện để kiểm tra giả thuyết này.

Để thuận tiện cho bạn, dữ liệu đã được lưu trữ trong các mảng

rain_june = np.array[[ 66.2,  39.7,  76.4,  26.5,  11.2,  61.8,   6.1,  48.4,  89.2,
       104. ,  34. ,  60.6,  57.1,  79.1,  90.9,  32.3,  63.8,  78.2,
        27.5,  43.4,  30.1,  17.3,  77.5,  44.9,  92.2,  39.6,  79.4,
        66.1,  53.5,  98.5,  20.8,  55.5,  39.6,  56. ,  65.1,  14.8,
        13.2,  88.1,   8.4,  32.1,  19.6,  40.4,   2.2,  77.5, 105.4,
        77.2,  38. ,  27.1, 111.8,  17.2,  26.7,  23.3,  77.2,  87.2,
        27.7,  50.6,  60.3,  15.1,   6. ,  29.4,  39.3,  56.3,  80.4,
        85.3,  68.4,  72.5,  13.3,  28.4,  14.7,  37.4,  49.5,  57.2,
        85.9,  82.1,  31.8, 126.6,  30.7,  41.4,  33.9,  13.5,  99.1,
        70.2,  91.8,  61.3,  13.7,  54.9,  62.5,  24.2,  69.4,  83.1,
        44. ,  48.5,  11.9,  16.6,  66.4,  90. ,  34.9, 132.8,  33.4,
       225. ,   7.6,  40.9,  76.5,  48. , 140. ,  55.9,  54.1,  46.4,
        68.6,  52.2, 108.3,  14.6,  11.3,  29.8, 130.9, 152.4,  61. ,
        46.6,  43.9,  30.9, 111.1,  68.5,  42.2,   9.8, 285.6,  56.7,
       168.2,  41.2,  47.8, 166.6,  37.8,  45.4,  43.2]]

rain_november = np.array[[ 83.6,  30.9,  62.2,  37. ,  41. , 160.2,  18.2, 122.4,  71.3,
        44.2,  49.1,  37.6, 114.5,  28.8,  82.5,  71.9,  50.7,  67.7,
       112. ,  63.6,  42.8,  57.2,  99.1,  86.4,  84.4,  38.1,  17.7,
       102.2, 101.3,  58. ,  82. , 101.4,  81.4, 100.1,  54.6,  39.6,
        57.5,  29.2,  48.8,  37.3, 115.4,  55.6,  62. ,  95. ,  84.2,
       118.1, 153.2,  83.4, 104.7,  59. ,  46.4,  50. , 147.6,  76.8,
        59.9, 101.8, 136.6, 173. ,  92.5,  37. ,  59.8, 142.1,   9.9,
       158.2,  72.6,  28. , 112.9, 119.3, 199.2,  50.7,  44. , 170.7,
        67.2,  21.4,  61.3,  15.6, 106. , 116.2,  42.3,  38.5, 132.5,
        40.8, 147.5,  93.9,  71.4,  87.3, 163.7, 141.4,  62.6,  84.9,
        28.8, 121.1,  28.6,  32.4, 112. ,  50. ,  96.9,  81.8,  70.4,
       117.5,  41.2, 124.9,  78.2,  93. ,  53.5,  50.5,  42.6,  47.9,
        73.1, 129.1,  56.9, 103.3,  60.5, 134.3,  93.1,  49.5,  48.2,
       167.9,  27. , 111.1,  55.4,  36.2,  57.4,  66.8,  58.3,  60. ,
       161.6, 112.7,  37.4, 110.6,  56.6,  95.8, 126.8]]
0 và
rain_june = np.array[[ 66.2,  39.7,  76.4,  26.5,  11.2,  61.8,   6.1,  48.4,  89.2,
       104. ,  34. ,  60.6,  57.1,  79.1,  90.9,  32.3,  63.8,  78.2,
        27.5,  43.4,  30.1,  17.3,  77.5,  44.9,  92.2,  39.6,  79.4,
        66.1,  53.5,  98.5,  20.8,  55.5,  39.6,  56. ,  65.1,  14.8,
        13.2,  88.1,   8.4,  32.1,  19.6,  40.4,   2.2,  77.5, 105.4,
        77.2,  38. ,  27.1, 111.8,  17.2,  26.7,  23.3,  77.2,  87.2,
        27.7,  50.6,  60.3,  15.1,   6. ,  29.4,  39.3,  56.3,  80.4,
        85.3,  68.4,  72.5,  13.3,  28.4,  14.7,  37.4,  49.5,  57.2,
        85.9,  82.1,  31.8, 126.6,  30.7,  41.4,  33.9,  13.5,  99.1,
        70.2,  91.8,  61.3,  13.7,  54.9,  62.5,  24.2,  69.4,  83.1,
        44. ,  48.5,  11.9,  16.6,  66.4,  90. ,  34.9, 132.8,  33.4,
       225. ,   7.6,  40.9,  76.5,  48. , 140. ,  55.9,  54.1,  46.4,
        68.6,  52.2, 108.3,  14.6,  11.3,  29.8, 130.9, 152.4,  61. ,
        46.6,  43.9,  30.9, 111.1,  68.5,  42.2,   9.8, 285.6,  56.7,
       168.2,  41.2,  47.8, 166.6,  37.8,  45.4,  43.2]]

rain_november = np.array[[ 83.6,  30.9,  62.2,  37. ,  41. , 160.2,  18.2, 122.4,  71.3,
        44.2,  49.1,  37.6, 114.5,  28.8,  82.5,  71.9,  50.7,  67.7,
       112. ,  63.6,  42.8,  57.2,  99.1,  86.4,  84.4,  38.1,  17.7,
       102.2, 101.3,  58. ,  82. , 101.4,  81.4, 100.1,  54.6,  39.6,
        57.5,  29.2,  48.8,  37.3, 115.4,  55.6,  62. ,  95. ,  84.2,
       118.1, 153.2,  83.4, 104.7,  59. ,  46.4,  50. , 147.6,  76.8,
        59.9, 101.8, 136.6, 173. ,  92.5,  37. ,  59.8, 142.1,   9.9,
       158.2,  72.6,  28. , 112.9, 119.3, 199.2,  50.7,  44. , 170.7,
        67.2,  21.4,  61.3,  15.6, 106. , 116.2,  42.3,  38.5, 132.5,
        40.8, 147.5,  93.9,  71.4,  87.3, 163.7, 141.4,  62.6,  84.9,
        28.8, 121.1,  28.6,  32.4, 112. ,  50. ,  96.9,  81.8,  70.4,
       117.5,  41.2, 124.9,  78.2,  93. ,  53.5,  50.5,  42.6,  47.9,
        73.1, 129.1,  56.9, 103.3,  60.5, 134.3,  93.1,  49.5,  48.2,
       167.9,  27. , 111.1,  55.4,  36.2,  57.4,  66.8,  58.3,  60. ,
       161.6, 112.7,  37.4, 110.6,  56.6,  95.8, 126.8]]
1.

force_a = np.array[df[df['ID'] == 'II']['impact force [mN]']]
force_b = np.array[df[df['ID'] == 'IV']['impact force [mN]']]

def diff_of_means[data_1, data_2]:
    """Difference in means of two arrays."""
    
    # The difference of means of data_1, data_2: diff
    diff = np.mean[data_1] -  np.mean[data_2]
    
    return diff

# Compute difference of mean impact force from experiment: empirical_diff_means
empirical_diff_means = diff_of_means[force_a, force_b]

# Draw 10,000 permutation replicates: perm_replicates
perm_replicates = draw_perm_reps[force_a, force_b, diff_of_means, size=10000]

# Compute p-value: p
p = np.sum[perm_replicates >= empirical_diff_means] / len[perm_replicates]

# Print the result
print['p-value =', p]

Bài kiểm tra giả thuyết bootstrap

  • Đường ống để kiểm tra giả thuyết
    • Nêu rõ giả thuyết null
    • Xác định số liệu thống kê kiểm tra của bạn
    • Tạo ra nhiều bộ dữ liệu mô phỏng giả định giả thuyết null là đúng
    • Tính toán số liệu thống kê kiểm tra cho từng bộ dữ liệu mô phỏng
    • Giá trị p là một phần của các tập dữ liệu mô phỏng của bạn mà thống kê kiểm tra ít nhất là cực đoan như đối với dữ liệu thực
  • Một thử nghiệm mẫu
    • So sánh một bộ dữ liệu với một số
  • Hai thử nghiệm mẫu
    • So sánh hai bộ dữ liệu

Một bài kiểm tra giả thuyết bootstrap một mẫu

Một con ếch vị thành niên khác đã được nghiên cứu, ếch C và bạn muốn xem liệu ếch B và ếch C có lực tác động tương tự không. Thật không may, bạn không có sẵn lực tác động của ếch C, nhưng bạn biết rằng chúng có giá trị trung bình là 0,55 N. vì bạn không có dữ liệu gốc, bạn không thể thực hiện kiểm tra hoán vị và bạn không thể đánh giá giả thuyết rằng các lực từ Ếch B và ếch C đến từ cùng một phân phối. Do đó, bạn sẽ kiểm tra một giả thuyết khác, ít hạn chế khác: lực tấn công trung bình của ếch B bằng với ếch C.

Để thiết lập bài kiểm tra giả thuyết bootstrap, bạn sẽ lấy ý nghĩa như thống kê kiểm tra của chúng tôi. Hãy nhớ rằng, mục tiêu của bạn là tính toán xác suất có được lực tác động trung bình ít hơn hoặc bằng với những gì được quan sát cho ếch B nếu giả thuyết rằng giá trị trung bình thực sự của lực tác động của ếch B bằng với ếch C là đúng. Trước tiên, bạn dịch tất cả dữ liệu của ếch B sao cho giá trị trung bình là 0,55 N. Điều này liên quan đến việc thêm lực trung bình của ếch C và trừ đi lực trung bình của ếch B từ mỗi phép đo ếch B. Điều này để lại các thuộc tính khác của phân phối ếch B , chẳng hạn như phương sai, không thay đổi.

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y
0

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y
1

Một bài kiểm tra giả thuyết bootstrap hai mẫu cho sự khác biệt của phương tiện

Bây giờ chúng tôi muốn kiểm tra giả thuyết rằng ếch A và ếch B có lực tác động trung bình tương tự, nhưng không nhất thiết là cùng một phân phối, điều này cũng không thể với thử nghiệm hoán vị.

Để thực hiện thử nghiệm bootstrap hai mẫu, chúng tôi thay đổi cả hai mảng thành cùng một ý nghĩa, vì chúng tôi đang mô phỏng giả thuyết rằng phương tiện của chúng trên thực tế là bằng nhau. Sau đó, chúng tôi rút các mẫu bootstrap ra khỏi các mảng đã thay đổi và tính toán sự khác biệt về phương tiện. Điều này tạo thành một bản sao bootstrap, và chúng tôi tạo ra nhiều trong số chúng. Giá trị p là phần của các bản sao có sự khác biệt về phương tiện lớn hơn hoặc bằng những gì đã được quan sát.

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y
2

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y
3

Bầu cử cho Đạo luật Dân quyền năm 1964

Đạo luật Dân quyền năm 1964 là một trong những điều luật quan trọng nhất từng được thông qua ở Hoa Kỳ. Không bao gồm phiếu bầu "hiện tại" và "kiêng", 153 đảng Dân chủ Hạ viện và 136 đảng Cộng hòa đã bỏ phiếu. Tuy nhiên, 91 đảng Dân chủ và 35 đảng Cộng hòa đã bỏ phiếu NAY. Liên kết đảng có tạo ra sự khác biệt trong phiếu bầu không?

Để trả lời câu hỏi này, bạn sẽ đánh giá giả thuyết rằng bên của một thành viên Hạ viện không có liên quan đến phiếu bầu của mình. Bạn sẽ sử dụng một phần của đảng Dân chủ bỏ phiếu ủng hộ như thống kê thử nghiệm của bạn và đánh giá xác suất quan sát một phần của đảng Dân chủ bỏ phiếu có lợi cho ít nhất là nhỏ như tỷ lệ quan sát là 153/244. . Đảng Cộng hòa "và tính toán tỷ lệ của đảng Dân chủ bỏ phiếu.

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y
4

Một chất tương tự thời gian trên website

Hóa ra bạn đã thực hiện một bài kiểm tra giả thuyết tương tự như thử nghiệm A/B nơi bạn quan tâm đến thời gian dành cho trang web trước và sau một chiến dịch quảng cáo. Lực lưỡi ếch [một lượng liên tục giống như thời gian trên trang web] là một chất tương tự. "Trước" = ếch A và "After" = ếch B. Hãy thực hành điều này một lần nữa với một cái gì đó thực sự là một kịch bản trước/sau.

Chúng tôi trở lại tập dữ liệu không hitter. Năm 1920, Bóng chày Major League đã thực hiện các thay đổi quy tắc quan trọng kết thúc theo thời kỳ được gọi là thời đại bóng chết. Điều quan trọng, người ném bóng không còn được phép nhổ hoặc xẹp quả bóng, một hoạt động rất thích những người ném bóng. Trong vấn đề này, bạn sẽ thực hiện thử nghiệm A/B để xác định xem các thay đổi quy tắc này có dẫn đến tốc độ không có người chơi chậm hơn không [nghĩa là thời gian trung bình dài hơn giữa không có người chơi] thử nghiệm thống kê. Thời gian giữa các lần không hitter cho các thời đại tương ứng được lưu trữ trong các mảng

rain_june = np.array[[ 66.2,  39.7,  76.4,  26.5,  11.2,  61.8,   6.1,  48.4,  89.2,
       104. ,  34. ,  60.6,  57.1,  79.1,  90.9,  32.3,  63.8,  78.2,
        27.5,  43.4,  30.1,  17.3,  77.5,  44.9,  92.2,  39.6,  79.4,
        66.1,  53.5,  98.5,  20.8,  55.5,  39.6,  56. ,  65.1,  14.8,
        13.2,  88.1,   8.4,  32.1,  19.6,  40.4,   2.2,  77.5, 105.4,
        77.2,  38. ,  27.1, 111.8,  17.2,  26.7,  23.3,  77.2,  87.2,
        27.7,  50.6,  60.3,  15.1,   6. ,  29.4,  39.3,  56.3,  80.4,
        85.3,  68.4,  72.5,  13.3,  28.4,  14.7,  37.4,  49.5,  57.2,
        85.9,  82.1,  31.8, 126.6,  30.7,  41.4,  33.9,  13.5,  99.1,
        70.2,  91.8,  61.3,  13.7,  54.9,  62.5,  24.2,  69.4,  83.1,
        44. ,  48.5,  11.9,  16.6,  66.4,  90. ,  34.9, 132.8,  33.4,
       225. ,   7.6,  40.9,  76.5,  48. , 140. ,  55.9,  54.1,  46.4,
        68.6,  52.2, 108.3,  14.6,  11.3,  29.8, 130.9, 152.4,  61. ,
        46.6,  43.9,  30.9, 111.1,  68.5,  42.2,   9.8, 285.6,  56.7,
       168.2,  41.2,  47.8, 166.6,  37.8,  45.4,  43.2]]

rain_november = np.array[[ 83.6,  30.9,  62.2,  37. ,  41. , 160.2,  18.2, 122.4,  71.3,
        44.2,  49.1,  37.6, 114.5,  28.8,  82.5,  71.9,  50.7,  67.7,
       112. ,  63.6,  42.8,  57.2,  99.1,  86.4,  84.4,  38.1,  17.7,
       102.2, 101.3,  58. ,  82. , 101.4,  81.4, 100.1,  54.6,  39.6,
        57.5,  29.2,  48.8,  37.3, 115.4,  55.6,  62. ,  95. ,  84.2,
       118.1, 153.2,  83.4, 104.7,  59. ,  46.4,  50. , 147.6,  76.8,
        59.9, 101.8, 136.6, 173. ,  92.5,  37. ,  59.8, 142.1,   9.9,
       158.2,  72.6,  28. , 112.9, 119.3, 199.2,  50.7,  44. , 170.7,
        67.2,  21.4,  61.3,  15.6, 106. , 116.2,  42.3,  38.5, 132.5,
        40.8, 147.5,  93.9,  71.4,  87.3, 163.7, 141.4,  62.6,  84.9,
        28.8, 121.1,  28.6,  32.4, 112. ,  50. ,  96.9,  81.8,  70.4,
       117.5,  41.2, 124.9,  78.2,  93. ,  53.5,  50.5,  42.6,  47.9,
        73.1, 129.1,  56.9, 103.3,  60.5, 134.3,  93.1,  49.5,  48.2,
       167.9,  27. , 111.1,  55.4,  36.2,  57.4,  66.8,  58.3,  60. ,
       161.6, 112.7,  37.4, 110.6,  56.6,  95.8, 126.8]]
2 và
rain_june = np.array[[ 66.2,  39.7,  76.4,  26.5,  11.2,  61.8,   6.1,  48.4,  89.2,
       104. ,  34. ,  60.6,  57.1,  79.1,  90.9,  32.3,  63.8,  78.2,
        27.5,  43.4,  30.1,  17.3,  77.5,  44.9,  92.2,  39.6,  79.4,
        66.1,  53.5,  98.5,  20.8,  55.5,  39.6,  56. ,  65.1,  14.8,
        13.2,  88.1,   8.4,  32.1,  19.6,  40.4,   2.2,  77.5, 105.4,
        77.2,  38. ,  27.1, 111.8,  17.2,  26.7,  23.3,  77.2,  87.2,
        27.7,  50.6,  60.3,  15.1,   6. ,  29.4,  39.3,  56.3,  80.4,
        85.3,  68.4,  72.5,  13.3,  28.4,  14.7,  37.4,  49.5,  57.2,
        85.9,  82.1,  31.8, 126.6,  30.7,  41.4,  33.9,  13.5,  99.1,
        70.2,  91.8,  61.3,  13.7,  54.9,  62.5,  24.2,  69.4,  83.1,
        44. ,  48.5,  11.9,  16.6,  66.4,  90. ,  34.9, 132.8,  33.4,
       225. ,   7.6,  40.9,  76.5,  48. , 140. ,  55.9,  54.1,  46.4,
        68.6,  52.2, 108.3,  14.6,  11.3,  29.8, 130.9, 152.4,  61. ,
        46.6,  43.9,  30.9, 111.1,  68.5,  42.2,   9.8, 285.6,  56.7,
       168.2,  41.2,  47.8, 166.6,  37.8,  45.4,  43.2]]

rain_november = np.array[[ 83.6,  30.9,  62.2,  37. ,  41. , 160.2,  18.2, 122.4,  71.3,
        44.2,  49.1,  37.6, 114.5,  28.8,  82.5,  71.9,  50.7,  67.7,
       112. ,  63.6,  42.8,  57.2,  99.1,  86.4,  84.4,  38.1,  17.7,
       102.2, 101.3,  58. ,  82. , 101.4,  81.4, 100.1,  54.6,  39.6,
        57.5,  29.2,  48.8,  37.3, 115.4,  55.6,  62. ,  95. ,  84.2,
       118.1, 153.2,  83.4, 104.7,  59. ,  46.4,  50. , 147.6,  76.8,
        59.9, 101.8, 136.6, 173. ,  92.5,  37. ,  59.8, 142.1,   9.9,
       158.2,  72.6,  28. , 112.9, 119.3, 199.2,  50.7,  44. , 170.7,
        67.2,  21.4,  61.3,  15.6, 106. , 116.2,  42.3,  38.5, 132.5,
        40.8, 147.5,  93.9,  71.4,  87.3, 163.7, 141.4,  62.6,  84.9,
        28.8, 121.1,  28.6,  32.4, 112. ,  50. ,  96.9,  81.8,  70.4,
       117.5,  41.2, 124.9,  78.2,  93. ,  53.5,  50.5,  42.6,  47.9,
        73.1, 129.1,  56.9, 103.3,  60.5, 134.3,  93.1,  49.5,  48.2,
       167.9,  27. , 111.1,  55.4,  36.2,  57.4,  66.8,  58.3,  60. ,
       161.6, 112.7,  37.4, 110.6,  56.6,  95.8, 126.8]]
3, trong đó "NHT" có nghĩa là đứng cho "thời gian không có hitter".

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y
5

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y
6

Bài kiểm tra giả thuyết về tương quan Pearson

Mối tương quan quan sát được giữa mù chữ nữ và khả năng sinh sản có thể chỉ là tình cờ; Khả năng sinh sản của một quốc gia nhất định thực sự có thể hoàn toàn độc lập với sự mù chữ của nó. Bạn sẽ kiểm tra giả thuyết này. Để làm như vậy, hoán vị các giá trị mù chữ nhưng để lại các giá trị sinh sản được cố định. Điều này mô phỏng giả thuyết rằng chúng hoàn toàn độc lập với nhau. Đối với mỗi hoán vị, hãy tính toán hệ số tương quan Pearson và đánh giá có bao nhiêu bản sao hoán vị của bạn có hệ số tương quan Pearson lớn hơn so với quan sát.

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y
7

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y
8

def ecdf[data]:
    """Compute ECDF for a one-dimensional array of measurements."""
    # Number of data points: n
    n = len[data]

    # x-data for the ECDF: x
    x = np.sort[data]

    # y-data for the ECDF: y
    y = np.arange[1, n + 1] / n

    return x, y
9

Thuốc trừ sâu neonicotinoid có hậu quả ngoài ý muốn không?

Là một bài tập cuối cùng trong thử nghiệm giả thuyết trước khi chúng tôi kết hợp mọi thứ lại với nhau trong nghiên cứu trường hợp của chúng tôi trong chương tiếp theo, bạn sẽ điều tra tác dụng của thuốc trừ sâu neonicotinoid đối với sinh sản ong.Những loại thuốc trừ sâu này được sử dụng rất rộng rãi ở Hoa Kỳ để chống lại rệp và các loài gây hại khác gây thiệt hại cho thực vật.

Trong một nghiên cứu gần đây, Straub, et al.[Proc. Roy. Soc. B, 2016] đã điều tra tác dụng của neonicotinoids đối với tinh trùng của những con ong thụ phấn.Trong bài tập này và bài tập tiếp theo, bạn sẽ nghiên cứu cách điều trị thuốc trừ sâu ảnh hưởng đến số lượng tinh trùng sống trên nửa ml của tinh dịch.

def permutation_sample[data1, data2]:
    """Generate a permutation sample from two data sets."""
    
    # Concatenate the data sets: data
    data = np.concatenate[[data1, data2]]
    
    # Permute the concatenated array: permuted_data
    permuted_data = np.random.permutation[data]
    
    # Split the permuted array into two: perm_sample_1, perm_sample_2
    perm_sample_1 = permuted_data[:len[data1]]
    perm_sample_2 = permuted_data[len[data1]:]
    
    return perm_sample_1, perm_sample_2
0

def permutation_sample[data1, data2]:
    """Generate a permutation sample from two data sets."""
    
    # Concatenate the data sets: data
    data = np.concatenate[[data1, data2]]
    
    # Permute the concatenated array: permuted_data
    permuted_data = np.random.permutation[data]
    
    # Split the permuted array into two: perm_sample_1, perm_sample_2
    perm_sample_1 = permuted_data[:len[data1]]
    perm_sample_2 = permuted_data[len[data1]:]
    
    return perm_sample_1, perm_sample_2
1

Kiểm tra giả thuyết bootstrap về số lượng tinh trùng ong

Bây giờ, bạn sẽ kiểm tra giả thuyết sau: Trung bình, những con ong đực được điều trị bằng thuốc trừ sâu neonicotinoid có cùng số lượng tinh trùng hoạt động trên mỗi ml của tinh dịch so với những con ong đực không được điều trị.Bạn sẽ sử dụng sự khác biệt của phương tiện như thống kê kiểm tra của bạn.

def permutation_sample[data1, data2]:
    """Generate a permutation sample from two data sets."""
    
    # Concatenate the data sets: data
    data = np.concatenate[[data1, data2]]
    
    # Permute the concatenated array: permuted_data
    permuted_data = np.random.permutation[data]
    
    # Split the permuted array into two: perm_sample_1, perm_sample_2
    perm_sample_1 = permuted_data[:len[data1]]
    perm_sample_2 = permuted_data[len[data1]:]
    
    return perm_sample_1, perm_sample_2
2

Chủ Đề