初心者のための R および RjpWiki に関する質問コーナー

以下の 4 つの「●項目」のどれかをクリック!!


新規投稿欄: --- その前に,「投稿における注意事項」を読んでから!
このページの目次 --- 質問への回答・コメントの参照
最新のスレッド --- 最も最近に書き込まれた「親」記事(最新のコメントが付いた記事ではありません)
Q&A (初級者コース) 過去の目次 --- 今までの 17 個の書庫の参照


●● 目次 ●●

参照は,個々の項目をクリック(質問への回答・コメントの参照も,個々の項目をクリック)


●● 新規投稿 ●●

まずは,「投稿における注意事項」を読んで,それに従ってください。
これに従わない場合には,回答が得られにくい場合があります。 




シミュレーションで確率を見積もりたい

HO0217 (2020-12-29 (火) 21:28:39)

「赤札と青札がある。確率1/2でどちらかを引く。
これを100回繰り返し、赤札を55回以上引く確率を求めよ。」
という問題を解くため、正規分布に近似して確率を求めると、
15.87%でした。
(これは私の計算結果で、答えは知りません。あってるとは思いますが、間違っているかもしれません)


近似ではなく、二項分布で計算してみようと思い、
以下のコードで確率を計算すると、約18.41%(出力は0.1841008)で、
近似とはやや違う結果となりました。
tmp_nu<-0
n_nu<-100
k_nu<-55
for(i in k_nu:n_nu){

	tmp_nu<-(
		choose(n_nu,i)*(1/2)^(i+(100-i))
	)+tmp_nu

}
tmp_nu


次に、シミュレーションで確率を見積もるために以下のコードを実行しました。
出力は0.13554となりました。

simu_0_nu<-100 #100枚引く。
simu_1_nu<-1000000 # 何セット試すか。
result_0_ve<-rep(NA,simu_0_nu)
result_1_ve<-rep(NA,simu_0_nu)
result_2_ve<-rep(F,simu_1_nu)
set.seed(123)
for(i in 1:simu_1_nu){

	for(j in 1:simu_0_nu){
		result_0_ve<-rnorm(simu_0_nu,0,1)	#平均0の正規分布は確率1/2で0を越える数値を出す
		result_1_ve<-result_0_ve>0	#0を越えたら真	
	}
	result_2_ve[[i]]<-sum(result_1_ve)#真の数を数える	

}

sum(result_2_ve>55)
sum(result_2_ve>55)/simu_1_nu


ちなみに、set.seed(123)を
set.seed(777)にすると0.135447
set.seed(789)にすると0.136265
set.seed(111)にすると0.136006
set.seed(222)にすると0.135414
となりました。
どうやら偶然ではなく、私がシミュレーションに使ったコードでは、
他の計算よりも小さい値になっているようです。

何が原因でシミュレーションと二項分布の計算でこんなにも違ってしまうのでしょうか?

わかる方がいらっしゃいましたら、教えてくださると助かります。
よろしくお願いいたします。


所感

元Rユーザー (2020-12-27 (日) 22:33:22)

全盛期とは比較にならないほどの過疎ぶりですね・・・時代は完全にpythonになったのだなと思います。


パネルデータ分析における警告メッセージ(重複エラー?)

R初心者 (2020-11-08 (日) 22:39:38)

パネルデータでplm分析を行ってますが、下記のメッセージが出て対応に苦慮しております。

警告メッセージ:
1: pdata.frame(data, index) で:

 duplicate couples (id-time) in resulting pdata.frame
to find out which, use e.g. table(index(your_pdataframe), useNA = "ifany")

2: is.pbalanced.default(index1, index2) で:

 duplicate couples (id-time)


恐らく重複エラーなのかもしれませんが、下記を見ると年次などの下線部がエラーの様ですが(?)、削除はしたくなく対応方法を知りたいです。宜しくお願いいたします。

  コード   PBR 業種コントロール  年次 `1人当たり単体人件費`… 連結子会社数 売上高研究開発費
  <chr>  <dbl>            <dbl> <dbl>            <dbl>        <dbl>            <dbl>
1 T1301  0.915            0.630  2019             5.87           26          0.0013 
2 T1301  0.908            0.618  2018             5.88           24          0.00120
3 T1301  0.872            0.644  2017             6.18           24          0.0011 
4 T1301  0.867            0.678  2016             6.15           25          0.00120

