問題タブ [glm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 複数の glm プロットを PNG としてエクスポートしますか?
それで、
線形モデルのプロットをエクスポートしようとしています。PDF として作成すると、PDF には 4 つのページと 4 つの異なるチャートが含まれます。PNG としてエクスポートすると、最初のグラフしか取得できません。4 つのグラフすべてを別々の PNG ファイルとして取得するようにエクスポートするにはどうすればよいですか?
PDFで何が機能したか:
PNGで機能しなかったもの(そして、インターネットとプロットのドキュメントを2時間掘り下げて役に立たなかった):
画像を取得するにはどうすればよいですか?
ありがとう、
-Wm
r - glmから標準エラーを抽出する
私はaを実行しglm
、各係数の標準誤差を抽出したいだけです。インターネットで関数を見ましたが、機能se.coef()
せず、戻ります"Error: could not find function "se.coef""
。
r - ランダム効果が指定されているが、nlmeエラー「グループの式が無効です」
私はこれをいくつか検索しましたが、私が見つけたメーリングリストの投稿はnlme
、私がこれを行ったのに対し、ランダム効果を指定していない人に関連付けられています. 私は、Pinheiro と Bates による本 Mixed Effect Models in S and S-Plus も所有していますが、この本から私の問題を解決することはできません。
私はまだ栄養データの分析に取り組んでおり、現在は実際のデータに移行しています. データは人口調査から得られたもので、各回答者が栄養素の 24 時間摂取量を 2 回想起するため、反復測定設計を特徴としています。
lme4 モデルをデータにうまく当てはめましたが、代わりに非線形法を使用するとどうなるかを調べようとしています。私のデータのスナップショットは以下のとおりです。
データに関する要約情報は次のとおりです。
パッケージを使用して、次を使用lme4
して線形混合効果モデルを正常に適合させました (ランダム効果は被験者からのものであり、 の変換である にIntakeDay
関連付けられた反復測定係数です):BoxCoxXY
IntakeAmt
このパッケージを使用してnlme
、非線形モデルをフィッティングして 2 つを比較しようとしましたが、構文を機能させることができません。私の最初の問題は、自分のデータに関連する SelfStart モデルがないように見えることでした。そのため、geeglm
開始値 ( というデータ フレームに保存された係数Male.nlme.start
) を生成していました。しかし、今はエラーが発生します:
私が間違っていることを理解できませんnlme
。私が使用している構文は次のとおりです。
全体的なモデル仕様に含まれている場合と含まれていない場合の両方で分析を試みましたRespondentID
が、影響はないようです。
私が非線形の方法に固執しようとしている理由は、SAS の元の分析が非線形のアプローチを使用していたからです。私の残差などは、lme 分析からは許容できるほど良好に見えますが、非線形アプローチがどのような影響を与えるかを知りたいと思っています。
参考traceback()
までに、前回の分析試行の結果RespondentID
は次のとおりです。
誰かが私が間違っている場所を提案できますか? (1) の因子レベルが多すぎRespondentID
て機能しないのnlme
か、(2) の開始パラメーターを指定した場合にのみメソッドが機能するのか、これは私のデータであるためRespondentID
、これは私が持っているデータでは無意味に思えます。サブジェクト識別子。
更新:ベンに答えるために、SASnlmixed
モデルは固定効果の一般的な対数尤度関数です:
どこ:
Scale
geeglm
=とからの分散値
Lambda.Value
= 式を介してboxcox()
変換するために使用された、以前の からの最大対数尤度出力に関連付けられたラムダ値IntakeAmt
BoxCoxXY
Male.Data$BoxCoxXY <- (Male.Data$IntakeAmt^Lambda.Value-1)/Lambda.Value
SAS コードのrandom
ステートメントは次のとおりです。
そのため、モデルには 2 つの誤差項があり、両方とも変量効果として適合しています。2 番目の角括弧は、行順にリストされた変量効果分散行列の下三角を表し、SAS 構文で SAS マクロ変数を使用して指定されます。
与えられたモデルの要約は、共変量行列 (BX) とエラー コンポーネントを示す通常の 1 行の概要であるため、ここではあまり役に立ちません。
2 番目の更新: 分析のために性別ごとに個別のデータ フレームに分割する前に、データ フレーム全体で RespondentID を因数分解したため、女性被験者に関連付けられた RespondentID レベルを削除していないことに気付きました。nlme
RespondentID の未使用の因子レベルを削除して分析を繰り返しましたが、同じエラーが発生しました。結果はlmer
同じです - これは良いことです。:)
r - 観測によって固定効果を抽出するにはどうすればよいですか?
いくつかの繰り返し測定された栄養摂取データ (RespondentID ごとに 2 つの 24 時間摂取期間) から構築された lme オブジェクトがあります。
RespondentID
を使用して、ランダム効果を正常に取得できますranef(Male.lme1)
。で固定効果の結果もまとめたいと思いRespondentID
ます。coef(Male.lme1)
以下に示すように、私が必要とするものを正確に提供しません。
適合結果をデータに追加しましたhead(Male.Data)
。
の最初の数行は次のcoef(Male.lme1)
とおりです。
coef
結果がMale.Dataの当てはめ推定値とどのように関連するかを示すために ( Male.Data$lmefits <- fitted(Male.lme1)
AgeFactorレベルが9-13の最初のRespondentIDについて、 を使用して取得されました: - 当てはめ値は15.22633
で、これは - 係数から -(Intercept) + (AgeFactor9-13) = 14.28304 + 0.9432941
各被験者の固定効果推定値を抽出するために、自動的に使用したい巧妙なコマンドがありますか、if
それとも正しい AgeFactor レベルを各被験者に適用して取得しようとする一連のステートメントに直面していますか?切片から変量効果の寄与を差し引いた後の、正しい固定効果の推定値?
更新、申し訳ありませんが、私が提供していた出力を削減しようとしていて、str() を忘れていました。出力は次のとおりです。
BodyWeight と Gender は使用されず (これは男性のデータなので、すべての Gender 値は同じです)、NutrientID はデータに対して同様に固定されています。
投稿して以来、私は恐ろしいifelseステートメントを行ってきたので、すぐにあなたの提案を試してみます。:)
Update2: これは私の現在のデータで完全に機能し、新しいデータに対して将来的にも保証されるはずです。これについてのコメントで追加のヘルプを提供してくれた DWin に感謝します。:)
r - R の Bigglm: ソース コードの制限と改善 (例: Fortran の呼び出し)
最近、R を使用して、100 mb csv ファイル (900 万行 x 5 列) で一般化線形モデル (GLM) を実行しています。このファイルの内容には、depvar、var1、var2、var3、var4 と呼ばれる 5 つの列が含まれており、列に 0、1、または 2 のいずれかの数値が含まれるようにすべてランダムに分散されています。基本的に、biglm パッケージを使用して GLM を実行しましたこのデータ ファイルと R はこれを約 2 分で処理しました。これは、R バージョン 2.10 (現在 2.14 に更新中)、4 コア、8 GB の RAM を使用する Linux マシン上にありました。基本的には、コードを 30 ~ 60 秒程度で高速に実行したいと考えています。1 つの解決策は、より多くのコアと RAM を追加することですが、データセットが大きくなるだけであることを認識しているため、これは一時的な解決策にすぎません。理想的には、bigglm のコードを高速化する方法を見つけたいと思っています。データセットでいくつかの R プロファイリング コードを実行しました。
次に、このコマンドを入力した後、次のような bigglm コードを記述します。
約 2 ~ 3 分かかるこれらのコードを実行した後、次のように入力してプロファイリング コードを表示します。
次に得られるのは、bigglm プロセスの内訳と、どの個々の行が非常に長くかかっているかです。これを見た後、非常に長い時間 (約 20 秒) かかっている fortran コードの呼び出しがあったことに驚きました。このコードは、次の Bigglm のベース ファイルにあります。
bigglm 0.8.tar.gz ファイル内
基本的に私がコミュニティに求めているのは、このコードをより高速にできるかということです。たとえば、コードを変更して Fortran コードを呼び出し、QR 分解を実行します。さらに、as.character や model.matrix のような他の関数もあり、これも時間がかかりました。私が提供した情報があれば簡単に再現できると思うので、ここにプロファイリング ファイルを添付しませんでしたが、基本的には、ビッグ データの大きな問題と、このビッグ データで GLM を処理することをほのめかしています。これは R コミュニティの間で共有されている問題であり、この問題に関するフィードバックやヘルプがあればありがたいと思います。おそらく、別のデータセットを使用してこの例を簡単に複製し、bigglm コードで非常に時間がかかっているものを調べて、それらが私が見つけたものと同じかどうかを確認できます。もしそうなら、誰かが bigglm をより速く実行する方法を理解するのを手伝ってくれます。Ben がリクエストした後、私が持っていたプロファイリング コードのスニペットと、csv ファイルの最初の 10 行をアップロードしました。
この CSV 出力は、私のテキスト エディター UltraEdit からコピーしたもので、var1 は値 0 または 1 を取り、var2 は値 0 および 1 を取り、var3 は値 0、1、2 を取り、var4 は値 0、1 を取り、 2,3 および depvar は値 1 または 0 を取ります。この csv は、RAND 関数を使用して最大約 100 万行まで Excel で複製できます。その後、テキスト エディターで多数の行を取得するために、コピー アンド ペーストを数回行うことができます。ウルトラエディットのように。基本的に、RAND() を 1 列に 100 万列に入力し、RAND() 列の横の列で round(column) を実行して 1 と 0 を取得します。同様の考え方が 0,1,2,3 にも当てはまります。
プロファイリング ファイルは長いので、最も時間がかかった行を添付します。
私が最も驚いたのは、Fortran を呼び出している .Call 関数です。たぶん私はそれを理解していませんでした。この関数を使用すると、すべての計算が完了するようです。これは、Fortran コードを抽出するためのリンク関数のようなものだと思いました。さらに、Fortran がすべての作業と反復的に重み付けされた最小二乗/QR をすべて実行している場合、残りのコードに時間がかかるのはなぜですか。
r - 応答変数のみで線形モデルを適合させることは可能ですか?
これを行うと、2 つの係数 (切片と年) が得られます。
でも正解は0.944
応答変数だけに glm 式を指定する方法はありますか? 最初のデータ フレームで 2 番目の数式を使用すると、"." が原因で間違った答えが得られます。「年」も含みます。2 番目のデータ フレームでは、列が 1 つしかないためごまかしています。
r - ロジスティック回帰 - glm の cbind コマンド
私はRでロジスティック回帰を行っています.誰かがこれら2つの行を実行することの違いを明確にすることができますか?
データは次のようになります: (注: 応答はバイナリです。0=死亡 1=死亡しない)
math - 方程式をベクトル化する方法
Andrew Ng 教授の GLM に関する講義を見た後、K 分類器の問題を解決するために Softmax 回帰アルゴリズムを実装しようとしています。Softmax 回帰のコスト関数を実装するコードを最終的に記述するまで、彼の言っていることはすべて理解できたと思いました。これは次のとおりです。
私が抱えている問題は、これをベクトル化する方法を見つけようとしていることです。繰り返しますが、線形およびロジスティック回帰で実行できたので、このような方程式をベクトル化する方法を理解したと思いましたが、その式を見た後、行き詰まりました。
これに対するベクトル化された解決策を見つけたいと思っていますが (似たような質問がすでに投稿されていることを認識しています: Vectorized Implementation of Softmax Regression )、私がもっと興味を持っているのは、あなたの誰かが私に方法を教えてくれるかどうかです (あなたの方法)。このような方程式をベクトル化された形式に体系的に変換します。たとえば、ML の専門家または経験豊富なベテランの場合、文献で新しいアルゴリズムを初めて読んで、上記の式と同様の表記法で書かれているのを見て、どのようにそれらを次のように変換しますか?ベクトル化されたフォーム?
モーツァルトに「どうしてこんなにピアノが上手なの?」と尋ねる学生のように思われているかもしれません。しかし、私の質問は、この資料をより良くしたいという願望から動機付けられたものであり、誰もが方程式をベクトル化する方法を知って生まれたわけではなく、誰かが独自のシステムを考案したに違いないと仮定しています。もしそうなら、共有してください! よろしくお願いします!
乾杯
r - Rでは、binomial()とlapplyを使用してpredict()値を0と1の間に制約します
以下に示すように、predict()関数内で適用するGLM、family = binomial(link = logit)モデルがあります。予測値は0と1を超えていますが、確率として保持したいと思います。そこで、apply関数で使用できるbinomial()$inverseコマンドを使用します。
これは、最初に実行したときは問題なく機能しましたが、Rを閉じて再開した後、次のエラーが発生します。
このコードは通常は機能していたので、私はこれに何時間も苦労してきました。誰かが私が間違っていることについて考えを持っていますか?これを行うためのより良い方法はありますか?
私のコードは以下の通りです。他のバリエーションも試しましたが、動作しません。