1

R中的新學生,在很少/沒有指令的情況下進行非常快速的課程。請耐心等待...到目前爲止,你們都非常樂於助人,我很感激。如果這沒有意義,我提前道歉。嵌套函數中的置信區間

我想使用列「year」,「complex」,「mean」,「2_sd」和「n」從一個對象中讀取列的函數,然後計算置信區間,然後將lower和上部CI作爲兩個單獨的列轉換爲與CI計算的產品具有相同尺寸的新對象。不過,我不斷收到一個錯誤:

代碼低CI:

x=aggregate(m.all$mean, by=list(year,complex),FUN=(m.all$mean - qnorm(0.9) * sd(m.all$mean)/sqrt(m.all$n))) 

錯誤:

'(m.all$mean - qnorm(0.9) * sd(m.all$mean)/sqrt(m.all$n))' is not a function, character or symbol 

我試着使用:

x=aggregate(total_male, by=list(year,complex),FUN=t.test(total_male,conf.level=0.90)) 

(其中 「total_male」 ,「年份」,「複雜」變量來自BASE對象),但是當它位於aggregate()內部時,R不會識別t.test原因...

BASE對象是3列「年」,「複雜」,「total_males」。 NEW對象有「year」,「complex」,「mean」,「2_sd」和「n」我用BASE對象和函數構建了「mean」,「2_sd」和「n」,並且然後合併它們來創建新的對象,所以我理解這一點。但是,CI的是混淆了我。

基本對象已連接()「主編,所以我可以用變量工作更容易。

任何想法? 新的對象:

m.all year complex mean X2st.dev n 1 2007 3corners 26.28571 52.04760 7 2 2007 Blue 18.87500 20.15476 8 3 2007 book_cliffs 4.50000 13.19091 6 4 2007 Diamond 13.25000 48.83431 20

舊的對象是4個絡合物41層的意見(都在2007年),與各種數字tot_male值: head(d4) year complex tot_male 2 2007 Diamond 17 21 2007 3corners 19 36 2007 Blue 40 73 2007 Diamond 22 85 2007 Diamond 0 115 2007 Diamond 2

+0

dput(m.all)的後期輸出,或者如果它太大,則記錄頭(m。全部)在這裏給大家清楚的理解數據。 – rnso 2014-10-07 00:55:42

+0

@rnso對不起,那是怎麼回事? – Charlie 2014-10-07 01:18:47

+0

查看回答@BondedDust – rnso 2014-10-07 01:20:22

回答

0

以下可能是你想要的(因爲均值和標準差已經生成):

> m.all$lowerci = with(m.all, mean - qnorm(0.9)*X2st.dev/sqrt(n)) 
> m.all 
    year  complex  mean X2st.dev n lowerci 
1: 2007 3corners 26.28571 52.04760 7 1.0748434 
2: 2007  Blue 18.87500 20.15476 8 9.7429407 
3: 2007 book_cliffs 4.50000 13.19091 6 -2.4013685 
4: 2007  Diamond 13.25000 48.83431 20 -0.7441377 

同樣,對於上CI:

> m.all$upperci = with(m.all, mean + qnorm(0.9)*X2st.dev/sqrt(n)) 
> m.all 
    year  complex  mean X2st.dev n lowerci upperci 
1: 2007 3corners 26.28571 52.04760 7 1.0748434 51.49658 
2: 2007  Blue 18.87500 20.15476 8 9.7429407 28.00706 
3: 2007 book_cliffs 4.50000 13.19091 6 -2.4013685 11.40137 
4: 2007  Diamond 13.25000 48.83431 20 -0.7441377 27.24414 
+0

我爲我的無知道歉,但由於X2st.dev是2個標準偏差,爲了計算真正的更低CI,我需要將它除以2。我可以將X2st.dev/2放在括號中,還是必須在'with()'語句之外執行該操作?當我這樣做的時候,我得到了13.68分,而我的「教授」則是-363.5分。 @rnso – Charlie 2014-10-07 04:00:21

+0

另外,有沒有一種方法可以將它放入類似如下命令:'> d2.n = aggregate(tot_male,by = list(year,complex),FUN = length) > names(d2.n )[1:3] = c(「year」,「complex」,「n」)m.all = merge(m.all,d2.n,by = c(1:2)) > m。所有' 這就是我最初建立m.all – Charlie 2014-10-07 04:02:33

1

你需要學習如何構建的R功能。你現在擁有的只是一個表達式,但它不能接受參數。也許:

x=aggregate(m.all$mean, by=list(year,complex), 
      FUN=function(v){ v - qnorm(0.9) * sd(v)/sqrt(length(v)) }) 

請不要attach數據對象。它只是使事情變得不那麼穩定,不太容易理解。如果「m.all」實際上是一個名爲列的數據幀「是指」,「年」,那麼你提出的第一行可能是:

with(m.all, aggregate(mean, by=list(year,complex), 
      FUN=function(v){ v - qnorm(0.9) * sd(v)/sqrt(length(v)) })) 

有了可以讓你創建一個小的環境中,列名會得到解釋爲對象。一般來說,使用meansd這樣的名稱是一個好主意,因爲這些名稱是函數名稱。

+0

'>(m.all,aggregate(mean,by = list(year,complex),FUN = function(v){v-qnorm(0.9)* sd v)/ sqrt(length(v))}))' @BondedDust當我運行它時,我得到了一列數年和複合體,但第三列全是NA。在運行之前,我把所有的東西都分開了。另外,我想添加兩列到「m.all」,一個是lowerCI,另一個是upperCI。運行你的代碼後我能做到嗎?注意我將NEW對象添加到我的原始文章中。這是我想要處理的數據,並添加列。提前致謝。 – Charlie 2014-10-07 01:45:32

+0

我並沒有真正設法讓你得到兩列置信區間,因爲你最初沒有提供任何數據。只是試圖幫助'聚合'的機制。看起來@mso已經處理了它。 – 2014-10-07 02:39:05