急ぎで知りたいです。

Rビギナー (2020-10-28 (水) 01:22:23)

SVM実装の際に、package(kernlab)を使用しています。ksvm関数を使用すると以下のようなエラーが出ます。これはどういう意味でしょうか?

SVM <- ksvm( data_Mic.dummy ~AveMaxTemp7+TP1yp+TN1yp+AveWind7, #モデル式

            data=data_Mic,
            kernel ="rbfdot", #カーネル関数の設定
            kpar=list(sigma=0.2), #カーネル関数のパラメータ
            C=1, 
            cross=10)

.local(x, ...) でエラー:

 No Support Vectors found. You may want to change your parameters
追加情報:  警告メッセージ: 
.local(x, ...) で:   強制変換により NA が生成されました

Rで複数の関数のセットをループしたい。

R初心者 (2020-10-20 (火) 12:55:09)

R初心者で色々わかっていないので、質問の仕方が間違ってたらすみません。
Rで関数の処理を行いたいのですが、

解析結果のデータは

dds <- 解析結果

に格納しました。
その大量のデータの中で図示したい5つだけをリストアップし
dataという下記のようなデータフレームを作りました。

   name   ID
1  aaaaa   001
2  bbbbb   002
3  ccccc   003
4  ddddd   004
5  eeeee   005

処理したい関数が下記のように3つでpng→plotCount→dev.offでワンセットです。

図示したいのが1つであれば
png("aaaaa.png")
plotCounts(dds, gene="001", intgroup="condition" )
dev.off

でデータフレームの一行目のものが図として保存されます。
ですが連続してdataの二行目、三行目...と自動でループ処理させたくて、
forやlapplyなどを試したのですが、引数がnameとIDの二つということもあり、うまくプログラムを回せませんでした。

どなたかお詳しい方に上記の関数でpng→plotCount→dev.off→png→plotCount→dev.off→...を自動的に回す方法をご教授頂きたいです。

よろしくお願いします。


回帰直線 (RMA) の描き方と統計情報の出し方等について

うみねこ (2020-07-24 (金) 22:13:58)

R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)

回帰直線の描き方と、その統計情報の出し方について、教えて頂けないでしょうか。
9列×6行の表があり、その2列目(length)と6列目(weight)にlog変換をして、RMA法を使って回帰直線を描きたいです。gx.rmaというファンクションを見つけましたが、以下のコードではエラーが出て動きません。
出来たら、95%予測区間や95%信頼区間等についても出し方を知りたいです。
どうぞご教授よろしくお願いいたします。

data<- read.table('body.txt', header=T)
row.names(data)=data[,1]
length <- setNames(log(data[,2]),data[,1])
weight <- setNames(log(data[,6]),data[,1])
model <-gx.rma(length,weight)
model


Treatment indicator ('Tr') must be a logical variable---i.e., TRUE (1) or FALSE (0)

catdogcat (2020-07-24 (金) 18:20:51)

マッチングを試みましたが下記のエラーが出ました

Treatment indicator ('Tr') must be a logical variable---i.e., TRUE (1) or FALSE (0)

比較する群の変数は因子としてあり 0.1 となっているのですが
解決策がわかりません。
ご教授お願い致します。


Rcppで行列を多次元配列にfor文で代入する

(2020-07-22 (水) 23:44:38)

下記コードをpgm.cppに保存後、Rcpp::sourceCpp("pgm.cpp")でコンパイルし
test(matrix(c(1,2,3,4),2,2))を実行したのですが1行1列の値が返ってこずエラーでRが落ちます。もし良ければご助言いただけないでしょうか。


#include<Rcpp.h>
#define MAX 100
using namespace std;
// [[Rcpp::export]]
int test(Rcpp::IntegerMatrix mtx){
int matrix[MAX][MAX];
for(int i=0; i < mtx.rows(); ++i){
for(int j=0; j < mtx.cols(); ++j){
matrix[i][j] = mtx(i,j);
}}

return matrix[0][0];

}

くの字に曲がるデータプロットの特異点の算出?

がんば (2020-07-22 (水) 08:35:12)

