Memorandum über Korrelation [Python]

Einführung

Dieser Artikel erinnert an einige Versuche, die Korrelation von Daten mit Fehlervariablen und Verschränkungsfaktoren zu berücksichtigen.

Zunächst werde ich die Struktur dieses Artikels zeigen.

  1. Kausale Struktur von Daten ([Datengenerierung](# Datengenerierung))
  2. Korrelation / Teilkorrelation 1 ([Korrelation / Teilkorrelation [1]](# Korrelation - Teilkorrelation-1))
  3. Sparse Schätzung ([Graphical Lasso](# Graphical-Lasso))
  4. Korrelation / Teilkorrelation 2 ([Korrelation / Teilkorrelation [2]](# Korrelation - Teilkorrelation-2))
  5. Regressionsanalyse ([Regressionsanalyse](# Regressionsanalyse))
  6. Zusammenfassung (Zusammenfassung)

Data Generation

In Bezug auf die Datenskala sind "Nominalskala", "Auftragsskala", "Kategorievariable" usw. nicht enthalten, und in Bezug auf Art und Struktur der Daten "Verzerrung", "unbeobachteter Verschränkungsfaktor", "gerichtete Patrouille" usw. nicht hier. Angenommen, alle zu verarbeitenden multivariaten Daten sind kontinuierliche Werte und folgen jeweils einer Normalverteilung. Wir standardisieren die "Korngröße" der Daten.

import pandas as pd
import numpy as np
import math
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set()
import scipy as sp
from scipy import linalg
from scipy.stats import multivariate_normal
from sklearn.linear_model import LinearRegression, HuberRegressor, TheilSenRegressor, RANSACRegressor
from sklearn.svm import SVR
from sklearn.covariance import GraphicalLasso
from sklearn.preprocessing import StandardScaler 
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, mean_squared_log_error

Erzeugt Daten mit der folgenden gerichteten, nicht zirkulierenden Kausalstruktur. Anstelle der Auswirkung nicht beobachteter Faktoren werden jedem Knoten Zufallszahlen, die einer normalen oder gleichmäßigen Verteilung folgen, als Fehlervariablen hinzugefügt.

np.random.seed(0)
data_ = np.array([[20, 1, 0.3242, 34, 1, 0.10, 52, 5], [52, 0, 0.6134, 63, 1, 0.35, 38, 8], 
                  [38, 0, 0.7136, 57, 0, 0.20, 64, 7], [63, 1, 0.4592, 49, 0, 0.80, 95, 2]])
mu = np.mean(data_, axis = 0)
cov = np.cov(data_, rowvar = 0, bias = 0)

w_9 = np.random.multivariate_normal(mu, cov, 1000)[:, 0][:, np.newaxis] + np.random.uniform(1.3, size = 1000)[:, np.newaxis]
w_8 = 0.32 * w_9 + np.random.multivariate_normal(mu, cov, 1000)[:, 3][:, np.newaxis]
w_7 = np.random.multivariate_normal(mu, cov, 1000)[:, 1][:, np.newaxis] + np.random.uniform(1.6, size = 1000)[:, np.newaxis]
w_6 = 0.50 * w_7 + np.random.multivariate_normal(mu, cov, 1000)[:, 4][:, np.newaxis]
w_5 = 0.53 * w_7 + np.random.multivariate_normal(mu, cov, 1000)[:, 5][:, np.newaxis]
w_4 = 0.48 * w_5 + 0.40 * w_6 + np.random.uniform(1.5, size = 1000)[:, np.newaxis]
w_3 = 0.28 * w_4 + np.random.uniform(1.7, size = 1000)[:, np.newaxis]
w_2 = 0.20 * w_5 + np.random.uniform(3.2, size = 1000)[:, np.newaxis]
w_1 = 0.31 * w_2 + np.random.uniform(1.5, size = 1000)[:, np.newaxis]
w_0 = 0.290 * w_1 + 0.327 * w_4 + 0.491 * w_8 + 0.136 * w_9 + 10.0 + np.random.multivariate_normal(mu, cov, 1000)[:, 2][:, np.newaxis]

mu = np.mean(w_0, axis = 0)
cov = np.cov(w_0, rowvar = 0, bias = 0)
list_ = np.where(w_0 <= 0)
for i in list_:
    normal = np.random.normal(mu, cov)
    if normal <= 0:
        w_0[i] = mu

    elif normal > 0:
        w_0[i] = normal

data_ = pd.DataFrame(np.concatenate([w_0, w_1, w_2, w_3, w_4, w_5, w_6, w_7, w_8, w_9], axis = 1))

Correlation / Partial Correlation [1]

Idealerweise würde die Korrelationsmatrix das Ergebnis liefern, dass "w_7" eine Korrelation zwischen "w_5" und "w_6" hatte, und die partielle Korrelationsmatrix würde das Ergebnis liefern, dass die Korrelation eine Pseudokorrelation war. Gleichzeitig interessiert mich auch, wie sich die Ergebnisse der Korrelation zwischen "w_0" und "w_8" zwischen der Korrelationsmatrix und der partiellen Korrelationsmatrix ändern. Wenn die Datenstruktur nicht wie die Beziehung von "w_0" "w_8" "w_9" kompliziert ist, wird die partielle Korrelationsmatrix verwendet, selbst wenn der Verschränkungsfaktor "w_9" existiert, wenn kein kausaler Zusammenhang zwischen "w_0" und "w_8" besteht. Die Berechnung sollte das Ergebnis ergeben, dass "w_0" und "w_8" keinen Kausalzusammenhang haben. Andererseits gibt es in den zu verarbeitenden Daten einen Kausalzusammenhang zwischen "w_0" und "w_8", und es gibt "w_9", was ein Verschränkungsfaktor für "w_0" und "w_8" ist. In diesem Fall wollen wir sehen, wie die Korrelation von "w_0" "w_8" ausgedrückt wird. Überprüfen Sie, wie genau die Korrelation für w_0 und w_1`` w_4`` w_8 w_9 ist.

def partital_corr(data):
    temp_cov = data.cov()
    omega = np.linalg.inv(temp_cov)
    D = np.diag(np.power(np.diag(omega), -0.5))
    temp_pcorr = -np.dot(np.dot(D, omega), D) + 2 * np.eye(temp_cov.shape[0])
    mtx_pcorr = pd.DataFrame(temp_pcorr, columns = temp_cov.columns, index = temp_cov.index)
    return mtx_pcorr


partial_correlation = partital_corr(data_)

fig = plt.subplots(figsize=(9, 9))
heatmap = sns.heatmap(data_.corr(), annot = True, cmap = 'Blues', square = True)
heatmap_ = sns.heatmap(partial_correlation, annot = True, cmap = 'Blues', square = True)

Correlation(left) VS Partial Correlation(right)

w_0``w_8 w_0``w_9 w_0``w_1 w_0``w_4 w_5``w_6 w_8``w_9
Korrelation 0.96 0.66 -0.031 0.014 0.36 0.43
Teilkorrelation 1 1 0.28 0.24 -0.6 -1

Eine Interpretation ist bei der Berechnung der Varianz-Kovarianz-Matrix bei der Berechnung der partiellen Korrelationsmatrix, da sowohl "w_5" als auch "w_6", die vom Verschränkungsfaktor "w_7" beeinflusst werden, "w_4" beeinflussen. Es scheint, dass davon ausgegangen werden kann, dass die Beziehung zwischen Variablen nicht gut gemessen wird. Für eine weitere Überlegung fügt Korrelation / Teilkorrelation [2] den Daten eine Schleifenstruktur und Ausreißer hinzu.

Graphical Lasso Grafisches Lasso ist eine spärliche Schätzung, die die Umkehrung einer dünn verteilten kovarianten Matrix berechnet, wenn die Daten einer multivariaten Normalverteilung folgen. Es enthält Elemente des grafischen Gaußschen Modells und eine spärliche Schätzung. Berücksichtigen Sie die bedingte Unabhängigkeit in Bezug auf andere Variablen in der Korrelation zwischen zwei Variablen. Inverse Matrix (Präzisionsmatrix) einer dünn verteilten, gemeinsam verteilten Matrix durch Erstellen einer logarithmischen Wahrscheinlichkeitsfunktion aus der aus den Daten berechneten verteilten, gemeinsam verteilten Matrix und Lösen des Minimierungsproblems für die Verlustfunktion mit dem hinzugefügten Regularisierungsterm $ L1 $. Schätzen. Grafisches Lasso ist nicht für die Daten geeignet, mit denen Sie raten, aber ich werde es versuchen.

ss = StandardScaler()
data_ss = ss.fit_transform(data_)
gl = GraphicalLasso(alpha = 0.1, max_iter = 100, )
gl.fit(data_ss)
gl.get_params()

# correlation
diag = np.zeros(shape = (10, 10))
for i in range(diag.shape[0]):
    for j in range(diag.shape[1]):
        if i == j:
            diag[i,j] = 1 / np.sqrt(gl.covariance_[i,j])
corr = np.dot(np.dot(diag, gl.covariance_), diag)

# partial correlation
omega = np.linalg.inv(gl.covariance_)
diag = np.diag(np.power(np.diag(omega), -0.5))
partial_corr = -np.dot(np.dot(diag, omega), diag)
partial_corr += 2 * np.eye(gl.covariance_.shape[0])

heatmap_gl =sns.heatmap(corr, annot = True, cmap = 'Blues', square = True)
figure_gl = heatmap_gl.get_figure()
figure_gl.savefig('graph_gl_corr')

heatmap_gl_ = sns.heatmap(partial_corr, annot = True, cmap = 'Blues', square = True)
figure_gl_ = heatmap_gl_.get_figure()
figure_gl_.savefig('graph_gl_partial_corr')

Correlation(left) VS Partial Correlation(right) Grafisches Lasso ist kein Algorithmus, der Rauschen und Verschränkung unterstützt. Daher wird davon ausgegangen, dass es für diese Daten keine geeignete Wahl ist.

Correlation / Partial Correlation [2] Erstellen Sie eine Schleifenstruktur in w_0`` w_4`` w_6 und erstellen Sie w_1 w_4`` w_9 Daten mit Ausreißern.

np.random.seed(0)
data_ = np.array([[20, 1, 0.3242, 34, 1, 0.10, 52, 5], [52, 0, 0.6134, 63, 1, 0.35, 38, 8], 
                  [38, 0, 0.7136, 57, 0, 0.20, 64, 7], [63, 1, 0.4592, 49, 0, 0.80, 95, 2]])
mu = np.mean(data_, axis = 0)
cov = np.cov(data_, rowvar = 0, bias = 0)

#w_11 = np.random.multivariate_normal(mu, cov, 1000)[:, 6][:, np.newaxis] 
#w_10 = 0.27 * w_11 + np.random.multivariate_normal(mu, cov, 1000)[:, 7][:, np.newaxis] 
w_9 = np.random.multivariate_normal(mu, cov, 1000)[:, 0][:, np.newaxis] + np.random.uniform(1.3, size = 1000)[:, np.newaxis]

noise_upper = np.random.normal(200, 30, 20)
noise_row = np.random.randint(0, 1000, 20)
w_9[noise_row] = noise_upper[:, np.newaxis]

w_8 = 0.32 * w_9 + np.random.multivariate_normal(mu, cov, 1000)[:, 3][:, np.newaxis]
w_7 = np.random.multivariate_normal(mu, cov, 1000)[:, 1][:, np.newaxis] + np.random.uniform(1.6, size = 1000)[:, np.newaxis]
w_6 = 0.50 * w_7 + np.random.multivariate_normal(mu, cov, 1000)[:, 4][:, np.newaxis] + 0.53 * w_0
w_5 = 0.53 * w_7 + np.random.multivariate_normal(mu, cov, 1000)[:, 5][:, np.newaxis]
w_4 = 0.48 * w_5 + 0.40 * w_6 + np.random.uniform(1.5, size = 1000)[:, np.newaxis]

noise_lower = np.random.normal(0.6, 0.2, 10)
noise_upper = np.random.normal(30, 2, 30)
noise_row = np.random.randint(0, 1000, 40)
w_4[noise_row] = np.concatenate([noise_lower, noise_upper])[:, np.newaxis]

w_3 = 0.28 * w_4 + np.random.uniform(1.7, size = 1000)[:, np.newaxis]
w_2 = 0.20 * w_5 + np.random.uniform(3.2, size = 1000)[:, np.newaxis]
w_1 = 0.31 * w_2 + np.random.uniform(1.5, size = 1000)[:, np.newaxis]

noise_upper = np.random.normal(30, 4, 20)
noise_upper_ = np.random.normal(50, 3, 20)
noise_row = np.random.randint(0, 1000, 40)
w_1[noise_row] = np.concatenate([noise_upper, noise_upper_])[:, np.newaxis]

w_0 = 0.290 * w_1 + 0.327 * w_4 + 0.491 * w_8 + 0.136 * w_9 + 10.0 + np.random.multivariate_normal(mu, cov, 1000)[:, 2][:, np.newaxis] #+ 0.426 * w_11

mu = np.mean(w_0, axis = 0)
cov = np.cov(w_0, rowvar = 0, bias = 0)
list_ = np.where(w_0 <= 0)
for i in list_:
    normal = np.random.normal(mu, cov)
    if normal <= 0:
        w_0[i] = mu

    elif normal > 0:
        w_0[i] = normal

data_ = pd.DataFrame(np.concatenate([w_0, w_1, w_2, w_3, w_4, w_5, w_6, w_7, w_8, w_9], axis = 1))
def partital_corr(data):
    temp_cov = data.cov()
    omega = np.linalg.inv(temp_cov)
    D = np.diag(np.power(np.diag(omega), -0.5))
    temp_pcorr = -np.dot(np.dot(D, omega), D) + 2 * np.eye(temp_cov.shape[0])
    mtx_pcorr = pd.DataFrame(temp_pcorr, columns = temp_cov.columns, index = temp_cov.index)
    return mtx_pcorr


partial_correlation = partital_corr(data_)

fig = plt.subplots(figsize=(9, 9))
heatmap = sns.heatmap(data_.corr(), annot = True, cmap = 'Blues', square = True)
heatmap_ = sns.heatmap(partial_correlation, annot = True, cmap = 'Blues', square = True)

Correlation(left) VS Partial Correlation(right) Da "w_0" und "w_4" in einer Schleifenstruktur verbunden sind, ist das Ergebnis, dass "w_4" mit "w_8" bzw. "w_9" korreliert. Die Korrelationsmatrix zeigt eine positive Korrelation und die partielle Korrelationsmatrix zeigt eine negative Korrelation. Im Ergebnis der Korrelationsmatrix zeigt "w_9" indirekt eine positive Korrelation in Bezug auf "w_3" in der Korrelation bei "w_3" "w_4" "w_9". In den Ergebnissen der partiellen Korrelationsmatrix sind "w_3" und "w_9" nicht korreliert und "w_4" und "w_9" sind negativ korreliert. Sie können einige Stellen sehen, an denen die Korrelationsmatrix kompatibel ist, die partielle Korrelationsmatrix jedoch nicht. Das Gegenteil ist auch der Fall. Sie können auch sehen, dass die Korrelationsmatrix eine positive Korrelation und die partielle Korrelationsmatrix eine negative Korrelation zeigt.

Es gibt nicht genügend Beweise, um eine ausreichende Berücksichtigung zu finden, aber eine Interpretation ist, dass aus den Fällen in diesem Abschnitt sowohl die Korrelationsmatrix als auch die Teilkorrelationsmatrix "Fehlervariablen einer bestimmten Größe oder größer" und "ein Faktor (Variable)" sind. Zwei oder mehr Variablen $ x_1, ..., x_n $, die indirekt oder direkt betroffen sind, sind kausal oder korreliert, oder zwei oder mehr von $ x_1, ..., x_n $ sind andere Es scheint, dass davon ausgegangen werden kann, dass "bei Beeinflussung derselben Variablen" und "Schleifenstruktur" nicht gut gehandhabt werden.

Regressionsanalyse

Da "w_0" so gemacht wird, dass es durch einen linearen Ausdruck ausgedrückt werden kann, wird eine Regressionsanalyse durchgeführt. Wenn Sie für die Fehlerverteilung "Normalität", "gleiche Streuung" und "Unabhängigkeit" und für die Beziehung zwischen der Zielvariablen und der erklärenden Variablen "Linearität" annehmen können, sollten Sie eine starke Motivation haben, eine Regressionsanalyse durchzuführen. Ich kann es schaffen Ich habe auch HuberRegressor und SVR mit scikit-learn ausprobiert, aber LinearRegression ist ausreichend. Dies liegt daran, dass die verarbeiteten Daten keine Verzerrung wie Auswahlverzerrung oder nicht beobachtete Verschränkungsfaktoren aufweisen. Bei SVR verwenden wir einen linearen Kernel, der den Eingabevektor gewichtet. Die Genauigkeit kann auch dann erhalten werden, wenn die Regression durch das Verfahren zum Anpassen des Freiheitsgrades unter Verwendung eines polymorphen Kerns, der mehreren Elementen entspricht, oder durch das Verfahren unter Verwendung eines Gaußschen Kernels durchgeführt wird. Die Hoover-Regression wird für eine robuste Regression verwendet. Dieses Mal weist die Fehlerverteilung keine Asymmetrie oder kein großes Rauschen auf, so dass sie nicht als geeignete Wahl angesehen wird. Da es keine Motivation gibt, wie "die Zielvariable einer Normalverteilung folgen lassen", "Ausreißer behandeln" oder "die Beziehung zwischen der Zielvariablen und der erklärenden Variablen ist tendenziell eine Exponentialfunktion", wird keine logarithmische Umwandlung durchgeführt.

X_train, X_valid, y_train, y_valid = train_test_split(data_.drop(0, axis =1), data_[0], test_size = 0.4, random_state = 0)
data_ss = pd.DataFrame(data_ss)
X_train_ss, X_valid_ss, y_train_ss, y_valid_ss = train_test_split(data_ss.drop(0, axis =1), data_ss[0], test_size = 0.4, random_state = 0)
y_valid = y_valid.sort_index(ascending = True)
X_valid = X_valid.sort_index(ascending = True)
y_valid_ss = y_valid_ss.sort_index(ascending = True)
X_valid_ss = X_valid_ss.sort_index(ascending = True)

plt.hist(np.ravel(y_train), label = 'training data', color = 'c')
plt.hist(np.ravel(y_valid), label = 'valid data', color = 'k')
plt.savefig('graph_hist')
#Nicht standardisierte Daten
linear = LinearRegression()
linear.fit(X_train, y_train)
# <SVR>
# svr_linear = SVR(kernel = 'linear', C = 1.0, epsilon = 0.1, gamma = 'scale')
# svr_linear.fit(X_train, np.ravel(y_train))
# scores = svr_linear.score(X_valid, y_valid)
# print('R^2 scores : %s' %scores)
# <HuberRegressor>
# hr = HuberRegressor(alpha = 0.0001, epsilon = 1.35, # fit_intercept = True, max_iter = 100, tol = 1e-05, warm_start = False)
# hr.fit(X_train, y_train)
pred = linear.predict(X_valid)
plt.plot(np.ravel(y_valid), label = 'true valid', color = 'k')
plt.plot(np.ravel(pred), label = 'pred valid', color = 'w')

diff = np.log1p(pred) - np.log1p(y_valid)
diff = np.where(np.isnan(diff) == True, 0, diff)
RMSLE = np.sqrt(np.mean(diff ** 2))

#Standardisierte Daten
linear_ss = LinearRegression()
linear_ss.fit(X_train_ss, y_train_ss)
# <SVR>
# svr_linear_ss = SVR(kernel = 'linear', C = 1.0, epsilon = 0.1, gamma = 'scale')
# svr_linear_ss.fit(X_train_ss, np.ravel(y_train_ss))
# scores = svr_linear_ss.score(X_valid_ss, y_valid_ss)
# print('R^2 scores : %s' %scores)
# <HuberRegressor>
# hr_ss = HuberRegressor(alpha = 0.0001, epsilon = 1.35, # fit_intercept = True, max_iter = 100, tol = 1e-05, warm_start = False)
# hr_ss.fit(X_train_ss, y_train_ss)
pred_ss = linear_ss.predict(X_valid_ss)
plt.plot(np.ravel(y_valid_ss), label = 'true valid', color = 'k')
plt.plot(np.ravel(pred_ss), label = 'pred valid', color = 'w')

coef = pd.DataFrame(X_train.columns.values, columns = {'feature'})
coef['coef'] = linear.coef_.T
coef['coef_ss'] = linear_ss.coef_.T
print('MSE : %s' %mean_squared_error(y_valid, pred, squared = True))
print('RMSLE : %s' %RMSLE)
>> RMSE : 0.02983134938758614
>> RMSLE : 0.03423681936352853

coef.sort_values(by = 'coef', ascending = False)
>>
feature     coef
	8	0.480333
	4	0.322978
	1	0.284168
	9	0.133841
	6	0.039120
	5	0.016435
	3	-0.005714
	2	-0.009774
	7	-0.020549
print('MSE : %s' %mean_squared_error(y_valid_ss, pred_ss, squared = True))
>> MSE : 0.000242675476861591

coef.sort_values(by = 'coef_ss', ascending = False)
>>
feature     coef
	8	0.652601
	9	0.332685
	1	0.194995
	4	0.109338
	6	0.020749
	5	0.000665
	3	-0.000551
	2	-0.000566
	7	-0.001129

Überprüfen Sie die Residuen.

#Nicht standardisierte Daten
plt.scatter(pred, pred - y_valid, color = 'blue') 
plt.hlines(y = 0, xmin = -10, xmax = 150, color = 'c')
plt.xlabel('Prediction')
plt.ylabel('Residual error')
plt.grid()

#Standardisierte Daten
plt.scatter(pred_ss, pred_ss - y_valid_ss, color = 'blue') 
plt.hlines(y = 0, xmin = -10, xmax = 150, color = 'c')
plt.xlabel('Prediction')
plt.ylabel('Residual error')
plt.grid()

Non Standardized(left) VS Standardized(right)

#Nicht standardisierte Daten
plt.hist(pred - y_valid)

#Standardisierte Daten
plt.hist(pred_ss - y_valid_ss)

Non Standardized(left) VS Standardized(right)

Die Residuen standardisierter und nicht standardisierter Daten sind im Bereich von $ ± 0,5 $ bzw. $ ± 0,05 $ von $ y = 0 $ verstreut, und die Residuen können wie gewohnt bestätigt werden. Die Art und Weise, wie die Residuen gestreut werden, ist nicht unregelmäßig und symmetrisch mit $ y = 0 $ als Grenze. Die standardisierten Daten haben eine höhere Vorhersagegenauigkeit für die Verifizierungsdaten durch MSE als die nicht standardisierten Daten, aber wenn der Beitrag des Koeffizienten zur Zielvariablen in absteigender Reihenfolge bestätigt wird, werden die nicht standardisierten Daten "8" 4 "1" " Sie können sehen, dass die 9'-Sequenz genauer ist als die standardisierten Daten, die eine hohe Vorhersagegenauigkeit für die Verifizierungsdaten aufweisen. Selbst wenn den Daten Fehlervariablen und Ausreißer hinzugefügt werden, ist die Genauigkeit angemessen, wenn die Daten nicht mehrere Skalen oder nicht beobachtete Verschränkungsfaktoren aufweisen. Selbst wenn mehr zufällige und größere Fehlervariablen und Ausreißer zugeordnet werden, wird der Beitrag des Koeffizienten zur Zielvariablen in diesen Daten angemessen berechnet, und das Ergebnis ist, dass die Genauigkeit des Modells nicht stabil ist, wenn nicht beobachtete Variablen vorhanden sind. Es ist herausgekommen.

Die regressive Analyse wird unter Verwendung von "statsmodels.formula.api" für Daten durchgeführt, die Unterschiede in mehreren Skalen und Granularität berücksichtigen, wenn der Schwerpunkt eher auf Vorhersage als auf kausalen Beziehungen liegt, und "Cond für multiple Co-Linearität". Sie können auch Nein "überprüfen und feststellen, dass die multiple Co-Linearität schwach ist, wenn die Anzahl der Bedingungen nahe 1 liegt. Andernfalls berechnen Sie den Varianzexpansionsfaktor mit" Varianzinflationsfaktor "in" statsmodels.stats.outliers_influence ". .. Wenn beispielsweise zwischen zwei Variablen mehrere Co-Linearitäten bestehen, existiert die Regressionsebene nur auf der geraden Linie, da die Variablen in einer geraden Linie angeordnet sind und die Umkehrung der verteilten co-verteilten Matrix nicht existiert. Ich kann nicht lösen. Infolgedessen wird "die Standardabweichung des Koeffizienten groß", "der $ t $ -Wert wird klein und beeinflusst den $ p $ -Wert", "der Bestimmungskoeffizient nimmt einen großen Wert an" und so weiter. Verwenden Sie "statsmodels.formula.api", um den inhaltlichen Effekt anhand des Wertes $ p $, des Werts $ z $ und des Konfidenzintervalls der Grundgesamtheit "," Kovarianztyp "und" für Beispieldaten "zu bestimmen. Sie können den Normalitätstest (Omnibus-Test) leicht überprüfen.

Zusammenfassung

Ich habe die Korrelation berücksichtigt und eine Regressionsanalyse für Daten mit Fehlervariablen und Verschränkungsfaktoren durchgeführt. Obwohl es sich um ein Memorandum handelt, bin ich der Meinung, dass der Inhalt des Artikels in Bezug auf das Thema nicht übereinstimmt. Wenn wir die Daten, die als Artikel verwendet werden können, richtig anordnen können, können wir anscheinend interessantere Dinge tun, wie beispielsweise die Abschätzung von Ursache und Wirkung durch Modellierung von Strukturgleichungen.

Recommended Posts