표본 오차가 신경이 쓰인 건에 대해서

12394 단어 파이썬통계학
이 기사는 후루카와 연구실 Advent_calendar 21 일째 기사입니다.
본 기사는 후루카와 연구실의 학생이 학습의 일환으로서 쓴 것입니다. 내용이 모호하거나 표현이 다소 다를 수 있습니다.

소개



통계에 대해서 전혀 자세하지 않습니다만, Twitter로 서핑을 즐기고 있을 때에 「중학생 200명에게 들은 미래의 꿈 랭킹! 사람으로 알 수 있니? 라고 의문을 가졌습니다. 같은 것을 생각한 사람이 있었는지 리플라이로 「200명이라도 조사가 되어 있지 않다?」라고 코멘트가 붙었습니다만 그에 대한 리플라이로 「신뢰 구간 95%로 표본 오차 10% 이내가 되고 있고 조사 네가 되어 있어」라고 하는 것이 있었습니다. 들은 적이 있고 대학의 수업에서 했던 기억이 있지만… 유감스럽지만 생각나지 못했기 때문에 google 선생님에게 물어보는 것에…

표본 오차



표본 오차는 표본에서 모집단의 수치를 추정 할 때 수반되는 오차입니다. 흠흠… 배운 느낌이 든다. 테스트에서 신뢰 구간이 도래하면 문제가 있었다고 기억이 희미하게 부활했습니다.
이 사이트 가 알기 쉽고 조금 전의 예로 실제로 계산해 보면…
\begin{align}
\bar{p}=0.5\\
n=200\\
1.96\sqrt{\cfrac{\bar{p}(1-\bar{p})}{n}}&=1.96\sqrt{\cfrac{0.5(1-0.5)}{200}}\\
&=0.0692924...
\end{align}

표본 오차 7%가 되는 것 같습니다. (덧붙여서 샘플 100개로 10%정도가 된, 거짓말이나 냄새)
표본 오차의 생각은 의식 해 두는 것이 좋다고 생각했습니다.

여기에서 덤의 놀이 (본문 짧은 w)



완전히 무작위로 선택된 샘플이면 좋다고 듣고…
모집단으로서 Saddle shape의 데이터를 준비해 주고 그때부터 랜덤인 표본 얼마나 준비해 주면 본래의 Saddle shape를 추정할 수 있는 것…


import numpy as np

    map_size = 60
    def create_data(nb_samples, input_dim=3, retdim=False):
        latent_dim = 2
        z1 = np.random.rand(nb_samples) * map_size - map_size/2
        z2 = np.random.rand(nb_samples) * map_size - map_size/2

        x = np.zeros((nb_samples, input_dim))
        x[:, 0] = z1
        x[:, 1] = z2
        x[:, 2] = z1 ** 2 - z2 ** 2

        if retdim:
            return x, latent_dim
        else:
            return x

    # parameters to make data
    x_sigma = 0.1
    nb_samples = 900
    seed = 1

    # make data
    np.random.seed(seed)
    X = create_data(nb_samples)
    X += np.random.normal(0, x_sigma, X.shape)

이런 식으로 Saddle shape를 작성! 900 샘플에서 시작하여 가우스 프로세스 회귀를 사용하여 30*30 노드 포인트를 추정해 봅니다.
X축, Y축의 좌표로부터 Z축을 추정하네요! 분산 넣어 그리면 힘들게되기 때문에 평균을 청점으로 플롯했습니다!
from matplotlib import pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process import kernels as sk_kern
    x_input = X[:,:2]
    y_input = X[:,2]
    kernel = sk_kern.RBF(1.0, (1e-3, 1e3))  # + sk_kern.ConstantKernel(1.0,(1e-3,1e3)) + sk_kern.WhiteKernel()
    clf = GaussianProcessRegressor(
        kernel=kernel,
        alpha=1e-10,
        optimizer="fmin_l_bfgs_b",
        n_restarts_optimizer=20,
        normalize_y=True)

    clf.fit(x_input,y_input )
    clf.kernel_

    test_x = np.linspace(-map_size/2,map_size/2,30)
    test = np.meshgrid(test_x,test_x)
    test=np.dstack(test).reshape(900,2)

    pred_mean, pred_std = clf.predict(test, return_std=True)

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1, aspect='equal', projection='3d')
    ax.scatter(X[:,0],X[:,1],X[:,2],color='r')
    ax.scatter(test[:,0],test[:,1],pred_mean)
    plt.show()



글쎄, 900 점이 너무 많을 수있어, 방금 방정식으로 계산하면 오차는 3 % 정도 같다.
여기부터는 샘플 수 적은 편에서
우선 50!

흠흠…
덧붙여서 조금 전의 식에서의 표본 오차는 약 14%
다음은 100!

안장 같은 모양이야! ! 과연 10%
200도 해보자

다소 가랑이? 일어날 것 같지만 충분히 탈 수 있어!
오차는 7%
400으로 마지막으로 할까

네, 이것 900과 손색 없어?

요약



표본 오차의 생각은 재미있다고 생각했습니다! (이렇게 통계학의 태그를 붙여 화내거나 하지 않을까 깜짝 놀고 있다)
조금 어색하고 덤의 장은 전혀 엄밀한 실험 계획 세우지 않기 때문에 어쩐지 그럴듯한 그림을 붙여 먹고 있는 것만으로 전혀 의미가 없거나 하는 것은 애경입니다 m(_ _)m

좋은 웹페이지 즐겨찾기