質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2312閲覧

pythonのループ(logistic回帰)

ok020316

総合スコア7

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2018/05/06 00:53

編集2018/05/06 00:56

前提・実現したいこと

500人に対して50項目のアンケートを行ったファイルにおいて各検査結果を目的変数としたlogistic回帰を実行したい。(python)

ここに質問の内容を詳しく書いてください。
500人に対して50項目のアンケートを行ったファイルがあります。男性の場合1、女性の場合0として目的変数yは性別
説明変数をアンケート結果として表記しました。アンケート結果ははいを1、いいえを0としています。男女別の傾向をみるためにlogistic回帰を行おうと考えました。
ファイルの形式はcsvで500行(各人のID)、50列(各アンケート結果)
アンケートをx_1~x_50とし、y~x_1,x_2,・・・x_50と、1つ1つの検査結果を説明変数としてdf=1のlogistic解析を
50個まとめてpythonで施行したいと考えています。

発生している問題・エラーメッセージ

for文でエラーが表示される
エラーメッセージ
NameError Traceback (most recent call last)
<ipython-input-79-d0bb2b48b9f5> in <module>()
10 test_result = pd.read_csv("sample.csv")
11 test_result
---> 12 for i in [x_1,x_2,x_3,x_4,x_5,x_6,x_7,x_8,x_9,x_10,x_11,x_12,x_13,x_14,x_15,x_16,x_17,x_18,x_19,x_20,x_21,x_22,x_23,x_24,x_25,x_26,x_27,x_28,x_29,x_30,x_31,x_32,x_33,x_34,x_35,x_36,x_37,x_38,x_39,x_40,x_41,x_42,x_43,x_44,x_45,x_46,x_47,x_48,x_49,x_50]:
13 mod_glm = smf.glm(formula = "y ~ i",
14 data = test_result,
x_1 is not defined

該当のソースコード

import numpy as np
import pandas as pd
import scipy as sp
from matplotlib import pyplot as plt
import seaborn as sns
import statsmodels.formula.api as smf
import statsmodels.api as sm
%matplotlib inline
test_result = pd.read_csv("sample.csv")
test_result
for i in[x_1,x_2,x_3,x_4,x_5,x_6,x_7,x_8,x_9,x_10,x_11,x_12,x_13,x_14,x_15,x_16,x_17,x_18,x_19,x_20,x_21,x_22,x_23,x_24,x_25,x_26,x_27,x_28,x_29,x_30,x_31,x_32,x_33,x_34,x_35,x_36,x_37,x_38,x_39,x_40,x_41,x_42,x_43,x_44,x_45,x_46,x_47,x_48,x_49,x_50]:
mod_glm = smf.glm(formula = "y ~ i",
data = test_result,
family=sm.families.Binomial()).fit()

python

試したこと

mod_glm = smf.glm(formula = "y ~ x_1",
data = test_result,
family=sm.families.Binomial()).fit()
とそれぞれ入力すると問題なく施行できる。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

logictic回帰を使って何らかの結果を得ることが目的なのであれば、以下を使ったほうがシンプルと思います。
sklearn.linear_model.LogisticRegression

コードイメージは以下です。

python

1from sklearn.linear_model import LogisticRegression 2log_model = LogisticRegression() # LogisticRegressionの定義 3result = log_model.fit(X,Y) # 説明変数のarrayであるXと目的変数のarrayであるYを使った学習

つまらないことですが、男女別の傾向を知るためにlogistic回帰を使うのであれば説明変数は性別を使うべきかと思います。(質問の記載:目的変数yは性別、説明変数をアンケート結果と…)

投稿2018/05/06 02:02

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ok020316

2018/05/06 02:38

R.Shigemori様 有難うございます。そちらでもいけました。
guest

0

ベストアンサー

未定義の変数は使えません。というか、質問者様はまず文字列リテラルと変数の区別がついていないと思います。これがわからないとちょっと今後しんどいと思うので(統計分析に使おうなんて無謀極まりないレベル)、pythonプログラミングの入門書をやってくださいな。

文字列のリストにしたいなら、

python

1["x_1","x_2","x_3",...]

ですが、df.columnsとかにうまいこと同じようなものが格納されていると思うので、スライスなどで切り出して使うのもあり(というかそうしないとしんどい)。

そのライブラリ自体はよくわからないのですが、軽く調べた感じだと重回帰にするなら"y ~ x_1+x_2+..."というフォーマットで、単回帰を50回やるっていうのならとりあえず文字列結合でフォーマットを作ってください。こんな感じだと思います。

python

1for x_name in["x_1","x_2",...]: 2 mod_glm = smf.glm(formula = "y ~ "+x_name, 3 data = test_result, 4 family=sm.families.Binomial()).fit()

投稿2018/05/06 01:20

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ok020316

2018/05/06 02:37

hayataka2049様 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問