この質問は、Python 3の統計モデルとその一般的な線形モデルクラスに関するものです。このコンバージェンスエラーを修正するにはどうすればよいですか? Python 3 statsmodels
私の内因性変数の値の配列があり、その値が大きさの桁よりも大きい場合、GLMは収束せず、例外がスローされます。ここに私が意味するもののコード化された例があります。
import pandas as pd
import pyarrow.parquet as pq
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
import math
col = ["a", \
"b", \
"c", \
"d", \
"e", \
"f", \
"g", \
"h"]
df = pd.DataFrame(np.random.randint(low=1, high=100, size=(20, 8)), columns=col)
df["a"] = [0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
df2 = pd.DataFrame(np.random.randint(low=1, high=100, size=(20, 8)), columns=col)
df2["a"] = np.random.randint(low=10000, high=99999, size=(20, 1))
df3 = pd.DataFrame(np.random.randint(low=1, high=100, size=(20, 8)), columns=col)
df3["a"] = [0.01, \
0.01, \
0.01, \
0.01, \
0.01, \
0.01, \
np.random.randint(low=10000, high=99999), \
0.01, \
0.01, \
0.01, \
0.01, \
0.01, \
np.random.randint(low=10000, high=99999), \
0.01, \
0.01, \
0.01, \
0.01, \
0.01, \
0.01, \
0.01]
try:
actual = df[["a"]]
fml1 = "a ~ log(b) + c + d + e + f + g"
data1 = df[["b", "c", "d", "e", "f", "g"]]
model = sm.GLM(actual, data1, formula=fml1, family=sm.families.Tweedie(link_power=1.1)).fit()
model_pred = model.predict()
print("SUCCESS")
except:
print("FAILURE")
try:
actual = df2[["a"]]
fml1 = "a ~ log(b) + c + d + e + f + g"
data1 = df2[["b", "c", "d", "e", "f", "g"]]
model = sm.GLM(actual, data1, formula=fml1, family=sm.families.Tweedie(link_power=1.1)).fit()
model_pred = model.predict()
print("SUCCESS")
except:
print("FAILURE")
try:
actual = df3[["a"]]
fml1 = "a ~ log(b) + c + d + e + f + g"
data1 = df3[["b", "c", "d", "e", "f", "g"]]
model = sm.GLM(actual, data1, formula=fml1, family=sm.families.Tweedie(link_power=1.1)).fit()
model_pred = model.predict()
print("SUCCESS")
except:
print("FAILURE")
このコードを実行すると、最後のデータセットでのみ例外が発生します。どうしてこれなの? GLMをどのようにして収束させるのですか?代わりがありますか?
解決策の1つ(明日)を試して、それが機能することを確認する際に賞金を授与します。 –