昨年はおせわになりました。実験結果をグラフにすると直線状ではなく「くの字」状に曲がった結果となる場合もあるのですがこの時の特異点をRで一発算出するような手段がないでしょうか?「データをソートして下限側から徐々に近似曲線を構築するのと上限側から構築するのをそれぞれ行っていって次の点がそれまでの近似曲線のバラツキ範囲外になる点を求める」ような操作をする(人の目視確認の場合はこんな手順だと思います)手段を意図してます。
動作環境:

sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)
Matrix products: default
locale:
[1] LC_COLLATE=Japanese_Japan.932 LC_CTYPE=Japanese_Japan.932 LC_MONETARY=Japanese_Japan.932
[4] LC_NUMERIC=C LC_TIME=Japanese_Japan.932
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_4.0.2 tools_4.0.2


R studio でグラフ化した時に日本語文字化けが起こる

りょう (2020-06-30 (火) 21:38:04)

Rによる多変量解析と言う本でRを動かしているのですが、グラフ化すると日本語の部分が□□□のようになります。
よくわからないのが、"plot", "plotmeans"などでは日本語表示されるのですが、xyplot, histogramだと文字化けすることです。以下がその時のコードです。

jhk <- read.csv('人事評価結果.csv')
head(jhk, 3)
|ID|性別|部署|年代|協調性|技能|知識|ストレス|
|1|M|A部|中堅|70|65|71|53|
|2|F|B部|熟練|45|62|70|46|
・・・・・・
par(family = "HiraKakuProN-W3") #一応これ試してみました
library(lattice, gplots)
histogram(~ストレス, data = jhk, breaks = 20, type='count') #文字化けする
xyplot(知識~技能|年代+部署, data=jhk) #文字化けする
plotmeans(協調性~性別, data=jhk, p=0.95, ylim=c(49, 54)) #文字化けしない

・macOS Catalina バージョン10.15.5
・R studio version 4.0.2 です。この前に使用していたバージョン3.6.3でも同様の状態でした。
・CSVファイルはUTF-8で保存されています。
・par(family = "HiraKakuProN-W3") なども試しました。

GoogleやCRAN, マニュアルなどで既に調べたのですがわからず、困っているのでご教授いただけると幸いです。


ggplot

ぼう (2020-05-14 (木) 12:25:32)

R4.00でggplotを使おうと思っていますが、エラーが出てしまいます。

次のコマンドを実行すると、下のような結果が出てきてしまいます。

> install.packages("ggplot2", dependencies = TRUE)
> library(ggplot2)
> str(iris)
'data.frame':   150 obs. of  5 variables:~
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
 > ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width))~
 ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) でエラー: 
   関数 "ggplot" を見つけることができませんでした 

ccf

show (2020-03-10 (火) 12:58:28)

ccf(rw,rw2)と入力した場合、どちらを基準にしてlagを取っているのでしょうか?


R のアップデート

私は誰でしょう? (2020-03-01 (日) 21:20:52)

今まで,最新の R にするために(新しもの好きなので)
あ,見ての通り,Mac ユーザです。

curl https://mac.r-project.org/el-capitan/R-3.6-branch/R-3.6-branch-el-capitan-sa-x86_64.tar.gz | sudo tar fvxz - -C /


をやっていたのですが,2 ヶ月ほど前から,実行結果が思わしくなくなっています。
つまるところ,件の URL はアクセス不可ということのようで,アップデートは出来ません。

念の為
http://mac.r-project.org/el-capitan/R-3.6-branch/R-3.6-branch-el-capitan-signed.pkg
を使えばアップデートは出来ます。


連番でファイルを読み込みたいときにファイルに欠番があるときの処理

Rビギナー (2020-02-26 (水) 10:12:45)

お世話になります.
下記のように1~3まで連番のファイルを読み込みたいのですが,例えば2番のファイルが無い場合にそのまま1,3のファイルを読み込んでプログラムが止まらないようにするにはどうしたらいいでしょうか.
try関数で可能かと思いやってみたのですが,だめでした.
ご教示ください.
よろしくお願いいたします.

==ここから

 point <- 1:3 # for文を回す数を設定
 for (i in point) {
   mypath <- file.path(getwd(), paste0(i,"t2-1.csv")) 
   df <- assign(paste0("data",i), read.csv(mypath, header = T))
   df <- data.frame(df)
   df
   head(df)
   df$X <- strptime(df$X,"%Y/%m/%d %H:%M'%S")
   head(df)
   df$X <- as.POSIXlt(df$X,"%Y/%m/%d %H:%M:%S",tz="GMT0")
   head(df)
   #https://qiita.com/tktz/items/733c37b1d6102ae52120
   library(xts)
   df$X <- align.time(df$X-10*60/2,10*60)
   head(df)
   date = paste0("date",i) 
   Temp = paste0("Temp",i) 
   RH = paste0("RH",i) 
   colnames(df) <- c(date,Temp,RH)
   head(df)
   mypath <- file.path(getwd(), paste0(i,"t1.csv")) 
   write.csv(df,mypath)
 }

時系列

マリン (2020-02-23 (日) 10:13:04)

2つの時系列のデータ(約80個)の相関(どのくらい類似性があるか)を
見たいのですが、方法を教えてください。


固定効果を用いた回帰線

(2020-02-14 (金) 14:34:30)

Book1というcsvファイルのデータを用いてGLMMによる解析を行ったのですが、固定効果の値を用いた回帰線がうまく引けません。
csvファイルおよび解析を行ったスクリプトをBook1GLMMというファイル名でアップロードしましたので、ご教授いただけますと幸いです。
よろしくお願いいたします。


ガンマ分布

(2020-02-06 (木) 21:14:35)

GLMMなどで、目的変数に用いるデータが連続値で0以上であればガンマ分布を用いると統計の教科書等には書いてあるのですが、連続値で0以上(データの最小値は0)のデータでガンマ分布を用いて解析しようとすると
「non-positive values not allowed for the 'gamma' family」というエラーが出ます。
また、同じデータで線形混合効果モデルなら結果は出るのですが、「boundary (singular) fit: see ?isSingular」という警告?が出るせいなのかランダム効果を考慮した回帰線が一本しか出ません。
解決策などありましたら、お教えいただけますと幸いです。


GLMMについて

ra (2020-01-27 (月) 11:58:45)

R初心者です。
GLMMで解析を行った後、散布図に回帰線を引きたいのですが、predict関数を読み込ませようとすると(オブジェクト"Place"がありません)というエラーが出ます(Placeはランダム効果です)。このエラーを解消し、回帰線を引くにはどうすれば良いでしょうか?
入力したコマンドを載せておきます。
よろしくお願いいたします。

model1<-glmer(POMN~log(siltclayN)+(1|Place),family=Gamma(link="log"),data=data)
plot(data$siltclayN,data$POMN,pch=c(25,18,17,16,15,9,8),cex=3,cex.axis=2)
legend("bottomright",legend=c("HA","TN","OG","YN","KG","WA","AS"),pch=c(25,18,17,16,15,9,8),cex=2)
xx<-seq(min(data$siltclayN),max(data$siltclayN),length=100)
yy<-predict(model1,newdata=data.frame(siltclayN=xx),type="response")
lines(xx,yy,lwd=2)


文字列からバイト数を指定して切り出す

(2020-01-26 (日) 22:45:01)

半角・全角が混在する文字列からバイト数を指定して、部分文字列を抽出したいのですが、どのような関数がありますでしょうか。
例えば
x <- "あaいbうc"
という文字列から3-5byte目を抽出したいです。
("aい"という部分文字列を抽出したいです。)

substringは文字数を指定する関数のため、byte単位で抽出が不可能なようです。

お手数ですがご教示お願いいたします。


apply系関数でfunに線形回帰lmが適用可能な関数

TY (2020-01-07 (火) 15:59:04)

シミュレーションで同じ関数を繰り返し(10^5~10^6回程度)実行する場面を想定しています.
例えば,以下のsample_dataでREP毎にlm(y~x)を実行したいです.
for文で実行することはできるのですが,一般にapply系関数の方が実行が速いと聞き,
探しています.apply系関数に関する知識は,tapply関数にmean関数を適用できる,
 tapply(sample_data$y, sample_data$REP,mean)
程度のレベルです.

【sample_data】

     y    x REP

1 133 3.9 1
2 81 -2.3 1
3 104 -1.2 1
4 89 0.7 1
5 142 4.0 1
6 74 -2.9 1
7 140 3.9 1
8 170 4.4 1
9 128 1.6 1
10 107 1.2 1
11 49 -4.3 2
12 79 -2.9 2
13 77 -3.2 2
14 125 1.8 2
15 82 -1.1 2
16 132 2.6 2
17 99 -0.0 2
18 140 2.1 2
19 140 4.9 2
20 88 -1.1 2



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS